From 1911ea44a54526933a8d3de2a2e5b3151699e68c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 10 Aug 2005 23:37:59 +0000 Subject: [PATCH] handbook updates for 0.77 --- doc/handbook.tex | 1354 ++++++----- doc/interpreter.dia | Bin 2120 -> 2363 bytes doc/interpreter.eps | 5537 ++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 5974 insertions(+), 917 deletions(-) diff --git a/doc/handbook.tex b/doc/handbook.tex index acffad2dd3..02891999fb 100644 --- a/doc/handbook.tex +++ b/doc/handbook.tex @@ -75,7 +75,7 @@ \chapter*{Foreword} -This handbook documents release 0.76 of the Factor programming language. +This handbook documents release 0.77 of the Factor programming language. Note that this handbook is not a tutorial or introductory guide, nor does it cover some background material that you are expected to understand, such as object-oriented programming, higher-order functions, continuations, or general algorithm and program design. @@ -280,7 +280,9 @@ description={a collection of words, uniquely identified by name. The hashtable o A \emph{word} is a code definition identified by a name. Words are sorted into \emph{vocabularies}. Words are discussed in depth in \ref{words}. When the parser reads a token, it attempts to look up a word named by that token. The -lookup is performed in the parser's current vocabulary set. +lookup is performed by searching each vocabulary in the search path, in order. + +Due to the way the parser works, words cannot be referenced before they are defined; that is, source files must order definitions in a strictly bottom-up fashion. For a way around this, see \ref{deferred}. For a source file the vocabulary search path starts off with two vocabularies: \begin{verbatim} @@ -291,7 +293,7 @@ The \texttt{syntax} vocabulary consists of a set of parsing words for reading Fa and defining new words. The \texttt{scratchpad} vocabulary is the default vocabulary for new word definitions. -At the interactive listener, the default search path contains many more vocabularies. The default search path depends on how the parser was invoked (\ref{parsing-quotations}). +At the interactive listener, the default search path contains many more vocabularies. Details on the default search path and parser invocation are found in \ref{parsing-quotations}. \wordtable{ \vocabulary{syntax} \parsingword{USE:}{USE: \emph{vocabulary}} @@ -301,7 +303,7 @@ name=search path, description={the list of vocabularies that the parser looks up tokens in. You can add to this list with the \texttt{USE:} and \texttt{USING:} parsing words}}} \useglos -The \texttt{USE:} parsing word adds a new vocabulary at the front of the search path. Subsequent word lookups by the parser will search this vocabulary first. +Adds a new vocabulary at the front of the search path. Subsequent word lookups by the parser will search this vocabulary first. \begin{alltt} USE: lists \end{alltt} @@ -314,7 +316,41 @@ Consecutive \texttt{USE:} declarations can be merged into a single \texttt{USING USING: lists strings vectors ; \end{alltt} -Due to the way the parser works, words cannot be referenced before they are defined; that is, source files must order definitions in a strictly bottom-up fashion. For a way around this, see \ref{deferred}. +\wordtable{ +\vocabulary{syntax} +\parsingword{IN:}{IN:~\emph{vocabulary}} +} +Sets the current vocabulary for new word definitions, and adds the vocabulary at the front of the search path (\ref{vocabsearch}). + +Here is an example demonstrating the vocabulary search path. If you can understand this example, then you have grasped vocabularies. +\begin{verbatim} +IN: foe +USE: sequences + +: append + #! Prints a message, then calls sequences::append. + "foe::append calls sequences::append" print append ; + +IN: fee + +: append + #! Loops, calling fee::append. + "fee::append calls fee::append" print append ; + +USE: foe + +: append + #! Redefining fee::append to call foe::append. + "fee::append calls foe::append" print append ; + +"1234" "5678" append print +\end{verbatim} +When placed in a source file and run, the above code produces the following output: +\begin{verbatim} +fee::append calls foe::append +foe::append calls sequences::append +12345678 +\end{verbatim} \section{Numbers} @@ -568,16 +604,20 @@ Lists are documented in \ref{lists}. \subsection{Words} -While words parse as themselves, a word occurring inside a quotation is executed when the quotation is called. Sometimes it is desirable to have a word be pushed on the data stack during the execution of a quotation, usually for reflective access to the word's slots. +\newcommand{\wrapglos}{ +\glossary{ +name=wrapper, +description={an instance of the \texttt{wrapper} class, holding a reference to a single object. When the evaluator encounters a wrapper, it pushes the wrapped object on the data stack. Wrappers are used to push words literally on the data stack}}} +\wrapglos +While words parse as themselves, a word occurring inside a quotation is executed when the quotation is called. Sometimes it is desirable to have a word be pushed on the data stack during the execution of a quotation. The canonical use-case for this is passing the word to the \verb|execute| word (\ref{quotations}), or alternatively, reflectively accessing word properties (\ref{word-props}). \wordtable{ \vocabulary{syntax} \parsingword{\bs}{\bs~\emph{word}} } -Reads the next word from the input string and appends some \emph{code} to the parse tree that pushes the word on the stack when the code is called. The following two lines are equivalent: -\begin{verbatim} -\ length -[ length ] car -\end{verbatim} +Reads the next word from the input string and appends a \emph{wrapper} holding the word to the parse tree. When the evaluator encounters a wrapper, it pushes the wrapped object literally on the data stack. + +Wrappers and the implementation of the \verb|\| word are discussed in detail in \ref{reading-ahead}. + \wordtable{ \vocabulary{syntax} \parsingword{POSTPONE:}{POSTPONE: \emph{word}} @@ -626,7 +666,7 @@ Reads from the input string until the next occurrence of \texttt{"}, converts the string to a string buffer, and appends it to the parse tree. As with strings, the escape codes described in \ref{syntax:char} are permitted. \begin{alltt} - SBUF" Hello world" sbuf>string print + SBUF" Hello world" >string print \textbf{Hello world} \end{alltt} @@ -680,35 +720,13 @@ description={an instance of a user-defined class whose metaclass is the \texttt{ \parsingword{<<}{<<} \parsingword{>>}{>>} } -Parses a tuple. The tuple's class must follow \texttt{<<}. The element after that is always the tuple's delegate. Further elements until \texttt{>>} are specified according to the tuple's slot definition, and an error is raised if an incorrect number of elements is given. +Parses a tuple. The tuple's class must follow \texttt{<<}. The element after that is always the tuple's delegate. Further elements until \texttt{>>} are specified according to the tuple's slot definition. If an insufficient number of elements is given, the remaining slots of the tuple are set to \verb|f|. Listing too many elements raises a parse error. \begin{verbatim} << color f 255 0 0 >> \end{verbatim} Tuples are documented in \ref{tuples}. -\subsection{Matrices}\label{syntax:matrices} -\newcommand{\matrixglos}{\glossary{ -name=matrix, -description={an instance of the \texttt{matrix} class, representing a mathematical matrix of numbers}}} -\matrixglos -\wordtable{ -\vocabulary{syntax} -\parsingword{M[}{M[} -\parsingword{]M}{]M} -} -Parses a matrix. A matrix is specified as a set of rows, and each row is written like a list and must have the same length. The following is an example: -\begin{verbatim} -M[ [ 3 -5 1 ] - [ -2 7 1/2 ] ]M -\end{verbatim} -It corresponds to the following mathematical matrix: -$$\left( \begin{array}{c c c} -3 & -5 & 1 \\ --2 & 7 & \frac{1}{2} -\end{array} \right)$$ -Matrices are documented in \ref{matrices}. - \section{Comments}\label{comments} \wordtable{ @@ -808,13 +826,18 @@ name=call frame, description=the currently executing quotation}} \cfglos \glossary{ +name=evaluator, +description={a process by which code is evaluated, taking quotations as input. Two possibilities are the interpreter, which evaluates a quotation directly, and the compiler, which transforms quotations into machine code which evaluates the quotation when invoked}} +\glossary{ name=interpreter, description=executes quotations by iterating them and recursing into nested definitions. see compiler} \glossary{ name=quotation, description=a list containing Factor code to be executed} -The Factor interpreter executes quotations. Quotations are lists, and since lists can contain any Factor object, they can contain words. It is words that give quotations their operational behavior, as you can see in the following description of the interpreter algorithm. +A Factor evaluator executes quotations. Quotations are lists, and since lists can contain any Factor object, they can contain words. It is words that give quotations their operational behavior, as you can see in the following description of the evaluator algorithm. + +The Factor interpreter performs the below steps literally. The compiler generates machine code which perform the steps in a more efficient manner than the interpreter (\ref{compiler}). \begin{itemize} \item If the call frame is \texttt{f}, the call stack is popped and becomes the new call frame. @@ -825,12 +848,13 @@ The Factor interpreter executes quotations. Quotations are lists, and since list \item If the word is compiled or primitive, the interpreter jumps to a machine code definition. See \ref{primitives}. \item If the word is undefined, an error is raised. See \ref{deferred}. \end{itemize} +\item If the car of the call frame is a wrapper, the wrapped object is pushed on the data stack. \item Otherwise, the car of the call frame is pushed on the data stack. \item The call frame is set to the cdr, and the loop continues. \end{itemize} \begin{figure} -\caption{Interpreter algorithm} +\caption{Evaluator semantics} \begin{center} \scalebox{0.45}{ %BEGIN IMAGE @@ -842,12 +866,7 @@ The Factor interpreter executes quotations. Quotations are lists, and since list \end{figure} \glossary{name=combinator, description=a word taking quotations or other words as input} -The following pair of words invokes the interpreter reflectively. They are used to implement \emph{combinators}, which are words that take code from the stack. Combinator definitions must be followed by the \texttt{inline} word to mark them as inline in order to compile; for example: -\begin{verbatim} -: keep ( x quot -- x | quot: x -- ) - over >r call r> ; inline -\end{verbatim} -Word inlining is documented in \ref{declarations}. +The following pair of words invokes the interpreter reflectively. \wordtable{ \vocabulary{kernel} @@ -871,6 +890,13 @@ Execute a word definition, taking action based on the word definition, as above. \textbf{Hello world} \end{alltt} +These words are used to implement \emph{combinators}, which are words that take code from the stack. Combinator definitions must be followed by the \texttt{inline} word to mark them as inline in order to compile; for example: +\begin{verbatim} +: keep ( x quot -- x | quot: x -- ) + over >r call r> ; inline +\end{verbatim} +Word inlining is documented in \ref{declarations}. + \subsection{Tail call optimization} \newcommand{\tailglos}{\glossary{ @@ -885,7 +911,7 @@ purpose in pushing the empty call frame on the call stack. Therefore the last ca \subsection{Call stack manipulation} -Because of the way the interpreter is described in \ref{quotations}, the top of the call stack is not accessed during the execution of a quotation; it is only popped when the interpreter reaches the end of the quotation. In effect, the call stack can be used as a temporary storage area, as long as pushes and pops are balanced out within a single quotation. +The definition of evaluator semantics in \ref{quotations} stipulates that the top of the call stack is not accessed during the execution of a quotation; the call stack is only popped when the end of the quotation is reached. In effect, the call stack can be used as a temporary storage area, as long as pushes and pops are balanced out within a single quotation. \wordtable{ \vocabulary{kernel} \ordinaryword{>r}{>r ( x -- r:x )} @@ -997,6 +1023,17 @@ X dup [ Y ] [ drop Z ] ifte } These are variations of \texttt{ifte*} where one of the quotations is \texttt{[ ]}. +The following two lines are equivalent: +\begin{verbatim} +X [ Y ] when* +X dup [ Y ] [ drop ] ifte +\end{verbatim} +The following two lines are equivalent: +\begin{verbatim} +X [ Y ] unless* +X dup [ ] [ drop Y ] ifte +\end{verbatim} + There is one final conditional form that is used to implement the ``default value'' idiom. \wordtable{ \vocabulary{kernel} @@ -1221,13 +1258,8 @@ Tests if the \texttt{object} is a word. \symbolword{vocabularies} } Words are organized into named vocabularies, stored in the global \texttt{vocabularies} variable (\ref{namespaces}). -\wordtable{ -\vocabulary{syntax} -\parsingword{IN:}{IN:~\emph{vocabulary}} -} -Sets the current vocabulary for new word definitions, and adds the vocabulary to the search path (\ref{vocabsearch}). -Parsing words add definitions to the current vocabulary. When a source file is being parsed, the current vocabulary is initially set to \texttt{scratchpad}. +Parsing words add definitions to the current vocabulary. When a source file is being parsed, the current vocabulary is initially set to \texttt{scratchpad}. The current vocabulary may be changed with the \verb|IN:| parsing word (\ref{vocabsearch}). \subsection{Searching for words} @@ -1254,7 +1286,8 @@ Creates a new word \texttt{name} in \texttt{vocabulary}. If the vocabulary alrea } Creates a new word \texttt{name} in the current vocabulary. This word is intended to be called from parsing words (\ref{parsing-words}), and in fact is defined as follows: \begin{verbatim} -: create-in ( name -- word ) "in" get create dup save-location ; +: create-in ( name -- word ) + "in" get create dup save-location ; \end{verbatim} \section{Word definition} @@ -1406,13 +1439,19 @@ A compound or generic word (\ref{generic}) can be given special behavior with on \vocabulary{syntax} \parsingword{inline}{inline} } -Marks the most recently defined word as an inline word. The compiler copies the definitions of inline words directly into the word being compiled. Combinators must be inlined in order to compile. For any other word, inlining is merely an optimization; see \ref{compiler}. Inlining does not affect the execution of the word in the interpreter, nor is inlining visible when you \texttt{see} the word (\ref{exploring-vocabs}). +Declares the most recently defined word as an inline word. The compiler copies the definitions of inline words directly into the word being compiled. Combinators must be inlined in order to compile. For any other word, inlining is merely an optimization; see \ref{compiler}. Inlining does not affect the execution of the word in the interpreter, nor is inlining visible when you \texttt{see} the word (\ref{exploring-vocabs}). \wordtable{ \vocabulary{syntax} \parsingword{parsing}{parsing} } -Marks the most recently defined word as a parsing word. Parsing words run at parse time. Se \ref{parsing-words}. +Declares the most recently defined word as a parsing word. Parsing words run at parse time. See \ref{parsing-words}. + +\wordtable{ +\vocabulary{syntax} +\parsingword{stateless}{parsing} +} +Declares the most recently defined word as a stateless word, whose outputs only depend on the input values, and not on any runtime state such as variable values. Stateless words are evaluated at compile-time if their inputs are literals; for example, \verb|2 2 +| is compiled to a literal \verb|4|, because \verb|+| is declared as stateless. \section{Word properties}\label{word-props} @@ -1438,6 +1477,7 @@ The following properties are commonly-set: \item[\texttt{"vocabulary"}] The vocabulary containing the word \item[\texttt{"parsing"}] A boolean specifying if this is a parsing word (\ref{parsing-words}) \item[\texttt{"inline"}] A boolean specifying if this word is compiled inline (\ref{declarations}) +\item[\texttt{"stateless"}] A boolean specifying if this word can be evaluated at compile-time if all inputs are literal (\ref{declarations}) \item[\texttt{"methods"}] Only defined on generic words; a hashtable mapping classes to quotations (\ref{generic}) \item[\texttt{"file"}] The source file storing the word definition \item[\texttt{"line"}] The line number in the source file storing the word definition @@ -1539,7 +1579,13 @@ Everything in Factor is an object, where an object is a collection of slots. Eac \glossary{name=equal, description={two objects are equal if they have the same class and if their slots are equal, or alternatively, if both are numbers that denote the same value}} -There are two distinct notions of ``sameness'' when it comes to objects. You can test if two references point to the same object, or you can test if two objects are equal in some sense, usually by having the same type and equal slot values. +There are two distinct notions of ``sameness'' when it comes to objects. You can test if two references point to the same object, or you can test if two objects are equal in some sense, usually by being instances of the same class, and having equal slot values. Both notions of equality are equality relations in the mathematical sense; that is, they obey the following axioms: +\begin{itemize} +\item They are reflexive: $x\sim x$ +\item They are symmetric: $x\sim y$ if and only if $y\sim x$ +\item They are transitive: if $x\sim y$ and $y\sim z$, then $x\sim z$ +\end{itemize} + \wordtable{ \vocabulary{kernel} \ordinaryword{eq?}{eq?~( object object -- ?~)} @@ -1552,8 +1598,8 @@ Output \texttt{t} if two references point to the same object, and \texttt{f} oth Output \texttt{t} if two objects are equal, and \texttt{f} otherwise. The precise meaning of equality depends on the object's class, however usually two objects are equal if their slot values are equal. If two objects are equal, they have the same printed representation, although the converse is not always true. In particular: \begin{itemize} \item If no more specific method is defined, \texttt{=} calls \texttt{eq?}. -\item Two numbers are equal if they have the same numerical value. -\item Two sequences are equal if they are both instances of the same class, and if they have the same length, and elements. +\item Two numbers are equal if they have the same numerical value after being upgraded to the highest type of the two (\ref{number-protocol}). +\item Two lists, vectors, strings, string buffers or arrays are equal if they have the same length, and elements. \item Two hashtables are equal if they hold the same set of key/value pairs. \item Two tuples are equal if they are of the same class and their slots are equal. \item Two words are equal if they are the same object. @@ -1662,6 +1708,7 @@ bignum byte-array complex cons +displaced-alien dll f fixnum @@ -1673,6 +1720,7 @@ t tuple vector word +wrapper \end{verbatim} \wordtable{ \vocabulary{kernel} @@ -1754,18 +1802,31 @@ PREDICATE: integer printable CHAR: \s CHAR: ~ between? ; \end{verbatim} \subsection{Operations on classes} +\wordtable{ +\vocabulary{kernel} +\ordinaryword{class<}{class< ( class1 class2 -- ?~)} +} +Tests if all instances of \verb|class1| are also instances of \verb|class2|. This is a partial order with top and bottom in the mathematical sense; that is, it obeys the following axioms: +\begin{itemize} +\item It is reflexive: $X\subset X$ +\item It is transitive: if $X\subset Y$ and $Y\subset Z$, then $X\subset Z$ +\item There is a bottom element: for all classes $X$, $\texttt{null}\subset X$ +\item There is a top element: for all classes $X$, $X\subset\texttt{object}$ +\end{itemize} + +This ordering determines the method ordering of a generic word (\ref{method-order}). + \wordtable{ \vocabulary{kernel} \ordinaryword{class-and}{class-and ( class class -- class )} \ordinaryword{class-or}{class-or ( class class -- class )} } -Intersection and union of classes. Note that the returned class might not be the exact desired class; for example, \texttt{object} is output if no suitable class definition could be found at all. -\wordtable{ -\vocabulary{kernel} -\ordinaryword{class<}{class< ( class class -- class )} -} -Classes are partially ordered. This ordering determines the method ordering of a generic word (\ref{method-order}). +Intersection and union of classes. Note that the returned class might not be the exact desired class; for example, \texttt{object} is output if no suitable class definition could be found at all. However, the following axioms are satisfied: +\begin{itemize} +\item If $X\subset Y$, then $X\cup Y=Y$ +\item If $X\subset Y$, then $X\cap Y=X$ +\end{itemize} \section{Tuples}\label{tuples} \tupleglos @@ -1796,7 +1857,7 @@ The word \texttt{} takes the slot values from the stack and produces a new \texttt{point}: \begin{alltt} 1 2 3 . -\textbf{<< point 1 2 3 >>} +\textbf{<< point f 1 2 3 >>} \end{alltt} \subsection{Constructors} @@ -1831,11 +1892,10 @@ method call receives the delegate on the stack, not the original object. \ordinaryword{delegate}{delegate ( object -- object )} } -Returns an object's delegate, or \texttt{f} if no delegate is set. Note that in this case, undefined methods will be passed to \texttt{f}; rather an error is raised immediately. +Returns an object's delegate, or \texttt{f} if no delegate is set. A direct consequence of this behavior is that an object may not have a delegate of \texttt{f}. \wordtable{ \vocabulary{generic} \ordinaryword{set-delegate}{set-delegate ( object tuple -- )} - } Sets a tuple's delegate. @@ -1869,7 +1929,7 @@ Class&Mutable&Growable&Lookup&at start&at end&Primary purpose\\ \texttt{string}&&&$O(1)$&&&Immutable text strings \end{tabular} -A handful of ``virtual'' sequences are provided by the library. These sequences are not backed by actual storage, but instead either compute their values, or take them from an underlying sequence. Virtual sequences are documented in \ref{virtual-seq} and include: +A handful of ``virtual'' sequences are provided by the library. These sequences are not backed by actual storage, but instead either compute their values, or take them from an underlying sequence. Virtual sequences include: \begin{verbatim} repeated range @@ -1878,6 +1938,11 @@ slice \end{verbatim} User-defined classes can also implement the sequence protocol and gain the ability to reuse many of the words in this section. +Finally, integers implement the sequence protocol, allowing counted loops to fall out as a trivial case of sequence iteration (\ref{counted-loops}). + +\glossary{name=virtual sequence, +description={a sequence that is not backed by actual storage, but instead either computes its values, or take them from an underlying sequence}} + \section{Sequence protocol} The following set of generic words constitutes the sequence protocol. The mutating words are not supported by all sequences; in particular, lists and strings are immutable. @@ -1911,6 +1976,18 @@ Outputs the $n$th element of the sequence. Elements are numbered starting from 0 } Sets the $n$th element of the sequence. Storing beyond the end of a resizable sequence such as a vector or string buffer grows the sequence. Storing to a negative index is always an error. +\wordtable{ +\vocabulary{sequences} +\genericword{like}{like ( seq template -- seq )} +} +Outputs a sequence with the same elements as the input sequence, but ``like'' the template sequence, meaning it either has the same class as the template sequence, or if the template sequence is a virtual sequence, the same class as the template sequence's underlying sequence. The default implementation does nothing. + +\wordtable{ +\vocabulary{sequences} +\genericword{thaw}{thaw ( seq -- seq )} +} +Outputs a sequence with the same elements as the input sequence, but mutable. The default implementation converts the sequence into a vector. + \section{Sequence operations} \subsection{Comparison} @@ -1979,8 +2056,8 @@ So indeed, it is an expression of an idiom rather than an algorithm. Various wor } Like \verb|reduce|, but instead outputs a sequence of intermediate values. The first element of the resulting sequence is always \verb|ident|. For example, \begin{alltt} - { 2 2 2 2 2 } 0 [ + ] accumulate . -{ 0 2 4 6 8 } + \tto 2 2 2 2 2 \ttc 0 [ + ] accumulate . +\tto 0 2 4 6 8 \ttc \end{alltt} \wordtable{ \vocabulary{sequences} @@ -2000,6 +2077,23 @@ Applies the quotation to each element yielding a new element. The new elements a \texttt{quot:~element -- element}\\ } Applies the quotation to each element yielding a new element, storing the new elements back in the original sequence. This modifies \texttt{seq} and so throws an exception if it is immutable. +\wordtable{ +\vocabulary{sequences} +\ordinaryword{2each}{2each ( s1 s2 quot -- )} +\texttt{quot:~e1 e2 --}\\ +} +Applies the quotation to pairs of elements from \texttt{s1} and \texttt{s2}. Here is an example computing the dot product of two vectors: +\begin{alltt} + 0 \tto 5 3 -2 \ttc \tto 8 16 3 \ttc [ * + ] 2each . +\textbf{82} +\end{alltt} + +In fact the dot product is encapsulated in the \verb|v.| word of the \verb|math| vocabulary: +\begin{verbatim} +: v. ( v v -- n ) 0 -rot [ * + ] 2each ; +\end{verbatim} +See \ref{inner-product} for details. + \wordtable{ \vocabulary{sequences} \ordinaryword{2map}{2map ( s1 s2 quot -- seq )} @@ -2011,14 +2105,8 @@ Applies the quotation to pairs of elements from \texttt{s1} and \texttt{s2}, yie \textbf{\tto 40 48 -6 \ttc} \end{alltt} -In fact the \verb|v*| word in the \verb|matrices| vocabulary is defined to call \verb|[ * ] 2map|; see \ref{pairwise} for documentation on this and similar words. +In fact the \verb|v*| word in the \verb|math| vocabulary is defined to call \verb|[ * ] 2map|; see \ref{pairwise} for documentation on this and similar words. -\wordtable{ -\vocabulary{sequences} -\ordinaryword{2nmap}{2nmap ( s1 s2 quot -- )} -\texttt{quot:~e1 e2 -- element}\\ -} -Applies the quotation to pairs of elements from \texttt{s1} and \texttt{s2}, yielding a new element. The new element is stored back in \texttt{s1}. This modifies \texttt{s1} and so throws an exception if it is immutable. \wordtable{ \vocabulary{sequences} \genericword{find}{find ( seq quot -- i elt )} @@ -2049,154 +2137,100 @@ member? ( elt seq -- ? ) } Curried forms of the above combinators. They pass an additional object to each invocation of the quotation. -\subsection{Stack operations}\label{stack-seq} +\subsection{Counted loops}\label{counted-loops} -The following words allow any mutable, growable sequence to be used as a LIFO (last in, first out) stack. +Integers support the sequence protocol in a trivial fashion; a non-negative integer presents its non-negative predecessors as elements. For example, the integer 3, when viewed as a sequence, contains the elements 0, 1, 2. This is very useful for performing counted loops. +For example, the \verb|each| combinator, given an integer, simply calls the quotation that number of times, pushing a counter on each iteration that ranges from 0 up to that integer: +\begin{alltt} + 3 [ . ] each +0 +1 +2 +\end{alltt} +A common idiom is to iterate over a sequence, while maintaining a loop counter. This can be done using \verb|2each|: +\begin{alltt} + \tto "a" "b" "c" \ttc dup length [ + "Index: " write . "Element: " write . + ] 2each +\textbf{Index: 0 +Element: "a" +Index: 1 +Element: "b" +Index: 2 +Element: "c"} +\end{alltt} +Combinators that produce new sequences, such as \verb|map|, will output a vector if the input is an integer. + +If you wish to perform an iteration over a range of integers that does not begin from zero, or an iteration that starts at a specific index and decreases towards zero, use a \verb|| sequence. + +\glossary{name=range sequence, +description={an instance of the \texttt{range} class, which is a virtual sequence of integers}} \wordtable{ \vocabulary{sequences} -\genericword{empty?}{empty?~( seq -- ?~)} +\ordinaryword{}{ ( a b -- seq )} } -Tests if the sequence contains any elements. The default implementation of this word tests if the length is zero; user-defined sequences can provide a custom implementation that is more efficient. +Creates an immutable sequence consisting of all integers in the interval $[a,b)$ (if $ab$). If $a=b$, the resulting sequence is empty. This is just a tuple implementing the sequence protocol. +\begin{alltt} + CHAR: a CHAR: z 1 + . +<< range [ ] 97 123 1 >> + CHAR: a CHAR: z 1 + >string . +"abcdefghijklmnopqrstuvwxyz" + CHAR: z CHAR: a 1 - >string . +"zyxwvutsrqponmlkjihgfedcba" +\end{alltt} -\wordtable{ -\vocabulary{sequences} -\ordinaryword{peek}{peek ( sequence -- element )} -} -Outputs the last element of the sequence. Throws an exception if the sequence is empty. This word has a trivial implementation: -\begin{verbatim} -: peek ( sequence -- element ) dup length 1 - swap nth ; -\end{verbatim} - -\wordtable{ -\vocabulary{sequences} -\ordinaryword{push}{push ( element sequence -- )} -\ordinaryword{pop}{pop ( sequence -- element )} -} - -Adds and removes an element at the end of the sequence. The sequence's length is adjusted accordingly. These are implemented as follows: -\begin{verbatim} -: push ( element sequence -- ) - dup length swap set-nth ; -: pop ( sequence -- element ) - dup peek >r dup length 1 - swap set-length r> ; -\end{verbatim} - -\subsection{Aggregation}\label{aggregation} - -A set of words for combining sequences into new sequences. +\subsection{Aggregation and grouping}\label{aggregation} \wordtable{ \vocabulary{sequences} \ordinaryword{append}{append ( s1 s2 -- seq )} } -Output a new sequence consisting of the elements of \texttt{s1} followed by the elements of \texttt{s2}. The new sequence is of the same class as \texttt{s1}. +Outputs a new sequence consisting of the elements of \texttt{s1} followed by the elements of \texttt{s2}. The new sequence is of the same class as \texttt{s1}. +\wordtable{ +\vocabulary{sequences} +\ordinaryword{add}{add ( seq elt -- seq )} +} +Outputs a new sequence consisting of the elements of \texttt{seq} followed by \verb|elt|. +The new sequence is of the same type as \texttt{seq}. \wordtable{ \vocabulary{sequences} \ordinaryword{append3}{append3 ( s1 s2 s3 -- seq )} } -Append the three sequences \texttt{s1}, \texttt{s2} and \texttt{s3} into a new sequence of the same class as \texttt{s1}. +Appends the three sequences \texttt{s1}, \texttt{s2} and \texttt{s3} into a new sequence of the same class as \texttt{s1}. + +\wordtable{ +\vocabulary{sequences} +\ordinaryword{nappend}{nappend ( s1 s2 -- )} +} +Appends \texttt{s2} to \texttt{s1}. Nothing is output, and \texttt{s1} is modified. + +\wordtable{ +\vocabulary{sequences} +\ordinaryword{copy-into}{copy-into ( start to from -- )} +} +Copies all elements of \verb|from| into \verb|to|, with destination indices starting from \verb|start|. The \verb|to| sequence must be large enough, or an exception is thrown. + \wordtable{ \vocabulary{sequences} \ordinaryword{concat}{concat ( sequence -- sequence )} } The input is a sequence of sequences. If the input is empty, the output is the empty list (\texttt{f}). Otherwise, the elements of the input sequence are concatenated together, and a new sequence of the same type as the first element is output. \begin{alltt} - [ "a" [ CHAR: b ] \tto CHAR: c \ttc ] concat . + \tto "a" [ CHAR: b ] \tto CHAR: c \ttc \ttc concat . \textbf{"abc"} \end{alltt} \wordtable{ \vocabulary{sequences} -\ordinaryword{nappend}{nappend ( s1 s2 -- )} +\ordinaryword{join}{join ( sequence glue -- sequence )} } -Append \texttt{s2} to \texttt{s1}. Nothing is output, and \texttt{s1} is modified. -\wordtable{ -\vocabulary{sequences} -\genericword{reverse}{reverse ( seq -- seq )} -} -Outputs a new sequence of the same class, with the reverse element order. A related word is \verb|reverse-slice|; see \ref{virtual-seq}. - -\subsection{Indexing} - -A set of words dealing with sequence element indices. - -\wordtable{ -\vocabulary{sequences} -\ordinaryword{change-nth}{change-nth ( seq n quot -- )} -\texttt{quot:~element -- element}\\ -} -Applies the quotation to the $n$th element of the sequence, and store the output back in the $n$th slot of the sequence. This modifies \texttt{seq} and so throws an exception if it is immutable. -\wordtable{ -\vocabulary{sequences} -\ordinaryword{index}{index ( obj seq -- n )} -\ordinaryword{index*}{index* ( obj i seq -- n )} -} -Outputs the index of the first element in the sequence equal to \texttt{obj}. If no element is found, outputs $-1$. The \verb|index*| form allows a start index to be specified. A related word is \verb|member?|. -\wordtable{ -\vocabulary{sequences} -\ordinaryword{start}{start ( subseq seq -- n )} -\ordinaryword{start*}{start* ( subseq i seq -- n )} -} -Outputs the start index of a subsequence, or $-1$ if the subsequence does not occur in the sequence. The \verb|start*| form allows a start index to be specified. A related word is \verb|subseq?|. -\wordtable{ -\vocabulary{sequences} -\ordinaryword{cut}{cut ( seq n -- s1 s2 )} -} -Outputs a pair of sequences that equal the original sequence when appended. The first sequence has length $n$, the second has length $l-n$ where $l$ is the length of the input. +Like \verb|concat|, but \verb|glue| is placed between each pair of sequences, and the resulting sequence has the same type as \verb|glue|. \begin{alltt} - "Hello world" 5 cut .s -\textbf{" world" -"Hello"} + \tto "alpha" "beta" "gamma" \ttc ", " join . +\textbf{"alpha, beta, gamma"} \end{alltt} \wordtable{ \vocabulary{sequences} -\ordinaryword{cut*}{cut* ( seq n -- s1 s2 )} -} -Outputs a pair of sequences that equal the original sequence excluding the $n$th element, when appended. The first sequence has length $n$, the second has length $l-n$ where $l$ is the length of the input. -\begin{alltt} - "Hello world" 5 cut* .s -\textbf{"world" -"Hello"} -\end{alltt} - -\subsection{Subsequences}\label{subseq} - -A set of words for extracting subsequences of contiguous elements, and performing operations on them. - -\wordtable{ -\vocabulary{sequences} -\ordinaryword{subseq?}{subseq?~( s1 s2 -- ?~)} -} -Tests if \texttt{s2} contains \texttt{s1} as a subsequence. A related word is \verb|start|. -\wordtable{ -\vocabulary{sequences} -\ordinaryword{head?}{head?~( s1 s2 -- ?~)} -\ordinaryword{tail?}{tail?~( s1 s2 -- ?~)} -} -Tests if \texttt{s1} starts or ends with \texttt{s1}. If \texttt{s1} is longer than \texttt{s2}, outputs \texttt{f}. -\wordtable{ -\vocabulary{sequences} -\ordinaryword{head}{head~( n seq -- seq )} -} -Outputs a new sequence consisting of the first $n$ elements of the input sequence. -\wordtable{ -\vocabulary{sequences} -\ordinaryword{tail}{tail~( n seq -- seq )} -} -Outputs a new sequence consisting of all elements of the sequence, starting at the $n$th index. -\wordtable{ -\vocabulary{sequences} -\ordinaryword{tail*}{tail*~( n seq -- seq )} -} -Outputs a new sequence consisting of the last $n$ elements of the input sequence. -\wordtable{ -\vocabulary{sequences} -\ordinaryword{?head}{?head~( s1 s2 -- seq ?~)} -\ordinaryword{?tail}{?tail~( s1 s2 -- seq ?~)} -} -Tests if \texttt{s1} starts or ends with \texttt{s1} as a subsequence. If there is a match, outputs the subrange of \texttt{s1} excluding \texttt{s1} followed by \texttt{t}. If there is no match, outputs \texttt{s1} followed by \texttt{f}. -\wordtable{ -\vocabulary{sequences} \ordinaryword{split1}{split1~( seq split -- before after )} } If \texttt{seq} does not contain \texttt{split} as a subsequence, then \texttt{before} is equal to the \texttt{seq}, and \texttt{after} is \texttt{f}. Otherwise, \texttt{before} and \texttt{after} are both sequences, and yield the input excluding \texttt{split} when appended. @@ -2215,7 +2249,110 @@ Outputs a list of subsequences taken between occurrences of \texttt{split} in \t } Splits the sequence into groups of $n$ elements and collects each group in a list. If the sequence length is not a multiple of $n$, the final subsequence in the list will be shorter than $n$. -\subsection{Set-theoretic operations} +\subsection{Searching}\label{seq-searching} + +A set of words dealing with sequence element indices. + +\wordtable{ +\vocabulary{sequences} +\ordinaryword{index}{index ( obj seq -- n )} +\ordinaryword{index*}{index* ( obj i seq -- n )} +} +Outputs the index of the first element in the sequence equal to \texttt{obj}. If no element is found, outputs $-1$. The \verb|index*| form allows a start index to be specified. A related word is \verb|member?| (\ref{set-theoretic}). +\wordtable{ +\vocabulary{sequences} +\ordinaryword{start}{start ( subseq seq -- n )} +\ordinaryword{start*}{start* ( subseq i seq -- n )} +} +Outputs the start index of a subsequence, or $-1$ if the subsequence does not occur in the sequence. The \verb|start*| form allows a start index to be specified. A related word is \verb|subseq?|. +\wordtable{ +\vocabulary{sequences} +\ordinaryword{subseq?}{subseq?~( s1 s2 -- ?~)} +} +Tests if \texttt{s2} contains \texttt{s1} as a subsequence. + +\subsection{Slicing and reshaping}\label{reshaping} +\glossary{name=slice, +description={an instance of the \texttt{slice} class, which is a virtual sequence sharing structure with a subrange of some underlying sequence}} + +The first set of words are concerned with taking subsequences of a sequence. Each of the below words comes in dual pairs; the first of the pair outputs a new copied sequence, the second outputs a virtual sequence sharing structure with the underlying sequence. + +\wordtable{ +\vocabulary{sequences} +\ordinaryword{head}{head~( n seq -- seq )} +\ordinaryword{head-slice}{head-slice ( n seq -- slice )} +} +Outputs a new sequence consisting of the first $n$ elements of the input sequence. +\wordtable{ +\vocabulary{sequences} +\ordinaryword{tail}{tail~( n seq -- seq )} +\ordinaryword{tail-slice}{tail-slice ( n seq -- slice )} +} +Outputs a new sequence consisting of all elements of the sequence, starting at the $n$th index. +\wordtable{ +\vocabulary{sequences} +\ordinaryword{head*}{head~( n seq -- seq )} +\ordinaryword{head-slice*}{head-slice*~( n seq -- slice )} +} +Outputs a new sequence consisting of all elements of the sequence, until the $n$th element from the end. In other words, it outputs a sequence of the first $l-n$ elements of the input sequence, where $l$ is its length. +\wordtable{ +\vocabulary{sequences} +\ordinaryword{tail*}{tail*~( n seq -- seq )} +\ordinaryword{tail-slice*}{tail-slice*~( n seq -- slice )} +} +Outputs a new sequence consisting of the last $n$ elements of the input sequence. +\wordtable{ +\vocabulary{sequences} +\ordinaryword{subseq}{subseq~( from to seq -- seq )} +\ordinaryword{}{ ( from to seq -- slice )} +} +Outputs a new sequence consisting of all elements in the interval $[from,to)$. +\wordtable{ +\vocabulary{sequences} +\genericword{reverse}{reverse ( seq -- seq )} +\genericword{reverse}{reverse-slice ( seq -- seq )} +} +Outputs a new sequence with the reverse element order. +\wordtable{ +\vocabulary{sequences} +\ordinaryword{head?}{head?~( s1 s2 -- ?~)} +\ordinaryword{tail?}{tail?~( s1 s2 -- ?~)} +} +Tests if \texttt{s1} starts or ends with \texttt{s1}. If \texttt{s1} is longer than \texttt{s2}, outputs \texttt{f}. + +\wordtable{ +\vocabulary{sequences} +\ordinaryword{cut}{cut ( seq n -- s1 s2 )} +} +Outputs a pair of sequences that equal the original sequence when appended. The first sequence has length $n$, the second has length $l-n$ where $l$ is the length of the input. +\begin{alltt} + "Hello world" 5 cut .s +\textbf{" world" +"Hello"} +\end{alltt} +This word has a simple definition: +\begin{verbatim} +: cut ( n seq -- seq seq ) + [ head ] 2keep tail ; +\end{verbatim} +\wordtable{ +\vocabulary{sequences} +\ordinaryword{?head}{?head~( s1 s2 -- seq ?~)} +\ordinaryword{?tail}{?tail~( s1 s2 -- seq ?~)} +} +Tests if \texttt{s1} starts or ends with \texttt{s1} as a subsequence. If there is a match, outputs the subrange of \texttt{s1} excluding \texttt{s1} followed by \texttt{t}. If there is no match, outputs \texttt{s1} followed by \texttt{f}. + +\wordtable{ +\vocabulary{sequences} +\ordinaryword{flip}{flip ( seq -- seq )} +} +Outputs the two-dimensional transpose of the sequence of sequences, all of which must have equal length. An example: +\begin{alltt} + \tto \tto 1 2 3 \ttc \tto 4 5 6 \ttc \ttc flip +\textbf{\tto \tto 1 2 \ttc \tto 3 4 \ttc \tto 5 6 \ttc \ttc} +\end{alltt} + +\subsection{Set-theoretic operations}\label{set-theoretic} A set of words for testing membership, and aggregating sequences without regard for element order. @@ -2223,7 +2360,7 @@ A set of words for testing membership, and aggregating sequences without regard \vocabulary{sequences} \ordinaryword{member?}{member?~( elt seq -- ?~)} } -Tests if \texttt{seq} contains an element equal to \texttt{elt}. A related word is \verb|index|. +Tests if \texttt{seq} contains an element equal to \texttt{elt}. A related word is \verb|index| (\ref{seq-searching}).. \wordtable{ \vocabulary{sequences} \ordinaryword{memq?}{memq?~( elt seq -- ?~)} @@ -2253,7 +2390,7 @@ Outputs a new sequence with each element of \verb|seq| appearing only once. \vocabulary{sequences} \ordinaryword{seq-union}{seq-union ( seq seq -- seq )} } -Outputs a sequence of elements present in one or both sequences, filtering duplicates by comparing elements for equality. +Outputs a sequence of elements present in at least one of the sequences, filtering duplicates by comparing elements for equality. \wordtable{ \vocabulary{sequences} \ordinaryword{seq-intersect}{seq-intersect ( seq seq -- seq )} @@ -2266,11 +2403,6 @@ Outputs a sequence of elements present in both sequences, comparing elements for Outputs a sequence of elements present in \texttt{sl2} but not \texttt{s1}, comparing elements for equality. \wordtable{ \vocabulary{sequences} -\ordinaryword{seq-diffq}{seq-diffq ( s1 s2 -- seq )} -} -Outputs a sequence of elements present in \texttt{sl2} but not \texttt{s1}, comparing elements for identity. -\wordtable{ -\vocabulary{sequences} \ordinaryword{subset}{subset ( seq quot -- seq )} \texttt{quot:~element -- ?}\\ } @@ -2280,7 +2412,7 @@ Applies the quotation to each element, and outputs a new sequence containing the \ordinaryword{contains?}{contains?~( seq quot -- ?~)} \texttt{quot:~element -- ?}\\ } -Applies the quotation to each element of the sequence. If an element is found for which the quotation outputs a true value, a true value is output. Otherwise if the end of the sequence is reached, \verb|f| is output. +Applies the quotation to each element of the sequence. If an element is found for which the quotation outputs a true value, a true value is output. Otherwise if the end of the sequence is reached, \verb|f| is output. Given an empty sequence, vacuously outputs \texttt{f}. \wordtable{ \vocabulary{sequences} \ordinaryword{all?}{all?~( seq quot -- ?~)} @@ -2289,13 +2421,25 @@ Applies the quotation to each element of the sequence. If an element is found fo Outputs \texttt{t} if the quotation yields true when applied to each element, otherwise outputs \texttt{f}. Given an empty sequence, vacuously outputs \texttt{t}. \wordtable{ \vocabulary{sequences} -\ordinaryword{fiber?}{fiber?~( seq quot -- ?~)} +\ordinaryword{every?}{every?~( seq quot -- ?~)} \texttt{quot:~element element -- ?}\\ } -Tests if all elements of the sequence are equivalent under the relation. The quotation should be an equality relation, otherwise the result will not be useful. This is implemented by vacuously outputting \verb|t| if the sequence is empty, or otherwise, by applying the quotation to each element together with the first element in turn, and testing if it always yields a true value. Usually, this word is used to test if all elements of a sequence are equal, or the same element: +Tests if all elements of the sequence are equivalent under the relation. The quotation should be an equality relation (see \ref{equality}), otherwise the result will not be useful. This is implemented by vacuously outputting \verb|t| if the sequence is empty, or otherwise, by applying the quotation to each element together with the first element in turn, and testing if it always yields a true value. Usually, this word is used to test if all elements of a sequence are equal, or the same element: \begin{verbatim} -[ = ] fiber? -[ eq? ] fiber? +[ = ] every? +[ eq? ] every? +\end{verbatim} + +A pair of utility words test of every element in a sequence is true, or if the sequence contains at least one true element. +\wordtable{ +\vocabulary{sequences} +\ordinaryword{conjunction}{conjunction~( seq -- ?~)} +\ordinaryword{disjunction}{disjunction~( seq -- ?~)} +} +The implementations are trivial: +\begin{verbatim} +: conjunction ( v -- ? ) [ ] all? ; +: disjunction ( v -- ? ) [ ] contains? ; \end{verbatim} \wordtable{ @@ -2308,6 +2452,85 @@ Tests if all elements of the sequence are equivalent under the relation. The quo } Curried forms of the above combinators. They pass an additional object to each invocation of the quotation. +\section{Oddball operations}\label{oddball-seq} + +These operations do not fit into any clearly-defined functional category, but are nonetheless useful. +\wordtable{ +\vocabulary{sequences} +\genericword{empty?}{empty?~( seq -- ?~)} +} +Tests if the sequence contains any elements. The default implementation of this word tests if the length is zero; user-defined sequences can provide a custom implementation that is more efficient. + +A few convenience words are defined for accessing the first few elements. +\wordtable{ +\vocabulary{sequences} +\ordinaryword{first}{first ( seq -- elt )} +\ordinaryword{second}{second ( seq -- elt )} +\ordinaryword{third}{third ( seq -- elt )} +\ordinaryword{fourth}{fourth ( seq -- elt )} +} +Note the naming convention here; the \verb|first| word actually gets the 0th element: +\begin{verbatim} +: first 0 swap nth ; inline +\end{verbatim} +\wordtable{ +\vocabulary{sequences} +\ordinaryword{2unseq}{2unseq ( seq -- first second )} +\ordinaryword{3unseq}{3unseq ( seq -- first second third )} +} +Outputs the first two, or the first three elements of the sequence, respectively. + +\wordtable{ +\vocabulary{sequences} +\ordinaryword{peek}{peek ( sequence -- element )} +} +Outputs the last element of the sequence. Throws an exception if the sequence is empty. This word has a trivial implementation: +\begin{verbatim} +: peek ( sequence -- element ) dup length 1 - swap nth ; +\end{verbatim} + +\wordtable{ +\vocabulary{sequences} +\ordinaryword{push}{push ( element sequence -- )} +\ordinaryword{pop}{pop ( sequence -- element )} +} + +Adds and removes an element at the end of the sequence. The sequence's length is adjusted accordingly. These are implemented as follows: +\begin{verbatim} +: push ( element sequence -- ) + dup length swap set-nth ; +: pop ( sequence -- element ) + dup peek >r dup length 1 - swap set-length r> ; +\end{verbatim} + +\wordtable{ +\vocabulary{sequences} +\ordinaryword{push-new}{push-new ( element sequence -- )} +} + +Adds the element to the sequence if the sequence does not already contain an equal element. + +\wordtable{ +\vocabulary{sequences} +\ordinaryword{change-nth}{change-nth ( seq n quot -- )} +\texttt{quot:~element -- element}\\ +} +Applies the quotation to the $n$th element of the sequence, and store the output back in the $n$th slot of the sequence. This modifies \texttt{seq} and so throws an exception if it is immutable. +\wordtable{ +\vocabulary{sequences} +\ordinaryword{}{ ( n object -- seq )} +} +Creates an immutable sequence consisting of \verb|object| repeated $n$ times. No storage allocation of $n$ elements is made; rather a repeated sequence is just a tuple where the \verb|nth| word is implemented to return the same value on each invocation. +\begin{alltt} + 5 "hey" . +<< repeated [ ] 5 "hey" >> + 5 "hey" >list . +[ "hey" "hey" "hey" "hey" "hey" ] +\end{alltt} + +\glossary{name=repeated sequence, +description={an instance of the \texttt{repeated} class, which is a virtual, immutable sequence consisting of a fixed element repeated a certain number of times}} + \section{Vectors}\label{vectors} \wordtable{ @@ -2356,6 +2579,7 @@ Creates a new vector of the requested length, where all elements are initially \ } A \emph{cons cell} is an ordered pair of values. The first value is called the \emph{car}, the second is called the \emph{cdr}. The literal syntax of cons cells is documented in \ref{listsyntax}. +Cons cells, and by extension lists, are immutable. \wordtable{ \vocabulary{lists} @@ -2399,7 +2623,19 @@ Here is an example: \textbf{"gravy" "potatoes"} \end{alltt} -Cons cells, and by extension lists, are immutable. + +\wordtable{ +\vocabulary{lists} +\ordinaryword{2cons}{2cons ( car1 car2 cdr1 cdr2 -- c1 c2 )} +} +Cons a pair of elements onto a pair of lists. +\wordtable{ +\vocabulary{lists} +\ordinaryword{2car}{2car ( c1 c2 -- car1 car2 )} +\ordinaryword{2cdr}{2cdr ( c1 c2 -- cdr1 cdr2 )} +\ordinaryword{2uncons}{2uncons ( c1 c2 -- car1 car2 cdr1 cdr2 )} +} +Deconstructs paired lists. Compare the stack effects with those of \verb|car|, \verb|cdr| and \verb|uncons| \subsection{Lists}\label{lists} @@ -2470,24 +2706,9 @@ Makes a list of two elements. Pushes the first two elements of a list. \wordtable{ \vocabulary{lists} -\ordinaryword{3list}{3list ( o1 o2 o3 -- [ o1 o2 o3 ] )} -} -Makes a list of three elements. -\wordtable{ -\vocabulary{lists} -\ordinaryword{3unlist}{3unlist ( [ o1 o2 o3 ] -- o1 o2 o3 )} -} -Pushes the first three elements of a list. -\wordtable{ -\vocabulary{lists} \ordinaryword{unique}{unique ( obj list -- list )} } If the list already contains an element equal to the object, do nothing, otherwise cons the object into the list. -\wordtable{ -\vocabulary{lists} -\ordinaryword{count}{count~( n -- list )} -} -Return a new list containing all integers from 0 up to $n-1$, inclusive. \wordtable{ \vocabulary{lists} @@ -2497,7 +2718,7 @@ Return a new list containing all integers from 0 up to $n-1$, inclusive. Sorts the list by comparing each pair of elements with the quotation. The quotation should output \texttt{t} if \texttt{e2} is to come before \texttt{e1} in the list. For example, to sort a list of numbers in ascending order, you can do the following: \begin{alltt} [ 8 6 9 1 10 3 ] [ > ] sort . -[ 1 3 6 8 9 10 ] +\textbf{[ 1 3 6 8 9 10 ]} \end{alltt} \subsection{Queues} @@ -2597,91 +2818,10 @@ Tests if the object at the top of the stack is a string buffer. \vocabulary{strings} \ordinaryword{>sbuf}{>sbuf~( sequence -- sbuf )} } -Turns any type of sequence into a string buffer. Given a string buffer, this makes a fresh copy. +Turns a sequence of integers into a string buffer. Given a string buffer, this makes a fresh copy. String buffers support the stream input and output protocol (\ref{string-streams}). -\section{Virtual sequences}\label{virtual-seq} - -\glossary{name=virtual sequence, -description={a sequence that is not backed by actual storage, but instead either computes its values, or take them from an underlying sequence}} -\glossary{name=repeated sequence, -description={an instance of the \texttt{repeated} class, which is a virtual, immutable sequence consisting of a fixed element repeated a certain number of times}} - -Virtual sequences are not backed by actual storage, but instead either compute their values, or take them from an underlying sequence. - -\glossary{name=range sequence, -description={an instance of the \texttt{range} class, which is a virtual sequence of integers}} -\wordtable{ -\vocabulary{sequences} -\ordinaryword{}{ ( a b -- seq )} -} -Creates an immutable sequence consisting of all integers in the interval $[a,b)$ (if $ab$). If $a=b$, the resulting sequence is empty. As with repeated sequences, this is just a tuple implementing the sequence protocol. -\begin{alltt} - CHAR: a CHAR: z 1 + . -<< range [ ] 97 123 1 >> - CHAR: a CHAR: z 1 + >string . -"abcdefghijklmnopqrstuvwxyz" - CHAR: z CHAR: a 1 - >string . -"zyxwvutsrqponmlkjihgfedcba" -\end{alltt} -\glossary{name=slice, -description={an instance of the \texttt{slice} class, which is a virtual sequence sharing structure with a subrange of some underlying sequence}} - -\wordtable{ -\vocabulary{sequences} -\ordinaryword{}{ ( n object -- seq )} -} -Creates an immutable sequence consisting of \verb|object| repeated $n$ times. No storage allocation of $n$ elements is made; rather a repeated sequence is just a tuple where the \verb|nth| word is implemented to return the same value on each invocation. -\begin{alltt} - 5 "hey" . -<< repeated [ ] 5 "hey" >> - 5 "hey" >list . -[ "hey" "hey" "hey" "hey" "hey" ] -\end{alltt} - -\wordtable{ -\vocabulary{sequences} -\genericword{reverse-slice}{reverse-slice ( seq -- seq )} -} -Outputs a sequence with the same length as the input sequence, that presents the elements of the input sequence in reverse order. The new sequence shares storage with the given sequence. -A related word is \verb|reverse|, see \ref{aggregation}. - -\wordtable{ -\vocabulary{sequences} -\ordinaryword{}{ ( a b seq -- slice )} -} -Creates a mutable sequence that is a view of a subrange of elements of an underlying sequence. Changes to the underlying sequence are reflected in the slice, and vice versa. -\wordtable{ -\vocabulary{sequences} -\ordinaryword{head-slice}{head-slice ( n seq -- slice )} -} -Creates a slice viewing the first $n$ elements of the input sequence. -\wordtable{ -\vocabulary{sequences} -\ordinaryword{tail-slice}{tail-slice ( n seq -- slice )} -} -Creates a slice viewing all elements of the sequence, starting at the $n$th index. - -\wordtable{ -\vocabulary{sequences} -\ordinaryword{tail-slice*}{tail-slice* ( n seq -- slice )} -} -Creates a slice viewing the last $n$ elements of the input sequence. - -There is a correspondence between the four slicing words above, and the subsequence words from \ref{subseq}: - -\begin{tabular}[t]{l|l} -Subsequence&Slice\\ -\hline -\verb|subseq|&\verb||\\ -\verb|head|&\verb|head-slice|\\ -\verb|tail|&\verb|tail-slice|\\ -\verb|tail*|&\verb|tail-slice*| -\end{tabular} - -The slice words output a new virtual sequence that shares structure with the original sequence, whereas the subsequence words output a fresh copied sequence. - \section{Constructing sequences}\label{make-seq} The library supports an idiom where sequences can be constructed without passing the partial sequence being built on the stack. This reduces stack noise, and thus simplifies code and makes it easier to understand. @@ -2710,11 +2850,6 @@ Adds the element to the end of the sequence being constructed by the innermost c Adds the element to the end of the sequence being constructed as long as the sequence does not already have an equal element. \wordtable{ \vocabulary{namespaces} -\ordinaryword{literal,}{literal,~( element -- )} -} -Adds the element wrapped inside a one-element list, then adds the \texttt{car} word. This is used to construct quotations with \texttt{make-list} that must push a word on the stack. -\wordtable{ -\vocabulary{namespaces} \ordinaryword{\%}{\% ( sequence -- )} } Appends the subsequence to the end of the sequence being constructed. @@ -2722,7 +2857,7 @@ Appends the subsequence to the end of the sequence being constructed. Here is an example of sequence construction: \begin{alltt} : silly [ [ dup , ] repeat ] make-vector , ; - [ 4 [ dup silly ] repeat ] make-list . + [ 4 [ silly ] each ] make-list . \textbf{[ \tto \ttc \tto 0 \ttc \tto 0 1 \ttc \tto 0 1 2 \ttc ]} \end{alltt} @@ -2765,12 +2900,6 @@ Tests if the object at the top of the stack is a proper list whose every element These words look up a key in an association list, comparing keys in the list with the given key by equality with \texttt{=}. The list is searched starting from the beginning. The two words differ in that the latter returns the key/value pair located, whereas the former only returns the value. The \texttt{assoc*} word allows a distinction to be made between a missing value. \wordtable{ \vocabulary{lists} -\ordinaryword{assq}{assq ( k alist -- v )} -\ordinaryword{assq*}{assq* ( k alist -- [[ k v ]] )} -} -These words compare keys by identity with \texttt{eq?}~and are dual to \texttt{assoc} and \texttt{assoc*}. -\wordtable{ -\vocabulary{lists} \ordinaryword{acons}{acons ( v k alist -- alist )} \ordinaryword{set-assoc}{set-assoc ( v k alist -- alist )} } @@ -2803,36 +2932,6 @@ Outputs a new association list which does not have any key/value pairs with the \end{center} \end{figure} -\subsection{Dual representation} - -Sometimes it is convenient to decompose an association list into two lists of equal length, containing the keys and values, respectively, in the same order as the association list. This dual representation can be manipulated with a handful of helper words. - -\wordtable{ -\vocabulary{lists} -\ordinaryword{zip}{zip ( keys values -- alist )} -\ordinaryword{unzip}{unzip ( alist -- keys values )} -} -These words convert between pairs of lists and lists of pairs. -\begin{alltt} - [ 1 2 3 ] [ 4 5 6 ] zip . -[ [[ 1 4 ]] [[ 2 5 ]] [[ 3 6 ]] ] - [ [[ 1 2 ]] [[ 3 4 ]] [[ 5 6 ]] ] unzip .s -[ 2 4 6 ] -[ 1 3 5 ] -\end{alltt} -\wordtable{ -\vocabulary{lists} -\ordinaryword{2cons}{2cons ( car1 car2 cdr1 cdr2 -- c1 c2 )} -} -Cons a pair of elements onto a pair of lists. -\wordtable{ -\vocabulary{lists} -\ordinaryword{2car}{2car ( c1 c2 -- car1 car2 )} -\ordinaryword{2cdr}{2cdr ( c1 c2 -- cdr1 cdr2 )} -\ordinaryword{2uncons}{2uncons ( c1 c2 -- car1 car2 cdr1 cdr2 )} -} -Deconstructs paired lists. Compare the stack effects with those of \verb|car|, \verb|cdr| and \verb|uncons| in \ref{cons-cells}. - \section{Hashtables}\label{hashtables} \hashglos @@ -2854,7 +2953,7 @@ Outputs the hashcode of the object. The contract of this generic word is as foll \item The hashcode must be a fixnum (\ref{integers})\footnote{Strictly speaking, returning a bignum will not fail, however it will result in lower overall performance since the compiler will no longer make type assumptions when compiling callers of \texttt{hashcode}.} \item If two objects are equal under \texttt{=}, they must have the same hashcode. \end{itemize} -If mutable objects are used as hashtable keys, they must not be mutated. Doing so will violate bucket sorting invariants and result in undefined behavior. +If mutable objects are used as hashtable keys, they must not be mutated in such a way that their hashcode changes. Doing so will violate bucket sorting invariants and result in undefined behavior. \wordtable{ \vocabulary{hashtables} @@ -2919,6 +3018,29 @@ Applies the quotation to each key/value pair, collecting the key/value pairs for } If the key is present in the hashtable, return the associated value, otherwise apply the quotation to the key, yielding a new value that is then stored in the hashtable. +There is a pair of words for working with lazily-instantiated hashtables. + +\wordtable{ +\vocabulary{hashtables} +\ordinaryword{?hash}{?hash ( key hash/f -- value )} +} +Outputs the value of the key, or \texttt{f} if the hashtable is \texttt{f}. The standard \verb|hash| word would raise an exception in the latter case. + +\wordtable{ +\vocabulary{hashtables} +\ordinaryword{?set-hash}{?set-hash ( value key hash/f -- hash )} +} +If the given hashtable is not \verb|f|, store the key/value pair and output the same hashtable instance. Otherwise if the given hashtable if \verb|f|, create a new hashtable holding the key/value pair. + +The following pair of words from the UI framework (see \ref{ui}) demonstrate the lazily-insantiated hashtable idiom: +\begin{verbatim} +: paint-prop* ( gadget key -- value ) + swap gadget-paint ?hash ; + +: set-paint-prop ( gadget value key -- ) + pick gadget-paint ?set-hash swap set-gadget-paint ; +\end{verbatim} + \subsection{Converting between mappings} \wordtable{ @@ -2939,9 +3061,9 @@ Creates an association list with the same key/valie pairs as the hashtable. Builds lists of keys and values stored in the hashtable. \wordtable{ \vocabulary{hashtables} -\ordinaryword{buckets>list}{buckets>list ( hash -- list )} +\ordinaryword{buckets>vector}{buckets>vector ( hash -- vector )} } -Outputs a list of association lists, where each association list contains the key/value pairs in a certain bucket. Useful for debugging hashcode distribution. +Outputs a vector of association lists, where each association list contains the key/value pairs in a certain bucket. Useful for debugging hashcode distribution. \subsection{Hashtable construction} @@ -2954,9 +3076,9 @@ A facility analogous to sequence construction (\ref{make-seq}) exists for hashta Calls the quotation in a new dynamic scope. The quotation and any words it calls can execute the \texttt{hash,} word to add key/value pairs to the hashtable being constructed. \wordtable{ \vocabulary{hashtables} -\ordinaryword{hash,}{hash,~( value key -- )} +\ordinaryword{hash,}{hash,~( value key -- old )} } -Adds a key/value pair to the hashtable currently being constructed. +Adds a key/value pair to the hashtable currently being constructed. Outputs the previous value. As with sequence construction, care must be taken to mind the effects of dynamic scoping on variable assignment performed by the quotation. Details are in \ref{namespaces}. @@ -3082,10 +3204,24 @@ If the variable is set in the current namespace, outputs its value. Otherwise se Factor attempts to preserve natural mathematical semantics for numbers. Multiplying two large integers never results in overflow, and dividing two integers yields an exact fraction rather than a floating point approximation. Floating point numbers are also supported, along with complex numbers. -\section{Number protocol} +\section{Number protocol}\label{number-protocol} + +\glossary{ +name=numerical upgrading, +description={the stipulation that if one of the inputs to an arithmetic word is a \texttt{bignum} and the other is a \texttt{fixnum}, the latter is first coerced to a \texttt{bignum}, and if one of the inputs is a \texttt{float}, the other is coerced to a \texttt{float}}} The following usual operations are supported by all numbers. +These words obey the rules of numerical upgrading. If one of the inputs is a \texttt{bignum} and the other is a \texttt{fixnum}, the latter is first coerced to a \texttt{bignum}; if one of the inputs is a \texttt{float}, the other is coerced to a \texttt{float}. + +Two examples where you should note the types of the inputs and outputs: +\begin{alltt} + 3 >fixnum 6 >bignum * class . +\textbf{bignum} + 1/2 2.0 + . +\textbf{4.5} +\end{alltt} + \wordtable{ \vocabulary{math} \ordinaryword{+}{+ ( n n -- n )} @@ -3095,19 +3231,6 @@ The following usual operations are supported by all numbers. } The non-commutative operations \texttt{-} and \texttt{/} take operands from the stack in the natural order; \texttt{6 2 /} divides 6 by 2. -\wordtable{ -\vocabulary{math} -\ordinaryword{/i}{/i ( n n -- integer )} -\ordinaryword{/f}{/f ( n n -- float )} -} -The \texttt{/} word gives an exact answer where possible. These two words output the answer in other forms. The \texttt{/i} word truncates the result towards zero, and \texttt{/f} converts it to a floating point approximation. -\wordtable{ -\vocabulary{math} -\ordinaryword{\hhat}{\^{} ( x y -- z )} - -} -Raises \texttt{x} to the power of \texttt{y}. If \texttt{y} is an integer the answer is computed exactly, otherwise a floating point approximation is used. - The following ordering operations are supported on real numbers only. \wordtable{ @@ -3118,6 +3241,15 @@ The following ordering operations are supported on real numbers only. \ordinaryword{>=}{>= ( n n -- ?~)} } +The following pair of division operations are supported on integers only. + +\wordtable{ +\vocabulary{math} +\ordinaryword{/i}{/i ( n n -- integer )} +\ordinaryword{/f}{/f ( n n -- float )} +} +The \texttt{/} word gives an exact answer where possible. These two words output the answer in other forms. The \texttt{/i} word truncates the result towards zero, and \texttt{/f} converts it to a floating point approximation. + \section{Integers}\label{integers} \integerglos @@ -3164,30 +3296,6 @@ The word \texttt{.} prints numbers in decimal, regardless of how they were input } Prints an integer in hexadecimal, octal or binary. -\subsection{Counted loops} - -A pair of combinators calls a quotation a fixed number of times. - -\wordtable{ -\vocabulary{math} -\ordinaryword{times}{times ( n quot -- )} -\texttt{quot:~-- }\\ -} -Calls the quotation $n$ times. If $n<0$, the quotation is not called at all. - -\wordtable{ -\vocabulary{math} -\ordinaryword{repeat}{repeat ( n quot -- )} -\texttt{quot:~i -- i }\\ -} -Calls \texttt{quot} $n$ times, with the parameter \texttt{i} ranging from 0 to $n-1$. The quotation must output $i$ unmodified; or indeed, if it modifies it, the loop continues from that index. That is, the value $i$ on the stack is the actual loop counter, not a copy. - -If you wish to perform an iteration over a range of integers that does not begin from zero, or an iteration that starts at a specific index and decreases towards zero, use the \verb|each| combinator (\ref{iteration}) in conjunction with a \verb|| sequence (\ref{virtual-seq}), for example like so: -\begin{verbatim} -! Print all integers from 9 down to 4, inclusive -9 3 [ . ] each -\end{verbatim} - \subsection{Modular arithmetic} \wordtable{ @@ -3228,7 +3336,7 @@ $$ax+by=c$$ Furthermore, $c$ is the greatest integer having this property; that is, it is the greatest common divisor of $a$ and $b$. \wordtable{ \vocabulary{math} -\ordinaryword{mod-inv}{gcd ( x n -- y )} +\ordinaryword{mod-inv}{mod-inv ( x n -- y )} } Computes a value \texttt{y} that satisfies the following property: $$xy \equiv 1 \bmod{n}$$ An exception is thrown if no such \texttt{y} exists. @@ -3295,7 +3403,7 @@ Computes a new integer consisting of the bits of the first integer, shifted to t \vocabulary{math} \ordinaryword{log2}{log2 ( n -{}- b )} } -Computes the largest integer less than or equal to $log_2 n$. The input must be positive and the result is always an integer. In most cases, the \verb|log| word (\ref{algebraic}) should be used instead, since it allows any complex number as input, and the result is not truncated to an integer. +Computes the largest integer less than or equal to $\log_2 n$. The input must be positive and the result is always an integer. In most cases, the \verb|log| word (\ref{algebraic}) should be used instead, since it allows any complex number as input, and the result is not truncated to an integer. \wordtable{ \vocabulary{math} @@ -3432,6 +3540,12 @@ Complex numbers arise as solutions to quadratic equations whose graph does not i } Tests if the top of the stack is a complex number. Note that unlike math, where all real numbers are also complex numbers, Factor only considers a number to be a complex number if its imaginary part is non-zero. +\wordtable{ +\vocabulary{math} +\ordinaryword{conjugate}{conjugate ( n -- n )} +} +Outputs the complex conjugate of a complex number. The complex conjugate of $a+bi$ is denoted $\overline{a+bi}$ and equals $a-bi$. + \wordtable{ \vocabulary{math} \ordinaryword{real}{real ( n -- n )} @@ -3533,9 +3647,14 @@ The next set of words computes powers and logarithms. \vocabulary{math} \ordinaryword{sq}{sq ( x -- y )} \ordinaryword{sqrt}{sqrt ( x -- y )} -\ordinaryword{recip}{recip ( x -- y )} } -Computes the square (raised to power 2), square root (raised to power $1/2$), and reciprocal (raised to power $-1$). +Computes the square (raised to power 2) and square root (raised to power $1/2$). +\wordtable{ +\vocabulary{math} +\ordinaryword{\hhat}{\^{} ( x y -- z )} + +} +Raises \texttt{x} to the power of \texttt{y}. If \texttt{y} is an integer the answer is computed exactly, otherwise a floating point approximation is used. \wordtable{ \vocabulary{math} \ordinaryword{exp}{exp ( n -- n )} @@ -3559,6 +3678,31 @@ Computes the natural (base $e$) logarithm. This is the inverse of the \texttt{ex \end{alltt} The \texttt{math} vocabulary provides the full set of trigonometric and hyperbolic functions, along with inverses and reciprocals. Complex number arguments are supported. +\index{\texttt{sin}} +\index{\texttt{cos}} +\index{\texttt{tan}} +\index{\texttt{cosec}} +\index{\texttt{sec}} +\index{\texttt{cot}} +\index{\texttt{asin}} +\index{\texttt{acos}} +\index{\texttt{atan}} +\index{\texttt{acosec}} +\index{\texttt{asec}} +\index{\texttt{acot}} +\index{\texttt{sinh}} +\index{\texttt{cosh}} +\index{\texttt{tanh}} +\index{\texttt{cosech}} +\index{\texttt{sech}} +\index{\texttt{coth}} +\index{\texttt{asinh}} +\index{\texttt{acosh}} +\index{\texttt{atanh}} +\index{\texttt{acosech}} +\index{\texttt{asech}} +\index{\texttt{acoth}} + \begin{tabular}{l|l|l|l|l} Function&Trigonometric&Hyperbolic&Trig. inverse&Hyp. inverse\\ \hline @@ -3575,6 +3719,13 @@ Cotangent&\texttt{cot}&\texttt{coth}&\texttt{acot}&\texttt{acoth} The following words in the \texttt{math} vocabulary push constant values on the stack. +\index{\texttt{i}} +\index{\texttt{-i}} +\index{\texttt{inf}} +\index{\texttt{-inf}} +\index{\texttt{e}} +\index{\texttt{pi}} + \begin{tabular}{l|l} Word&Value\\ \hline @@ -3584,13 +3735,10 @@ Word&Value\\ \texttt{-inf}&Negative floating point infinity\\ \texttt{e}&Base of natural logarithm ($e\approx 2.7182818284590452354$)\\ \texttt{pi}&Ratio of circumference to diameter ($\pi\approx 3.14159265358979323846$)\\ -\texttt{pi/2}&$\frac{\pi}{2}\approx 1.5707963267948966$ \end{tabular} \section{Linear algebra} -The \verb|matrices| vocabulary provides a set of words for simple algebraic operations on mathematical vectors and matrices. - \subsection{Vectors} Any Factor sequence can be used to represent a mathematical vector, not just instances of the \verb|vector| class. Anywhere a vector is mentioned in this section, keep in mind it is a mathematical term, not a Factor data type. @@ -3600,18 +3748,18 @@ The usual mathematical operations on vectors are supported. \subsubsection{Scaling operations} \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{vneg}{vneg ( vec -- vec )} } Negates each element of a vector. \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{v*n}{v*n ( vec n -- vec )} \ordinaryword{n*v}{n*v ( n vec -- vec )} } Multiplies each element of the vector by a scalar. The two words only differ in argument order. \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{v/n}{v/n ( vec n -- vec )} \ordinaryword{n/v}{n/v ( n vec -- vec )} } @@ -3622,7 +3770,7 @@ Divides each element of the vector by a scalar, or alternatively, divides the sc These words all expect a pair of vectors of equal length. They apply a binary operation to each pair of elements, producing a new vector. They are all implemented using the \verb|2map| combinator (\ref{iteration}). \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{v+}{v+ ( vec vec -- vec )} \ordinaryword{v-}{v-~( vec vec -- vec )} \ordinaryword{v*}{v*~( vec vec -- vec )} @@ -3649,54 +3797,39 @@ Note that \verb|v*| is not the inner product. The inner product is the \verb|v.| These words take a vector as input and produce a single number (or boolean). \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{sum}{sum~( vec -- n )} \ordinaryword{product}{product~( vec -- n )} } -Adds or multiplies all numbers in the vector. These are implemented as follows: +Adds or multiplies all numbers in the vector. These are implemented using the \verb|reduce| combinator (\ref{iteration}): \begin{verbatim} : sum ( v -- n ) 0 [ + ] reduce ; : product 1 [ * ] reduce ; \end{verbatim} -using the \verb|reduce| combinator (\ref{iteration}). - -\wordtable{ -\vocabulary{matrices} -\ordinaryword{conj}{conj~( vec -- ?~)} -} -Tests if all elements in the vector are true values. This is implemented as follows: -\begin{verbatim} -: conj [ ] all? ; -\end{verbatim} -\wordtable{ -\vocabulary{matrices} -\ordinaryword{disj}{disj~( vec -- ?~)} -} -Tests if at least one element in the vector is a true value. This is implemented as follows: -\begin{verbatim} -: conj [ ] contains? ; -\end{verbatim} - \subsubsection{Inner and cross products}\label{inner-product} \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{v.}{v.~( vec vec -- n )} } -Computes the inner product of two vectors. They must be of equal length. - -Mathematically speaking, this is a map $<,>: {\mathbb{C}}^n \times {\mathbb{C}}^n \rightarrow \mathbb{C}$. It is the complex inner product; that is, $ =\overline{}$, where $\overline{z}$ is the complex conjugate. +Computes the real inner product of two vectors. They must be of equal length. \wordtable{ -\vocabulary{matrices} +\vocabulary{math} +\ordinaryword{c.}{c.~( vec vec -- n )} +} +Computes the complex inner product of two vectors. The complex inner product is skew-symmetric; that is, $=\overline{}$, where $\overline{z}$ is the complex conjugate of $z$. + +\wordtable{ +\vocabulary{math} \ordinaryword{norm}{norm~( vec -- n )} } Computes the norm (``length'') of a vector. The norm of a vector $v$ is defined as $\sqrt{}$. \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{normalize}{normalize~( vec -- vec )} } Outputs a vector with the same direction, but length 1. Defined as follows: @@ -3705,7 +3838,7 @@ Outputs a vector with the same direction, but length 1. Defined as follows: \end{verbatim} \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{cross}{cross~( v1 v2 -- vec )} } Computes the cross product $v_1\times v_2$. The following example illustrates the fact that a cross product of two vectors is always orthogonal to either vector. @@ -3720,124 +3853,86 @@ Computes the cross product $v_1\times v_2$. The following example illustrates th \subsection{Matrices}\label{matrices} -Matrix literal syntax is documented in \ref{syntax:matrices}. In addition to the literal syntax, new matrices may be created from scratch in one of several ways. +Matrices are represented as sequences of sequences of equal length. For example, consider +the following object: +\begin{verbatim} +{ { 1 0 -1 } + { 2 1/3 6 } + { 4 -2 0 } + { 0 0 8 } } +\end{verbatim} +It corresponds to the following mathematical matrix: +$$\left( \begin{array}{c c c} +1 & 0 & -1 \\ +2 & 1/3 & 6 \\ +4 & -2 & 0 \\ +0 & 0 & 8 \end{array} +\right)$$ +The transpose of a matrix may be computed with the \verb|flip| word (\ref{reshaping}). \wordtable{ -\vocabulary{matrices} -\ordinaryword{}{ ( rows cols seq -- matrix )} -} -Creates a new matrix with the given dimensions and underlying sequence. The underlying sequence stores elements in row-major order. - -\wordtable{ -\vocabulary{matrices} -\ordinaryword{matrix-sequence}{matrix-sequence ( matrix -- seq )} -} -Outputs the underlying sequence of a matrix. - -\begin{alltt} - M[ [ 1 2 3 ] [ 4 5 6 ] ]M matrix-sequence . -\textbf{\tto 1 2 3 4 5 6 \ttc} -\end{alltt} - -\wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{}{ ( rows cols -- matrix )} } Creates a new matrix with the given dimensions and all elements set to zero. \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{}{ ( n -- matrix )} } Creates a new $n\times n$ matrix where all elements on the main diagonal are 1, and all other elements are zero; for example: \begin{alltt} - 3 prettyprint -\textbf{M[ [ 1 0 0 ] - [ 0 1 0 ] - [ 0 0 1 ] ]M} + 3 . +\textbf{\tto \tto 1 0 0 \ttc \tto 0 1 0 \ttc \tto 0 0 1 \ttc \ttc} \end{alltt} The following are the usual algebraic operations on matrices. \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{n*m}{n*m ( n matrix -- matrix )} } Multiplies each element of a matrix by a scalar. \begin{alltt} 5 2 n*m prettyprint -\textbf{M[ [ 5 0 ] - [ 0 5 ] ]M} +\textbf{\tto \tto 5 0 \ttc + \tto 0 5 \ttc \ttc} \end{alltt} \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{m+}{m+~( matrix matrix -- matrix )} } Adds two matrices. They must have the same dimensions. \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{m-}{m-~( matrix matrix -- matrix )} } Subtracts two matrices. They must have the same dimensions. \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{m*}{m*~( matrix matrix -- matrix )} } Multiplies two matrices element-wise. They must have the same dimensions. This is \emph{not} matrix multiplication in the usual mathematical sense. \wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{m.}{m.~( matrix matrix -- matrix )} } Composes two matrices as linear operators. This is the usual mathematical matrix multiplication, and the first matrix must have the same number of columns as the second matrix has rows. \wordtable{ -\vocabulary{matrices} -\ordinaryword{transpose}{transpose~( matrix -- matrix )} -} -Outputs a matrix where each row is a column of the original matrix, and each column is a row of the original matrix. -\begin{alltt} - M[ [ 1 2 ] [ 3 4 ] [ 5 6 ] ]M transpose . -\textbf{M[ [ 1 3 5 ] [ 2 4 6 ] ]M} -\end{alltt} - -\subsection{Column and row matrices} - -There is a natural isomorphism between the vector space $\mathbb{C}^m$, the $m\times 1$ matrices, and the $1 \times m$ matrices. Additionally, a $m\times n$ matrix acts as a linear operator from the vector space $\mathbb{C}^n$ to $\mathbb{C}^m$ in the same way as multiplying the $m\times n$ matrix by a $n \times 1$ matrix. In Factor, these ideas are embodied by a set of words for converting vectors to matrices, and vice-versa. - -\wordtable{ -\vocabulary{matrices} -\ordinaryword{}{~( vector -- matrix )} -} -Given a vector with $n$ elements, outputs a $1 \times n$ matrix. -\begin{alltt} - \tto 1.0 4.43 7.6 0.2 \ttc . -\textbf{M[ [ 1.0 4.43 7.6 0.2 ] ]M} -\end{alltt} - -\wordtable{ -\vocabulary{matrices} -\ordinaryword{}{~( vector -- matrix )} -} -Given a vector with $n$ elements, outputs a $n \times 1$ matrix. -\begin{alltt} - \tto 1.0 4.43 7.6 0.2 \ttc . -\textbf{M[ [ 1.0 ] [ 4.43 ] [ 7.6 ] [ 0.2 ] ]M} -\end{alltt} - -\wordtable{ -\vocabulary{matrices} +\vocabulary{math} \ordinaryword{m.v}{m.v~( matrix vector -- vector )} } Applies a matrix to a vector on the right, as a linear transformation. The vector is treated as a matrix with one column. \begin{alltt} - \tto 5 -3 \ttc M[ [ 0 1 ] [ 1 0 ] ]M v.m . + \tto 5 -3 \ttc \tto \tto 0 1 \ttc \tto 1 0 \ttc \ttc v.m . \textbf{\tto -3 5 \ttc} \end{alltt} @@ -3887,12 +3982,12 @@ Releases any external resources associated with the stream, such as file handles You must close streams after you are finished working with them. A convenient way to automate this is by using the \texttt{with-stream} word in \ref{stdio}. -The following two words are optional, and should be implemented on input streams. +The following three words are optional, and should be implemented on input streams. \wordtable{ \vocabulary{io} \genericword{stream-readln}{stream-readln ( s -- str/f )} } -Reads a line of text and outputs it on the stack. If the end of the stream has been reached, outputs \texttt{f}. The precise meaning of a ``line'' depends on the stream. Streams that do not support this generic word can be wrapped in a line stream that reads lines terminated by \verb|\n|, \verb|\r| or \verb|\r\n| (\ref{special-stream}). File and network streams are automatically wrapped in line streams. +Reads a line of text and outputs it on the stack. If the end of the stream has been reached, outputs \texttt{f}. The precise meaning of a ``line'' depends on the stream. Streams that do not support this generic word can be wrapped in a line stream that reads lines terminated by \verb|\n|, \verb|\r| or \verb|\r\n| (\ref{special-streams}). File and network streams are automatically wrapped in line streams. \wordtable{ \vocabulary{io} \genericword{stream-read1}{stream-read1 ( s -- char/f )} @@ -3970,7 +4065,7 @@ Outputs a string to the stream, then calls \verb|stream-terpri| to force a newli description={the value of the \texttt{stdio} variable, used by various words as an implicit stream parameter}} \glossary{name=stdio, description={see default stream}} -Various words take an implicit stream parameter from the \texttt{stdio} variable to reduce stack shuffling. +Various words take an implicit stream parameter from the \texttt{stdio} variable to reduce stack shuffling. Unless rebound in a child namespace, this variable will be set to a console stream for interacting with the user. \wordtable{ \vocabulary{io} \ordinaryword{close}{close ( -- )} @@ -4076,7 +4171,7 @@ Key&Description\\ \ttindex{foreground}&The foreground color, as a list with red, green, blue components\\ \ttindex{background}&The background color, as a list with red, green, blue components\\ \ttindex{font}&A font family name\\ -\ttindex{font-style}&One of \ttindex{plain}, \ttindex{bold}, \ttindex{italic}, or \ttindex|bold-italic|\\ +\ttindex{font-style}&One of \ttindex{plain}, \ttindex{bold}, \ttindex{italic}, or \ttindex{|bold-italic}\\ \ttindex{font-size}&An integer\\ \ttindex{underline}&A boolean\\ \ttindex{presented}&If set, a presentation for this object is output\\ @@ -4099,7 +4194,7 @@ String buffers support both the stream input and output protocol directly, with \vocabulary{io} \ordinaryword{}{ ( string -- stream )} } -Creates a new stream for reading characters from a string. First, a string buffer is created holding the reversed string, since characters are read in reverse by repeated calls to \verb|pop| (\ref{stack-seq}). The result is wrapped in a line stream providing a \verb|stream-readln| implementation (\ref{special-streams}): +Creates a new stream for reading characters from a string. First, a string buffer is created holding the reversed string, since characters are read in reverse by repeated calls to \verb|pop| (\ref{oddball-seq}). The result is wrapped in a line stream providing a \verb|stream-readln| implementation (\ref{special-streams}): \begin{verbatim} : ( string -- stream ) >sbuf ; @@ -4382,7 +4477,8 @@ array byte-array displaced-alien \end{verbatim} -\item Circular structure is not printed in a readable way. Circular references are printed as ``\texttt{...}''. +\item Shared structure is not reflected in the printed output; if the output is parsed back in, fresh objects are created for all literal denotations. +\item Circular structure is not printed in a readable way. Circular references are printed as ``\texttt{\&}''. \item Floating point numbers might not equal themselves after being printed and read, since a decimal representation of a float is inexact. \end{itemize} \wordtable{ @@ -4412,7 +4508,7 @@ Specifies the indentation for recursive objects such as lists, vectors, hashtabl \vocabulary{prettyprint} \symbolword{prettyprint-limit} } -Controls the maximum nesting depth. Printing structures that nest further than this will simply print ``\texttt{...}''. If this is set to \texttt{f}, the nesting depth is unlimited. The default is \texttt{f}. Inside calls to \texttt{.}, set to 16, which translates to four levels of nesting with the default tab size. +Controls the maximum nesting depth. Printing structures that nest further than this will simply print ``\texttt{\#}''. If this is set to \texttt{f}, the nesting depth is unlimited. The default is \texttt{f}. Inside calls to \texttt{.}, set to 16, which translates to four levels of nesting with the default tab size. \wordtable{ \vocabulary{prettyprint} @@ -4532,7 +4628,7 @@ The \texttt{eval} word is defined as follows: \section{Parsing from streams} -There are two sets of words for parsing input from streams. The first set uses the following initial values for the \texttt{"use"} and \texttt{"in"} variables: +Words for parsing input from streams use the following initial values for the \texttt{"use"} and \texttt{"in"} variables: \begin{description} \item[\texttt{"use"}] \texttt{[ "scratchpad" "syntax" ]} @@ -4562,16 +4658,6 @@ Parses the contents of a file and calls the resulting quotation. Defined as foll : run-file parse-file call ; \end{verbatim} -The next set of stream parsing words takes the vocabulary search path and current vocabulary from the current scope. These words are used to load the \texttt{.factor-rc} file on startup, so that any \texttt{USE:}~and \texttt{USING:}~declarations set in that file take effect in the listener (\ref{listener}). - -\wordtable{ -\vocabulary{parser} -\genericword{(parse-stream)}{(parse-stream)~( name stream -- list )} -\genericword{(parse-file)}{(parse-file)~( path -- list )} -\genericword{(run-file)}{(run-file)~( path -- )} -} -Like the first set of stream parsing words, except the \texttt{"use"} and \texttt{"in"} variables are taken from the current scope. - \section{Parsing words}\label{parsing-words} \parsingwordglos @@ -4649,7 +4735,19 @@ Indeed, any type of object can be added to the parse tree in this fashion. \glossary{name=reading ahead, description=a parsing word reads ahead of it scans following tokens from the input string} -The next idiom to look at is parsing words that read ahead. The first example is the \verb|HEX:| word, documented in \ref{integer-literals}. This word is defined so that the following two lines are equivalent: +The next idiom to look at is parsing words that read ahead. +\wordtable{ +\vocabulary{parser} +\ordinaryword{scan}{scan ( -- string )} +} +Outputs the next token as a string, or \texttt{f} if the end of the input has been reached. Advances the parser state to after this token. +\wordtable{ +\vocabulary{parser} +\ordinaryword{scan-word}{scan-word ( -- word )} +} +Reads the next token from the input and looks up a word with this name. If the lookup fails, attempts to parse the word as a number by calling \verb|str>number|. Outputs \verb|f| if the end of input has been reached. There is no confusion with the \verb|f| literal here, since the latter is raad as the \verb|f| parsing word. + +The first example is the \verb|HEX:| word, documented in \ref{integer-literals}. This word is defined so that the following two lines are equivalent: \begin{verbatim} HEX: deadbeef 3735928559 @@ -4660,27 +4758,49 @@ It is defined in terms of a lower-level \texttt{(BASE)} word that takes the nume : HEX: 16 (BASE) ; parsing \end{verbatim} The key word here is \texttt{scan}. -\wordtable{ -\vocabulary{parser} -\ordinaryword{scan}{scan ( -- string )} -} -Outputs the next token as a string, or \texttt{f} if the end of the input has been reached. Advances the parser state to after this token. -The next example of a parsing word we will look at is the \verb|\| word. It reads the next token from the input, and appends code to push that word literally on the stack. That is, the following two phrases both have the effect of pushing the word \verb|+| on the stack, rather than executing it: +The next example of a parsing word we will look at is the \verb|\| word. It is used to insert a word literally in a quotation, that is, push it on the stack during evaluation, so that the following two lines are equivalent: \begin{verbatim} -\ + -[ + ] car +\ execute + \end{verbatim} -We can look at how \verb|\| is implemented: +The implementation of the \verb|\| parsing word reads the next token from the input stream using \verb|scan-word|. +It then uses the \verb|literalize| word to turn the word into an object that pushes the word +on the stack, and then appends this to the parse tree: \begin{verbatim} -: \ scan-word unit swons \ car swons ; parsing +: \ scan-word literalize swons ; parsing \end{verbatim} -The key word here is \verb|scan-word|. It combines \texttt{scan} word with vocabulary search. + \wordtable{ -\vocabulary{parser} -\ordinaryword{scan-word}{scan-word ( -- word )} +\vocabulary{words} +\ordinaryword{literalize}{literalize ( object -- object )} } -Reads the next token from the input and looks up a word with this name. If the lookup fails, attempts to parse the word as a number by calling \verb|str>number|. +Turns non-self-evaluating objects (words and wrappers) into wrappers that push those objects, and is a no-op on everything else. This word is generic (\ref{generic}), with three trivial methods: +\begin{verbatim} +GENERIC: literalize ( object -- object ) +M: object literalize ; +M: wrapper literalize ; +M: word literalize ; +\end{verbatim} + +\wrapglos + +Instances of the \verb|wrapper| class hold a reference to a single object. When the evaluator encounters a wrapper, it pushes the wrapped object on the data stack. + +\wordtable{ +\vocabulary{kernel} +\ordinaryword{wrapped}{wrapped ( wrapper -- object )} +} +Outputs the object wrapped by the wrapper. This word is used in the implementation of the \verb|wrapper| method of the \verb|prettyprint*| generic word: +\begin{verbatim} +M: wrapper prettyprint* + dup wrapped word? [ + \ \ unparse. bl wrapped unparse. + ] [ + \ W[ unparse. bl wrapped prettyprint* \ ]W unparse. + ] ifte ; +\end{verbatim} +The somewhat more verbose \verb|W[ ... ]W| syntax is only part of the language for completeness, to handle the corner case where a wrapper wrapping another wrapper is printed out and read back in by the parser. \subsection{Defining words} @@ -4790,7 +4910,7 @@ This word is used to implement end-of-line comments: : ! until-eol drop ; parsing \end{verbatim} -\chapter{UI framework} +\chapter{UI framework}\label{ui} \begin{itemize} @@ -5765,14 +5885,14 @@ Probably the most important debugging tool of them all is the \texttt{.} word. I \begin{alltt} [ [ \tto 1 \ttc \tto 2 \ttc ] dup car swap cdr ] . -[ [ \tto 1 \ttc \tto 2 \ttc ] dup car swap cdr ] +\textbf{[ [ \tto 1 \ttc \tto 2 \ttc ] dup car swap cdr ]} \end{alltt} Most objects print in a parsable form, but not all. One exceptions to this rule is objects with external state, such as I/O ports or aliens (pointers to native structures). Also, objects with circular or very deeply nested structure will not print in a fully parsable form, since the prettyprinter has a limit on maximum nesting. Here is an example -- a vector is created, that holds a list whose first element is the vector itself: \begin{alltt} \tto \ttc [ unit 0 ] keep [ set-vector-nth ] keep . -\tto [ ... ] \ttc +\textbf{\tto [ ... ] \ttc} \end{alltt} The prettyprinted form of a vector or list with many elements is not always readable. The \texttt{[.]} and \texttt{\tto.\ttc} words output a list or a vector, respectively, with each element on its own line. In fact, the stack printing words are defined in terms of \texttt{[.]} and \texttt{\tto.\ttc}: @@ -5780,8 +5900,6 @@ The prettyprinted form of a vector or list with many elements is not always read \begin{verbatim} : .s datastack {.} ; : .r callstack {.} ; -: .n namestack [.] ; -: .c catchstack [.] ; \end{verbatim} Before we move on, one final set of output words comes is used to output integers in @@ -5851,21 +5969,21 @@ whose names contain a given string. The \texttt{apropos.} word is also useful wh \begin{alltt} "map" apropos. -\textbf{IN: inference -type-value-map -IN: lists -map -map-with +\textbf{IN: generic +typemap +IN: hashtables +map>hash IN: sdl set-surface-map surface-map -IN: strings -string-map -IN: vectors -vector-map} +IN: sequences +2map +map +map-with +nmap} \end{alltt} -From the above output, you can see that \texttt{map} is for lists, \texttt{string-map} is for strings, and \texttt{vector-map} is for vectors. +From the above output, you can see a few words to explore, such as \verb|map|, \verb|map-with|, and \verb|2map|. The \texttt{usage} word finds all words that refer to a given word and pushes a list on the stack. This word is helpful in two situations; the first is for learning -- a good way to learn a word is to see it used in context. The second is during refactoring -- if you change a word's stack effect, you must also update all words that call it. Usually you print the return value of \texttt{usage} using \texttt{.}: @@ -5883,7 +6001,7 @@ both words will be in the output list. \section{Exploring classes} -Factor supports object-oriented programming via generic words. Generic words are called +Factor supports object-oriented programming via generic words (\ref{generic}). Generic words are called like ordinary words, however they can have multiple definitions, one per class, and these definitions do not have to appear in the same source file. Such a definition is termed a \emph{method}, and the method is said to \emph{specialize} on a certain @@ -5948,7 +6066,8 @@ M: list prettyprint* \section{Looking at stacks} -To see the contents of the data stack, use the \texttt{.s} word. Similarly, the other stacks can be shown with \texttt{.r} (return stack), \texttt{.n} (name stack), and \texttt{.c} (catch stack). Each stack is printed with each element on its own line; the top of the stack is the first element printed. +To see the contents of the data or return stack, use the \texttt{.s} and \texttt{.r} words. +Each stack is printed with each element on its own line; the top of the stack is the first element printed. \section{The debugger} @@ -5959,11 +6078,11 @@ time with Factor at all, you are probably familiar with this type of message: \begin{alltt} [ 1 2 3 ] 4 append reverse \textbf{The generic word car does not have a suitable method for 4 -:s :r :n :c show stacks at time of error. +:s :r show stacks at time of error. :get ( var -- value ) inspects the error namestack.} \end{alltt} -The words \texttt{:s}, \texttt{:r}, \texttt{:n} and \texttt{:s} behave like their counterparts that are prefixed with \texttt{.}, except they show the stacks as they were when the error was thrown. +The words \texttt{:s} and \texttt{:r} behave like their counterparts that are prefixed with \texttt{.}, except they show the stacks as they were when the error was thrown. The return stack warrants some special attention. To successfully develop Factor, you will need to learn to understand how it works. Lets look at the first few lines of the return stack at the time of the above error: @@ -6010,7 +6129,7 @@ There are two ways to use the walker. First of all, you can call the \texttt{wal \begin{alltt} [ [ 10 [ dup , ] repeat ] make-list ] walk -\textbf{\&s \&r \&n \&c show stepper stacks. +\textbf{\&s \&r show stepper stacks. \&get ( var -- value ) inspects the stepper namestack. step -- single step over into -- single step into @@ -6145,21 +6264,9 @@ The main entry point of the stack checker is a single word. Takes a quotation and attempts to infer its stack effect. An exception is thrown if the stack effect cannot be inferred. -You can combine unit testing with stack effect inference by writing unit tests that check stack effects of words. In fact, this can be automated with the \texttt{infer>test.} word; it takes a quotation on the stack, and prints a code snippet that tests the stack effect of the quotation: - -\begin{alltt} - [ draw-shape ] infer>test. -\textbf{[ [ [ object ] [ ] ] ] -[ [ draw-shape ] infer ] -unit-test} -\end{alltt} - -You can then copy and paste this snippet into a test script, and run the test script after -making changes to the word to ensure its stack effect signature has not changed. - \section{The algorithm} -The stack effect inference algorithm mirrors the interpreter algorithm. A ``meta data stack'' holds two types of entries; computed values, whose type is known but literal value will only be known at runtime, and literals, whose value is known statically. When a literal value is encountered, it is simply placed on the meta data stack. When a word is encountered, one of several actions are taken, depending on the type of the word: +The stack effect inference algorithm mirrors the evaluator algorithm (\ref{quotations}). A ``meta data stack'' holds two types of entries; computed values, whose type is known but literal value will only be known at runtime, and literals, whose value is known statically. When a literal value is encountered, it is simply placed on the meta data stack. When a word is encountered, one of several actions are taken, depending on the type of the word: \begin{itemize} \item If the word has special stack effect inference behavior, this behavior is invoked. Shuffle words and various primitives fall into this category. @@ -6283,6 +6390,8 @@ The \verb|node| tuple has the following slots: \item[\texttt{in-r}] A list of input values popped the return stack. Only used by \verb|#call >r| nodes. \item[\texttt{out-d}] A list of output values pushed on the data stack. \item[\texttt{out-r}] A list of output values pushed on the return stack. Only used by \verb|#call r>| nodes. +\item[\texttt{node-classes}] A hashtable mapping values to classes. +\item[\texttt{node-literals}] A hashtable mapping values to literals. \item[\texttt{node-successor}] The direct successor of the node. \item[\texttt{node-children}] A list of the node's children, for example if this is a branch or label node. The number of children depends on the type of node. \end{description} @@ -6291,6 +6400,8 @@ Note that nodes are linked by the \verb|node-successor| slot. Nested structure i The stack effect inferencer transforms quotations into dataflow IR. +The \verb|node-classes| and \verb|node-literals| slots are filled in by a separate class inference stage (\ref{class-inference}). + \wordtable{ \vocabulary{inference} \ordinaryword{dataflow}{dataflow ( quot -- node )} @@ -6300,10 +6411,10 @@ Produces the dataflow IR of a quotation. \wordtable{ \vocabulary{inference} -\ordinaryword{dataflow.}{dataflow.~( node -- )} +\ordinaryword{dataflow.}{dataflow.~( quot ? -- )} } -Prints dataflow IR in human-readable form. +Prints dataflow IR in human-readable form. The boolean indicates if stack effect annotations should be output. \subsection{Values} @@ -6315,12 +6426,7 @@ Values are an abstraction over possibly known computation inputs and outputs. Th \item[Joined values] represent a unification of possible values of a stack slot where branched control flow meets \end{description} -The \verb|value| tuple has the following slots: - -\begin{description} -\item[\texttt{recursion}] A list of nested lexical scopes, used to resolve recursive stack effects -\item[\texttt{safe?}] This is a hack. If this is false, the value's type at that point might not potentially be known, since a entry to this block from another entry point can potentially occur -\end{description} +The \verb|value| tuple has one slot, \verb|value-recursion|. This is a list of nested lexical scopes, used to resolve recursive stack effects \subsection{Straight-line code} @@ -6328,29 +6434,23 @@ The \verb|value| tuple has the following slots: \item[\texttt{\#push}] Pushes literal values on the data stack. -\begin{tabular}{l|l} -Slot&Role\\ -\hline -\verb|node-out-d|&A list of literals. -\end{tabular} +\begin{description} +\item[\texttt{node-out-d}] A list of literals. +\end{description} \item[\texttt{\#drop}] Pops literal values from the data stack. -\begin{tabular}{l|l} -Slot&Role\\ -\hline -\verb|node-in-d|&A list of literals. -\end{tabular} +\begin{description} +\item[\texttt{node-in-d}] A list of literals. +\end{description} \item[\texttt{\#call}] Invokes the word identified by \verb|node-param|. -\begin{tabular}{l|l} -Slot&Role\\ -\hline -\verb|node-param|&A word.\\ -\verb|node-in-d|&Input values.\\ -\verb|node-out-d|&Output values. -\end{tabular} +\begin{description} +\item[\texttt{node-param}]A word.\\ +\item[\texttt{node-in-d}]Input values.\\ +\item[\texttt{node-out-d}]Output values. +\end{description} \item[\texttt{\#call-label}] Like \verb|#call| but \verb|node-param| refers to a parent \verb|#label| node. @@ -6362,53 +6462,66 @@ Slot&Role\\ \item[\texttt{\#ifte}] A conditional expression. -\begin{tabular}{l|l} -Slot&Role\\ -\hline -\verb|node-in-d|&A singleton list holding the condition being tested.\\ -\verb|node-children|&A list of two nodes, the true and false branches. -\end{tabular} +\begin{description} +\item[\texttt{node-in-d}]A singleton list holding the condition being tested.\\ +\item[\texttt{node-children}]A list of two nodes, the true and false branches. +\end{description} \item[\texttt{\#dispatch}] A jump table. -\begin{tabular}{l|l} -Slot&Role\\ -\hline -\verb|node-in-d|&A singleton list holding the jump table index.\\ -\verb|node-children|&A list of nodes, in consecutive jump table order. -\end{tabular} +\begin{description} +\item[\texttt{node-in-d}]A singleton list holding the jump table index.\\ +\item[\texttt{node-children}]A list of nodes, in consecutive jump table order. +\end{description} \item[\texttt{\#values}] Found at the end of each branch in an \verb|#ifte| or \verb|#dispatch| node. -\begin{tabular}{l|l} -Slot&Role\\ -\hline -\verb|node-out-d|&A list of values present on the data stack at the end of the branch.\\ -\end{tabular} +\begin{description} +\item[\texttt{node-out-d}]A list of values present on the data stack at the end of the branch.\\ +\end{description} + +\item[\texttt{\#meet}] Must be the successor if an \verb|#ifte| or \verb|#dispatch| node. + +\begin{description} +\item[\texttt{node-in-d}]A list of \verb|meet| values unified from the \verb|#values| node at the end of each branch.\\ +\end{description} \item[\texttt{\#label}] A named block of code. Child \verb|#call-label| nodes can recurse on this label. -\begin{tabular}{l|l} -Slot&Role\\ -\hline -\verb|node-param|&A gensym identifying the label.\\ -\verb|node-children|&A singleton list whose sole element is the labelled node. -\end{tabular} +\begin{description} +\item[\texttt{node-param}]A gensym identifying the label.\\ +\item[\texttt{node-children}]A singleton list whose sole element is the labelled node. +\end{description} + +\item[\texttt{\#entry}] Must be the first node of a \verb|#label|. These nodes are created by the stack effect inferencer, however are only properly filled out by the recursive value inference stage (\ref{recursive-inference}). +\begin{description} +\item[\texttt{node-in-d}]A list of \verb|meet| values unified from all entry points into the block scoped by the \verb|#label| node.\\ +\end{description} \item[\texttt{\#return}] Found at the end of a word's dataflow IR. -\begin{tabular}{l|l} -Slot&Role\\ -\hline -\verb|node-out-d|&Values present on the stack when the word returns. -\end{tabular} +\begin{description} +\item[\texttt{node-out-d}]Values present on the stack when the word returns. +\end{description} \end{description} \section{Dataflow optimizer} +The dataflow optimizer consists of a set of loosely-related words and passes over dataflow IR that apply various transformations with the intent of improving the efficiency of the generated code. + \subsection{Killing unused literals} +\subsection{Class inference}\label{class-inference} + +\subsection{Recursive value inference}\label{recursive-inference} + +\subsection{Method inlining and type check elimination} + +\subsection{Branch folding} + +\subsection{Partial evaluation} + \section{Linear intermediate representation} The linear IR is the second of the two intermediate @@ -6416,17 +6529,6 @@ representations used by Factor. It is basically a high-level assembly language. Linear IR operations are called VOPs. The last stage of the compiler generates machine code instructions corresponding to each \emph{virtual operation} in the linear IR. To perform everything except for the machine code generation, use the \texttt{precompile} word. This will dump the optimized linear IR instead of generating code, which can be useful sometimes. - -\begin{alltt} - \bs append precompile -\textbf{<< \%prologue << vop [ ] [ ] [ ] [ ] >> >> -<< \%peek-d << vop [ ] [ 1 ] [ << vreg ... 0 >> ] [ ] >> >> -<< \%peek-d << vop [ ] [ 0 ] [ << vreg ... 1 >> ] [ ] >> >> -<< \%replace-d << vop [ ] [ 0 << vreg ... 0 >> ] [ ] [ ] >> >> -<< \%replace-d << vop [ ] [ 1 << vreg ... 1 >> ] [ ] [ ] >> >> -<< \%inc-d << vop [ ] [ -1 ] [ ] [ ] >> >> -<< \%return << vop [ ] [ ] [ ] [ ] >> >>} -\end{alltt} \subsection{Control flow} diff --git a/doc/interpreter.dia b/doc/interpreter.dia index cc2b84a83d2ba24e1592b41d37574d80340bbdbd..fa93e3bc05354ef611cabaaa38bb302c5796a07d 100644 GIT binary patch literal 2363 zcmV-B3B>jviwFP!000001MOW)Z{x@jzUx;InnNy{cE2B^wFkRM76}j}0d|8Rdod`9 zmYAhTg{1tr@rSO4>)$iIR{SHqiu=e_M<=I6dWwmItOc^XdEdEmwVGPoX2{ORxWG+D>9VcBZa zZkj|%>fQU%_3+bO@fu!jy1AuRDWxzN!f1mP zSLAt2j)$9^7cM$4TzX!(FuPqPX`cFFz6&`?k|^-w5;afP!Ra{J)Q@0_?Gvko6n9~s zC+}SUogZa~2v8n=(Y9kXcbccqi ztox^Ky5GJ#h4p?tz2$5uduybJnGQrCj;DwDI-CXBJJYP%rlF_BrrFhdqrTnl(19rr zZIN{W5&2I+y6OI>SDN-VH+W-l-i$&r`A;y-H{$&qB@feupXT0Y?~kFsOo~&VT@P?P z!rArk@3=Zf+fqS~VE%RnX_dUpq|X>JF(Qb;Yg_nT)6s-6nQTL(Ac-H(qu>RG0}9oQ zjfp^%2{D2nQW1R`Y7hm>+i8-5Py9j&SyYrV} z^aR)H$Jx-!@+WIfz$TQZ{yB*5gFKx2Z>`?(SFke`Yww@N)faCETD4YnI;{{VN~sY; zTnX9|uF79~f*g$70fBcokC#FHJq_aZvWD3AQF|RbH8JefE4duPHa{hgHB3X=G7Vvf zV$MbqF(R09NH%~(M1e#lAdQJe$|4(t<;lp05l$yU9>O^SacQYI z-#*FwBUu#;1J)e|YydMXd1aiQWn8li_;iLEHUhS(+KirMx?!2-n1*%`(`X|N<8b$w z(OS6;Yz%+K;(%qt8;!v~AruL2gyZn03qcQxaU_z03qv)HBq-0btOg`az28RyuZz2wgRKA8IH=GT&(3O4G4o^u2}3^NHXtm1}}o{r8F^sv@c z#2^sRl8*>SgemEgi2zD&ps-eQ3<0txFlQkA;rdkQ1Bs{;F%RJ(iIi~2JRH$VRAqD@ z>A2>aKRpIh+uoAOLz2$E3<@L|Hg6W(WrOT#IZ2{yuu8*an1}a4*7J>PzQG6!X>Er< zv|>AYzH!MnymgX|Ac;A(cKB2~d02{#AR#t5W1~tX7VTmU?eRfLvGV&Z3R0lUZJ8Vknf5>ehKn7$uBQY2Ctv~ka^Qt+7pTUd>AM$MNIT8 z(glnB0;YK8r!ydtzlL#8!y>XRi#(TYKtM?pF%GFjBEvA&fJCG;V`V=|`-p@Ka%yU7 zn#A#K5YGyMP7<>@r`zh;4NRTsYWsTX>O_yCo_Kcar)l!A-Er+qJ*ns0D2V6#i1TDB zc!hX}nh!>>Hy@@L=tH(cG0)$43(%mA0nU@6GShqg_IjvyWNY5xWYa;bgbh|V(y7|PS08N3jU2M_?D8& zV-%cM&!uNlaNSnH8KP1uas~~zmD@ny8x?1I%n)OW6;GHz%xRJWSXz+AXRlvomQoX}#v_g|Re5pl)kY0E%GXZ*IYuB4jKPF@mu|#}(6# zb-Yp3-KGMWcIn_=%fC@AXB}!e=~~Nw3+KQ2^Cn#+NBHs4lc zz^FhW?v{+I+Op&ev6876AP5#^Fnw<%7_ zs6_(nKxvWUR8oy3SXIuI`xIxroV8(;kW#l>^4R-Mm+=_ms4OS>P}iw-?f&x;KnVX` zFIcuu(1~>cs5F?5i2+?w9FV0pQo8h^8im}~RI#Exs?O8RzuE$-8cW-{YF#2Oz<&@`t#(it!tJg@#==0DYIkYS z@?^+!mYn@9=}XF7mz32{!tbG~41au8S(E7y9qcN@tWp!lwxh)1<@B(@Sb@qf!+iX^ zUov-wwGH(%u{R)24T$W(fXETNVW%~zB??6x<6;9uBek-q9Lo!+c>nQvy;N^S&R|7$ zr(!{`0-~)ZggLm3Nb$F45Hcnl~4G0ru$f=9ew|#(iA!)0^P3ZS@IfI+9 hI~n`v^Drl&{9OFSv715VPmcd{-QoSFou{(BRc48-DVrC;|_ONqt zAb}-z5NH7TaoOL#Ss=F!0$CEEZg)V~-4@EKk1Q(l%gieH?$hHsbng8m4dUo}Ob{MB zezb_aAX;9J|NZ-qS9<*EX7rsGxF6wnnYe2QT12V+bUj{W+2-SP`tb08!l%^D;sk}k z7N!35e{LAMQxKYtZ$^&ux&zP6TzhVJ*3Ggcm~S)RiQKh+J)XOZKbJ|ojl6LowUb-K zVVpSkZg@TZaF-wB>8_h;sh9xTM{Qm%i#Qv=Jm*yU8+$_Hkfr!eSsO(v(sd3}LjviYxLw zCa1&AFAEo57B0CgT#(*w;v`GlAlrwW$8qSpQGuEzTmO8Vbm4|D#SW>}LW{c~%i=e# z|IQ85V-zS(f3~($Eq9p&-eJQnNi_8G5O~?@_OYkoDtdqFsrUOJ4d$U=clAM(b=Lh; zH{Dn7PVT*5nzx({MQ@Gt;Avm@;&gggZUfIx-xyqWc7}A=- z4_A_FMl?6)fu*bX;kG7te480hLD{&TS7ybEI`;m&9y+GZ)F<;F_eQPiF)A`mBa_F9 zCAmsi`BUm-E8hXe5AVR}eaHW63kqeibN8ts;5^`^n!9cbBG)!DQ{oG7Ix3~?oBOSm$B z9Y}I8ZU+R>;WAqL_4m||w(A;VKSb?y?9{}t(-(3%hHbu&A8VL~v}GE?5XGELBw|D` z)g##e5)nBPm4GxO8Yzox5SC{nA4fQyD0vL$2*kO0eXt%$hr;-k4*JeXM|}Mx^RIZ5 zGYoil7_bq{u=s^>2A1iYWgw|ysfaNWZl2Og^vE=T zM4yqE5;MXf6VPfxC?XP@KAENyC6CH(I3h$U$e@f+Mo3|LWEu_w$~dJ|GHf6tz-mZu zzF2ybIPsnRbM%twxXweIcte(Ri7ba#PNtt@Aot_r4!Mz(lfWIF@B^i3}e z87!>@a~nO%fnF{{FT5?iXatjka+_e7J`)=S-9O{ltj3~Fh(fGSTIoQ!<4R}da-}nl zXbH>cfmHe?m47_?3o8%2@^O@dz=%1Xf0vHZr}aDz)6pgg)2ImC@RET@`mc!*FkOSpz#?6+$Zz0@JvZ@yM1Bq;zlKF*TNZiVt0532 zikKdmL?Xj5p@2lBG-9UgXS+C}nK?I^Sj16u>qlO$&{=9W*LB;h+Q7_NY^s-2w>R`8 z=83#pH%a1$YR9z`^{k$6LqA#`;?1*};059hW7?Yf;U9>!hl~U2!jRoS@6b)E3GF*J|Sm- z$dysH3XQQKJ==Jro(B@1^XnLciGQUgUNKX7iiz`bTY4cA*KJMQ7K;hd7cg;#IF?lA zCa!1Pe&WS4lh(3l18>ywK=r)M`qyCM@596iKE=k_m$7lv1&!yNrOvKh9A)7eF~cp1 zLo%navLueV&eJ+#xV!*~*JxR{6ro7FI?-U>U#WRlSeUR=%v+QjvkRFw!Ci2;-0cqO zcV7yFlv~=WuHAmGXA)s5nYC}Mq`3fx*J`;hD(tSA!NR{q3uhf#IO*EL{|J_UxXUIx zC+#b4Bws|~eUkVUkhXoSl1hX547hYcDI(mQ`%q7kt!|Gfvh8cuBt;Q6Mjev7B1cLQ z#E2=^w)ee`V9dre$BRbj$yXQ(PsU{LB$+_w~ zFKW`WMwBBVrEd3x;}AN%j}?rQ%A4eiMo#T_?(d%XgG8n8=acQ)Iau3s00p@bBZ>pE z)JDoagQ!L&4~a@vx~dvcV_)ULPZ2#LR(f_yCx{MV)eu&_CwEIa468aXHUDn6PStqY z)|=QR?y-v zeotAG`w$(xNQPO%CO!L)0teEa+<`#e!=%=LE8d3#`Oold!v&sgsGp023+dH`$S&$S zc6%1?bx&%6LJ-H8%>WG|5N%O8IFP}A4F02OA`af8SMSk!%PU28;TUe3?9+P`D0aOI yyaz)vPhYI}5bwcz4Czb%&ZBl74$k8^=TUsl-_d+CD!s({X7qnY2s}dQVE_QkS0uRr diff --git a/doc/interpreter.eps b/doc/interpreter.eps index 2fbe308608..dd146bd485 100644 --- a/doc/interpreter.eps +++ b/doc/interpreter.eps @@ -1,11 +1,11 @@ %!PS-Adobe-2.0 EPSF-2.0 %%Title: interpreter.dia %%Creator: Dia v0.94 -%%CreationDate: Wed Apr 27 23:34:54 2005 +%%CreationDate: Wed Aug 10 01:38:18 2005 %%For: slava %%Orientation: Portrait %%Magnification: 1.0000 -%%BoundingBox: 0 0 578 592 +%%BoundingBox: 0 0 652 742 %%BeginSetup %%EndSetup %%EndComments @@ -99,249 +99,26 @@ dup 4 2 roll putinterval } bind def -/Times-Roman-latin1 - /Times-Roman findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Times-Italic-latin1 - /Times-Italic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Times-Bold-latin1 - /Times-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Times-BoldItalic-latin1 - /Times-BoldItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/AvantGarde-Book-latin1 - /AvantGarde-Book findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/AvantGarde-BookOblique-latin1 - /AvantGarde-BookOblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/AvantGarde-Demi-latin1 - /AvantGarde-Demi findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/AvantGarde-DemiOblique-latin1 - /AvantGarde-DemiOblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Bookman-Light-latin1 - /Bookman-Light findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Bookman-LightItalic-latin1 - /Bookman-LightItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Bookman-Demi-latin1 - /Bookman-Demi findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Bookman-DemiItalic-latin1 - /Bookman-DemiItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Courier-latin1 - /Courier findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Courier-Oblique-latin1 - /Courier-Oblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Courier-Bold-latin1 - /Courier-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Courier-BoldOblique-latin1 - /Courier-BoldOblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-latin1 - /Helvetica findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Oblique-latin1 - /Helvetica-Oblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Bold-latin1 - /Helvetica-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-BoldOblique-latin1 - /Helvetica-BoldOblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Narrow-latin1 - /Helvetica-Narrow findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Narrow-Oblique-latin1 - /Helvetica-Narrow-Oblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Narrow-Bold-latin1 - /Helvetica-Narrow-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Helvetica-Narrow-BoldOblique-latin1 - /Helvetica-Narrow-BoldOblique findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/NewCenturySchoolbook-Roman-latin1 - /NewCenturySchoolbook-Roman findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/NewCenturySchoolbook-Italic-latin1 - /NewCenturySchoolbook-Italic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/NewCenturySchoolbook-Bold-latin1 - /NewCenturySchoolbook-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/NewCenturySchoolbook-BoldItalic-latin1 - /NewCenturySchoolbook-BoldItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Palatino-Roman-latin1 - /Palatino-Roman findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Palatino-Italic-latin1 - /Palatino-Italic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Palatino-Bold-latin1 - /Palatino-Bold findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Palatino-BoldItalic-latin1 - /Palatino-BoldItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/Symbol-latin1 - /Symbol findfont -definefont pop -/ZapfChancery-MediumItalic-latin1 - /ZapfChancery-MediumItalic findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop -/ZapfDingbats-latin1 - /ZapfDingbats findfont - dup length dict begin - {1 index /FID ne {def} {pop pop} ifelse} forall - /Encoding isolatin1encoding def - currentdict end -definefont pop +/dpi_x 300 def +/dpi_y 300 def +/conicto { + /to_y exch def + /to_x exch def + /conic_cntrl_y exch def + /conic_cntrl_x exch def + currentpoint + /p0_y exch def + /p0_x exch def + /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def + /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def + /p2_x p1_x to_x p0_x sub 1 3 div mul add def + /p2_y p1_y to_y p0_y sub 1 3 div mul add def + p1_x p1_y p2_x p2_y to_x to_y curveto +} bind def +/start_ol { gsave 1.1 dpi_x div dup scale} bind def +/end_ol { closepath fill grestore } bind def 28.346000 -28.346000 scale -1.050000 -22.149700 translate +3.650000 -25.769040 translate %%EndProlog @@ -353,8 +130,538 @@ n 7.417767 1.333300 m 15.185534 3.275242 l 7.417767 5.217183 l -0.350000 3.27524 0 slj 0.000000 0.000000 0.000000 srgb n 7.417767 1.333300 m 15.185534 3.275242 l 7.417767 5.217183 l -0.350000 3.275242 l cp s -/Helvetica-latin1 ff 0.560000 scf sf -(Is the callframe equal to f?) dup sw 2 div 7.417767 ex sub 3.475242 m gs 1 -1 sc sh gr +gsave 3.358000 3.475242 translate 0.035278 -0.035278 scale +start_ol +448 3328 moveto +896 3328 lineto +896 0 lineto +448 0 lineto +448 3328 lineto +end_ol grestore +gsave 3.535800 3.475242 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore +gsave 3.857534 3.475242 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 4.052267 3.475242 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 4.289334 3.475242 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 4.678800 3.475242 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 5.051334 3.475242 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 5.246067 3.475242 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave 5.584734 3.475242 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 5.957267 3.475242 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 6.126600 3.475242 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 6.295934 3.475242 translate 0.035278 -0.035278 scale +start_ol +1664 3520 moveto +1664 3200 lineto +1305 3200 lineto +1075 3200 985 3100 conicto +896 3001 896 2742 conicto +896 2496 lineto +1600 2496 lineto +1600 2176 lineto +896 2176 lineto +896 0 lineto +512 0 lineto +512 2176 lineto +128 2176 lineto +128 2496 lineto +512 2496 lineto +512 2691 lineto +512 3124 703 3322 conicto +894 3520 1310 3520 conicto +1664 3520 lineto +end_ol grestore +gsave 6.507600 3.475242 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 6.761600 3.475242 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 7.134134 3.475242 translate 0.035278 -0.035278 scale +start_ol +2431 2020 moveto +2590 2296 2809 2428 conicto +3029 2560 3325 2560 conicto +3726 2560 3943 2287 conicto +4160 2014 4160 1509 conicto +4160 0 lineto +3776 0 lineto +3776 1496 lineto +3776 1874 3641 2057 conicto +3506 2240 3228 2240 conicto +2890 2240 2693 2018 conicto +2496 1796 2496 1413 conicto +2496 0 lineto +2112 0 lineto +2112 1496 lineto +2112 1876 1976 2058 conicto +1841 2240 1560 2240 conicto +1225 2240 1028 2017 conicto +832 1794 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +977 2341 1180 2450 conicto +1383 2560 1662 2560 conicto +1942 2560 2139 2422 conicto +2337 2284 2431 2020 conicto +end_ol grestore +gsave 7.726800 3.475242 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 8.099334 3.475242 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 8.294067 3.475242 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 8.666600 3.475242 translate 0.035278 -0.035278 scale +start_ol +704 1249 moveto +704 784 891 520 conicto +1079 256 1407 256 conicto +1735 256 1923 520 conicto +2112 784 2112 1249 conicto +2112 1713 1923 1976 conicto +1735 2240 1407 2240 conicto +1079 2240 891 1976 conicto +704 1713 704 1249 conicto +2112 384 moveto +1980 156 1779 46 conicto +1578 -64 1297 -64 conicto +835 -64 545 297 conicto +256 659 256 1248 conicto +256 1837 545 2198 conicto +835 2560 1297 2560 conicto +1578 2560 1779 2450 conicto +1980 2340 2112 2112 conicto +2112 2496 lineto +2496 2496 lineto +2496 -960 lineto +2112 -960 lineto +2112 384 lineto +end_ol grestore +gsave 9.056067 3.475242 translate 0.035278 -0.035278 scale +start_ol +448 986 moveto +448 2496 lineto +832 2496 lineto +832 1001 lineto +832 629 978 442 conicto +1124 256 1417 256 conicto +1768 256 1972 477 conicto +2176 699 2176 1081 conicto +2176 2496 lineto +2560 2496 lineto +2560 0 lineto +2176 0 lineto +2176 384 lineto +2022 157 1819 46 conicto +1617 -64 1349 -64 conicto +906 -64 677 203 conicto +448 471 448 986 conicto +end_ol grestore +gsave 9.445534 3.475242 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 9.818067 3.475242 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 9.987400 3.475242 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 10.182134 3.475242 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 10.419200 3.475242 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 10.791734 3.475242 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 10.986467 3.475242 translate 0.035278 -0.035278 scale +start_ol +1664 3520 moveto +1664 3200 lineto +1305 3200 lineto +1075 3200 985 3100 conicto +896 3001 896 2742 conicto +896 2496 lineto +1600 2496 lineto +1600 2176 lineto +896 2176 lineto +896 0 lineto +512 0 lineto +512 2176 lineto +128 2176 lineto +128 2496 lineto +512 2496 lineto +512 2691 lineto +512 3124 703 3322 conicto +894 3520 1310 3520 conicto +1664 3520 lineto +end_ol grestore +gsave 11.198134 3.475242 translate 0.035278 -0.035278 scale +start_ol +896 576 moveto +1344 576 lineto +1344 0 lineto +896 0 lineto +896 576 lineto +1344 896 moveto +896 896 lineto +896 1234 lineto +896 1455 961 1597 conicto +1027 1740 1239 1928 conicto +1428 2122 lineto +1553 2242 1608 2347 conicto +1664 2452 1664 2562 conicto +1664 2762 1516 2885 conicto +1368 3008 1124 3008 conicto +945 3008 742 2926 conicto +539 2845 320 2688 conicto +320 3136 lineto +531 3265 748 3328 conicto +966 3392 1197 3392 conicto +1610 3392 1861 3173 conicto +2112 2954 2112 2595 conicto +2112 2423 2032 2268 conicto +1953 2114 1755 1919 conicto +1562 1731 lineto +1465 1628 1425 1570 conicto +1385 1512 1369 1457 conicto +1357 1411 1350 1345 conicto +1344 1280 1344 1166 conicto +1344 896 lineto +end_ol grestore 1.000000 1.000000 1.000000 srgb n 13.204300 6.315370 m 13.204300 9.015370 l 18.654300 9.015370 l 18.654300 6.315370 l f 0.100000 slw @@ -363,116 +670,3627 @@ n 13.204300 6.315370 m 13.204300 9.015370 l 18.654300 9.015370 l 18.654300 6.315 0 slj 0.000000 0.000000 0.000000 srgb n 13.204300 6.315370 m 13.204300 9.015370 l 18.654300 9.015370 l 18.654300 6.315370 l cp s -/Helvetica-latin1 ff 0.560000 scf sf -(Pop call stack) dup sw 2 div 15.929300 ex sub 7.465370 m gs 1 -1 sc sh gr -(into callframe) dup sw 2 div 15.929300 ex sub 8.265370 m gs 1 -1 sc sh gr +gsave 13.846500 7.465370 translate 0.035278 -0.035278 scale +start_ol +896 2944 moveto +896 1728 lineto +1488 1728 lineto +1817 1728 1996 1886 conicto +2176 2044 2176 2337 conicto +2176 2627 1996 2785 conicto +1817 2944 1488 2944 conicto +896 2944 lineto +448 3328 moveto +1488 3328 lineto +2050 3328 2337 3076 conicto +2624 2824 2624 2337 conicto +2624 1847 2337 1595 conicto +2050 1344 1488 1344 conicto +896 1344 lineto +896 0 lineto +448 0 lineto +448 3328 lineto +end_ol grestore +gsave 14.185167 7.465370 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 14.557700 7.465370 translate 0.035278 -0.035278 scale +start_ol +832 384 moveto +832 -960 lineto +448 -960 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +963 2340 1164 2450 conicto +1366 2560 1645 2560 conicto +2108 2560 2398 2198 conicto +2688 1837 2688 1248 conicto +2688 659 2398 297 conicto +2108 -64 1645 -64 conicto +1366 -64 1164 46 conicto +963 156 832 384 conicto +2240 1249 moveto +2240 1713 2052 1976 conicto +1865 2240 1536 2240 conicto +1208 2240 1020 1976 conicto +832 1713 832 1249 conicto +832 784 1020 520 conicto +1208 256 1536 256 conicto +1865 256 2052 520 conicto +2240 784 2240 1249 conicto +end_ol grestore +gsave 14.947167 7.465370 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 15.141900 7.465370 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave 15.480567 7.465370 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 15.853100 7.465370 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 16.022433 7.465370 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 16.191767 7.465370 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 16.386500 7.465370 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore +gsave 16.708233 7.465370 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 16.945300 7.465370 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 17.317833 7.465370 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave 17.656500 7.465370 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 1419 lineto +2087 2496 lineto +2624 2496 lineto +1266 1328 lineto +2688 0 lineto +2137 0 lineto +832 1219 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 13.833800 8.265370 translate 0.035278 -0.035278 scale +start_ol +448 2496 moveto +832 2496 lineto +832 0 lineto +448 0 lineto +448 2496 lineto +448 3520 moveto +832 3520 lineto +832 3008 lineto +448 3008 lineto +448 3520 lineto +end_ol grestore +gsave 14.003133 8.265370 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 14.392600 8.265370 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 14.629667 8.265370 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 15.002200 8.265370 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 15.196933 8.265370 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave 15.535600 8.265370 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 15.908133 8.265370 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 16.077467 8.265370 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 16.246800 8.265370 translate 0.035278 -0.035278 scale +start_ol +1664 3520 moveto +1664 3200 lineto +1305 3200 lineto +1075 3200 985 3100 conicto +896 3001 896 2742 conicto +896 2496 lineto +1600 2496 lineto +1600 2176 lineto +896 2176 lineto +896 0 lineto +512 0 lineto +512 2176 lineto +128 2176 lineto +128 2496 lineto +512 2496 lineto +512 2691 lineto +512 3124 703 3322 conicto +894 3520 1310 3520 conicto +1664 3520 lineto +end_ol grestore +gsave 16.458467 8.265370 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 16.712467 8.265370 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 17.085000 8.265370 translate 0.035278 -0.035278 scale +start_ol +2431 2020 moveto +2590 2296 2809 2428 conicto +3029 2560 3325 2560 conicto +3726 2560 3943 2287 conicto +4160 2014 4160 1509 conicto +4160 0 lineto +3776 0 lineto +3776 1496 lineto +3776 1874 3641 2057 conicto +3506 2240 3228 2240 conicto +2890 2240 2693 2018 conicto +2496 1796 2496 1413 conicto +2496 0 lineto +2112 0 lineto +2112 1496 lineto +2112 1876 1976 2058 conicto +1841 2240 1560 2240 conicto +1225 2240 1028 2017 conicto +832 1794 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +977 2341 1180 2450 conicto +1383 2560 1662 2560 conicto +1942 2560 2139 2422 conicto +2337 2284 2431 2020 conicto +end_ol grestore +gsave 17.677667 8.265370 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore 1.000000 1.000000 1.000000 srgb -n 7.430363 7.787500 m 14.488729 9.949211 l 7.430363 12.110922 l 0.371996 9.949211 l ef +n 7.430363 7.398875 m 15.757659 9.949211 l 7.430363 12.499548 l -0.896934 9.949211 l ef 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb -n 7.430363 7.787500 m 14.488729 9.949211 l 7.430363 12.110922 l 0.371996 9.949211 l cp s -/Helvetica-latin1 ff 0.560000 scf sf -(Is the car of the) dup sw 2 div 7.430363 ex sub 9.749211 m gs 1 -1 sc sh gr -(callframe a word?) dup sw 2 div 7.430363 ex sub 10.549211 m gs 1 -1 sc sh gr +n 7.430363 7.398875 m 15.757659 9.949211 l 7.430363 12.499548 l -0.896934 9.949211 l cp s +gsave 3.937863 9.749211 translate 0.035278 -0.035278 scale +start_ol +128 3328 moveto +584 3328 lineto +1286 515 lineto +1985 3328 lineto +2493 3328 lineto +3194 515 lineto +3893 3328 lineto +4352 3328 lineto +3514 0 lineto +2946 0 lineto +2242 2889 lineto +1531 0 lineto +964 0 lineto +128 3328 lineto +end_ol grestore +gsave 4.538996 9.749211 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 4.928463 9.749211 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 5.300996 9.749211 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 5.538063 9.749211 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 5.732796 9.749211 translate 0.035278 -0.035278 scale +start_ol +448 2496 moveto +832 2496 lineto +832 0 lineto +448 0 lineto +448 2496 lineto +448 3520 moveto +832 3520 lineto +832 3008 lineto +448 3008 lineto +448 3520 lineto +end_ol grestore +gsave 5.902129 9.749211 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore +gsave 6.223863 9.749211 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 6.418596 9.749211 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 6.655663 9.749211 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 7.045129 9.749211 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 7.417663 9.749211 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 7.612396 9.749211 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 7.849463 9.749211 translate 0.035278 -0.035278 scale +start_ol +1477 -262 moveto +1305 -695 1142 -827 conicto +980 -960 707 -960 conicto +384 -960 lineto +384 -640 lineto +622 -640 lineto +789 -640 881 -555 conicto +974 -471 1085 -156 conicto +1159 33 lineto +128 2496 lineto +590 2496 lineto +1361 544 lineto +2131 2496 lineto +2560 2496 lineto +1477 -262 lineto +end_ol grestore +gsave 8.213529 9.749211 translate 0.035278 -0.035278 scale +start_ol +832 384 moveto +832 -960 lineto +448 -960 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +963 2340 1164 2450 conicto +1366 2560 1645 2560 conicto +2108 2560 2398 2198 conicto +2688 1837 2688 1248 conicto +2688 659 2398 297 conicto +2108 -64 1645 -64 conicto +1366 -64 1164 46 conicto +963 156 832 384 conicto +2240 1249 moveto +2240 1713 2052 1976 conicto +1865 2240 1536 2240 conicto +1208 2240 1020 1976 conicto +832 1713 832 1249 conicto +832 784 1020 520 conicto +1208 256 1536 256 conicto +1865 256 2052 520 conicto +2240 784 2240 1249 conicto +end_ol grestore +gsave 8.602996 9.749211 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 8.975529 9.749211 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 9.170263 9.749211 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 9.542796 9.749211 translate 0.035278 -0.035278 scale +start_ol +1664 3520 moveto +1664 3200 lineto +1305 3200 lineto +1075 3200 985 3100 conicto +896 3001 896 2742 conicto +896 2496 lineto +1600 2496 lineto +1600 2176 lineto +896 2176 lineto +896 0 lineto +512 0 lineto +512 2176 lineto +128 2176 lineto +128 2496 lineto +512 2496 lineto +512 2691 lineto +512 3124 703 3322 conicto +894 3520 1310 3520 conicto +1664 3520 lineto +end_ol grestore +gsave 9.754463 9.749211 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 9.949196 9.749211 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 10.186263 9.749211 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 10.575729 9.749211 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 4.200329 10.549211 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave 4.538996 10.549211 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 4.911529 10.549211 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 5.165529 10.549211 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 5.360263 10.549211 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 5.732796 10.549211 translate 0.035278 -0.035278 scale +start_ol +1664 3520 moveto +1664 3200 lineto +1305 3200 lineto +1075 3200 985 3100 conicto +896 3001 896 2742 conicto +896 2496 lineto +1600 2496 lineto +1600 2176 lineto +896 2176 lineto +896 0 lineto +512 0 lineto +512 2176 lineto +128 2176 lineto +128 2496 lineto +512 2496 lineto +512 2691 lineto +512 3124 703 3322 conicto +894 3520 1310 3520 conicto +1664 3520 lineto +end_ol grestore +gsave 5.944463 10.549211 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 6.139196 10.549211 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 6.376263 10.549211 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 6.765729 10.549211 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 7.138263 10.549211 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 7.332996 10.549211 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave 7.671663 10.549211 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 8.044196 10.549211 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 8.213529 10.549211 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 8.382863 10.549211 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 8.577596 10.549211 translate 0.035278 -0.035278 scale +start_ol +1664 3520 moveto +1664 3200 lineto +1305 3200 lineto +1075 3200 985 3100 conicto +896 3001 896 2742 conicto +896 2496 lineto +1600 2496 lineto +1600 2176 lineto +896 2176 lineto +896 0 lineto +512 0 lineto +512 2176 lineto +128 2176 lineto +128 2496 lineto +512 2496 lineto +512 2691 lineto +512 3124 703 3322 conicto +894 3520 1310 3520 conicto +1664 3520 lineto +end_ol grestore +gsave 8.789263 10.549211 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 9.043263 10.549211 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 9.415796 10.549211 translate 0.035278 -0.035278 scale +start_ol +2431 2020 moveto +2590 2296 2809 2428 conicto +3029 2560 3325 2560 conicto +3726 2560 3943 2287 conicto +4160 2014 4160 1509 conicto +4160 0 lineto +3776 0 lineto +3776 1496 lineto +3776 1874 3641 2057 conicto +3506 2240 3228 2240 conicto +2890 2240 2693 2018 conicto +2496 1796 2496 1413 conicto +2496 0 lineto +2112 0 lineto +2112 1496 lineto +2112 1876 1976 2058 conicto +1841 2240 1560 2240 conicto +1225 2240 1028 2017 conicto +832 1794 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +977 2341 1180 2450 conicto +1383 2560 1662 2560 conicto +1942 2560 2139 2422 conicto +2337 2284 2431 2020 conicto +end_ol grestore +gsave 10.008463 10.549211 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 10.380996 10.549211 translate 0.035278 -0.035278 scale +start_ol +896 576 moveto +1344 576 lineto +1344 0 lineto +896 0 lineto +896 576 lineto +1344 896 moveto +896 896 lineto +896 1234 lineto +896 1455 961 1597 conicto +1027 1740 1239 1928 conicto +1428 2122 lineto +1553 2242 1608 2347 conicto +1664 2452 1664 2562 conicto +1664 2762 1516 2885 conicto +1368 3008 1124 3008 conicto +945 3008 742 2926 conicto +539 2845 320 2688 conicto +320 3136 lineto +531 3265 748 3328 conicto +966 3392 1197 3392 conicto +1610 3392 1861 3173 conicto +2112 2954 2112 2595 conicto +2112 2423 2032 2268 conicto +1953 2114 1755 1919 conicto +1562 1731 lineto +1465 1628 1425 1570 conicto +1385 1512 1369 1457 conicto +1357 1411 1350 1345 conicto +1344 1280 1344 1166 conicto +1344 896 lineto +end_ol grestore 1.000000 1.000000 1.000000 srgb -n 1.481360 13.637600 m 1.481360 16.337600 l 6.331360 16.337600 l 6.331360 13.637600 l f +n -3.318640 14.137600 m -3.318640 18.437600 l 3.431360 18.437600 l 3.431360 14.137600 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb -n 1.481360 13.637600 m 1.481360 16.337600 l 6.331360 16.337600 l 6.331360 13.637600 l cp s -/Helvetica-latin1 ff 0.560000 scf sf -(Push car on) dup sw 2 div 3.906360 ex sub 14.787600 m gs 1 -1 sc sh gr -(data stack) dup sw 2 div 3.906360 ex sub 15.587600 m gs 1 -1 sc sh gr +n -3.318640 14.137600 m -3.318640 18.437600 l 3.431360 18.437600 l 3.431360 14.137600 l cp s +gsave -2.678373 15.287600 translate 0.035278 -0.035278 scale +start_ol +448 3328 moveto +2560 3328 lineto +2560 2944 lineto +896 2944 lineto +896 1984 lineto +2496 1984 lineto +2496 1600 lineto +896 1600 lineto +896 384 lineto +2624 384 lineto +2624 0 lineto +448 0 lineto +448 3328 lineto +end_ol grestore +gsave -2.288907 15.287600 translate 0.035278 -0.035278 scale +start_ol +2496 2496 moveto +1589 1282 lineto +2560 0 lineto +2067 0 lineto +1327 981 lineto +607 0 lineto +128 0 lineto +1085 1306 lineto +192 2496 lineto +678 2496 lineto +1344 1607 lineto +2010 2496 lineto +2496 2496 lineto +end_ol grestore +gsave -1.941773 15.287600 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave -1.569240 15.287600 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave -1.230573 15.287600 translate 0.035278 -0.035278 scale +start_ol +448 986 moveto +448 2496 lineto +832 2496 lineto +832 1001 lineto +832 629 978 442 conicto +1124 256 1417 256 conicto +1768 256 1972 477 conicto +2176 699 2176 1081 conicto +2176 2496 lineto +2560 2496 lineto +2560 0 lineto +2176 0 lineto +2176 384 lineto +2022 157 1819 46 conicto +1617 -64 1349 -64 conicto +906 -64 677 203 conicto +448 471 448 986 conicto +end_ol grestore +gsave -0.841107 15.287600 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave -0.604040 15.287600 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave -0.231507 15.287600 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave -0.036773 15.287600 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 0.200293 15.287600 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 0.589760 15.287600 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 0.962293 15.287600 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 1.157027 15.287600 translate 0.035278 -0.035278 scale +start_ol +192 2496 moveto +607 2496 lineto +1126 549 lineto +1643 2496 lineto +2133 2496 lineto +2652 549 lineto +3169 2496 lineto +3584 2496 lineto +2923 0 lineto +2433 0 lineto +1890 2046 lineto +1343 0 lineto +853 0 lineto +192 2496 lineto +end_ol grestore +gsave 1.656560 15.287600 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 2.029093 15.287600 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 2.274627 15.287600 translate 0.035278 -0.035278 scale +start_ol +2112 2112 moveto +2112 3520 lineto +2496 3520 lineto +2496 0 lineto +2112 0 lineto +2112 384 lineto +1980 156 1779 46 conicto +1578 -64 1297 -64 conicto +835 -64 545 297 conicto +256 659 256 1248 conicto +256 1837 545 2198 conicto +835 2560 1297 2560 conicto +1578 2560 1779 2450 conicto +1980 2340 2112 2112 conicto +704 1249 moveto +704 784 891 520 conicto +1079 256 1407 256 conicto +1735 256 1923 520 conicto +2112 784 2112 1249 conicto +2112 1713 1923 1976 conicto +1735 2240 1407 2240 conicto +1079 2240 891 1976 conicto +704 1713 704 1249 conicto +end_ol grestore +gsave 2.664093 15.287600 translate 0.035278 -0.035278 scale +start_ol +512 576 moveto +960 576 lineto +960 0 lineto +512 0 lineto +512 576 lineto +512 2368 moveto +960 2368 lineto +960 1792 lineto +512 1792 lineto +512 2368 lineto +end_ol grestore +gsave -2.288907 16.087600 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave -1.950240 16.087600 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave -1.577707 16.087600 translate 0.035278 -0.035278 scale +start_ol +2431 2020 moveto +2590 2296 2809 2428 conicto +3029 2560 3325 2560 conicto +3726 2560 3943 2287 conicto +4160 2014 4160 1509 conicto +4160 0 lineto +3776 0 lineto +3776 1496 lineto +3776 1874 3641 2057 conicto +3506 2240 3228 2240 conicto +2890 2240 2693 2018 conicto +2496 1796 2496 1413 conicto +2496 0 lineto +2112 0 lineto +2112 1496 lineto +2112 1876 1976 2058 conicto +1841 2240 1560 2240 conicto +1225 2240 1028 2017 conicto +832 1794 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +977 2341 1180 2450 conicto +1383 2560 1662 2560 conicto +1942 2560 2139 2422 conicto +2337 2284 2431 2020 conicto +end_ol grestore +gsave -0.985040 16.087600 translate 0.035278 -0.035278 scale +start_ol +832 384 moveto +832 -960 lineto +448 -960 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +963 2340 1164 2450 conicto +1366 2560 1645 2560 conicto +2108 2560 2398 2198 conicto +2688 1837 2688 1248 conicto +2688 659 2398 297 conicto +2108 -64 1645 -64 conicto +1366 -64 1164 46 conicto +963 156 832 384 conicto +2240 1249 moveto +2240 1713 2052 1976 conicto +1865 2240 1536 2240 conicto +1208 2240 1020 1976 conicto +832 1713 832 1249 conicto +832 784 1020 520 conicto +1208 256 1536 256 conicto +1865 256 2052 520 conicto +2240 784 2240 1249 conicto +end_ol grestore +gsave -0.595573 16.087600 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave -0.223040 16.087600 translate 0.035278 -0.035278 scale +start_ol +448 986 moveto +448 2496 lineto +832 2496 lineto +832 1001 lineto +832 629 978 442 conicto +1124 256 1417 256 conicto +1768 256 1972 477 conicto +2176 699 2176 1081 conicto +2176 2496 lineto +2560 2496 lineto +2560 0 lineto +2176 0 lineto +2176 384 lineto +2022 157 1819 46 conicto +1617 -64 1349 -64 conicto +906 -64 677 203 conicto +448 471 448 986 conicto +end_ol grestore +gsave 0.166427 16.087600 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 0.555893 16.087600 translate 0.035278 -0.035278 scale +start_ol +2112 2112 moveto +2112 3520 lineto +2496 3520 lineto +2496 0 lineto +2112 0 lineto +2112 384 lineto +1980 156 1779 46 conicto +1578 -64 1297 -64 conicto +835 -64 545 297 conicto +256 659 256 1248 conicto +256 1837 545 2198 conicto +835 2560 1297 2560 conicto +1578 2560 1779 2450 conicto +1980 2340 2112 2112 conicto +704 1249 moveto +704 784 891 520 conicto +1079 256 1407 256 conicto +1735 256 1923 520 conicto +2112 784 2112 1249 conicto +2112 1713 1923 1976 conicto +1735 2240 1407 2240 conicto +1079 2240 891 1976 conicto +704 1713 704 1249 conicto +end_ol grestore +gsave 0.945360 16.087600 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 1.140093 16.087600 translate 0.035278 -0.035278 scale +start_ol +2112 2112 moveto +2112 3520 lineto +2496 3520 lineto +2496 0 lineto +2112 0 lineto +2112 384 lineto +1980 156 1779 46 conicto +1578 -64 1297 -64 conicto +835 -64 545 297 conicto +256 659 256 1248 conicto +256 1837 545 2198 conicto +835 2560 1297 2560 conicto +1578 2560 1779 2450 conicto +1980 2340 2112 2112 conicto +704 1249 moveto +704 784 891 520 conicto +1079 256 1407 256 conicto +1735 256 1923 520 conicto +2112 784 2112 1249 conicto +2112 1713 1923 1976 conicto +1735 2240 1407 2240 conicto +1079 2240 891 1976 conicto +704 1713 704 1249 conicto +end_ol grestore +gsave 1.529560 16.087600 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 1.902093 16.087600 translate 0.035278 -0.035278 scale +start_ol +1664 3520 moveto +1664 3200 lineto +1305 3200 lineto +1075 3200 985 3100 conicto +896 3001 896 2742 conicto +896 2496 lineto +1600 2496 lineto +1600 2176 lineto +896 2176 lineto +896 0 lineto +512 0 lineto +512 2176 lineto +128 2176 lineto +128 2496 lineto +512 2496 lineto +512 2691 lineto +512 3124 703 3322 conicto +894 3520 1310 3520 conicto +1664 3520 lineto +end_ol grestore +gsave 2.113760 16.087600 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore +gsave -1.192473 16.887600 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore +gsave -0.870740 16.887600 translate 0.035278 -0.035278 scale +start_ol +1477 -262 moveto +1305 -695 1142 -827 conicto +980 -960 707 -960 conicto +384 -960 lineto +384 -640 lineto +622 -640 lineto +789 -640 881 -555 conicto +974 -471 1085 -156 conicto +1159 33 lineto +128 2496 lineto +590 2496 lineto +1361 544 lineto +2131 2496 lineto +2560 2496 lineto +1477 -262 lineto +end_ol grestore +gsave -0.506673 16.887600 translate 0.035278 -0.035278 scale +start_ol +2431 2020 moveto +2590 2296 2809 2428 conicto +3029 2560 3325 2560 conicto +3726 2560 3943 2287 conicto +4160 2014 4160 1509 conicto +4160 0 lineto +3776 0 lineto +3776 1496 lineto +3776 1874 3641 2057 conicto +3506 2240 3228 2240 conicto +2890 2240 2693 2018 conicto +2496 1796 2496 1413 conicto +2496 0 lineto +2112 0 lineto +2112 1496 lineto +2112 1876 1976 2058 conicto +1841 2240 1560 2240 conicto +1225 2240 1028 2017 conicto +832 1794 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +977 2341 1180 2450 conicto +1383 2560 1662 2560 conicto +1942 2560 2139 2422 conicto +2337 2284 2431 2020 conicto +end_ol grestore +gsave 0.085993 16.887600 translate 0.035278 -0.035278 scale +start_ol +2240 1249 moveto +2240 1713 2052 1976 conicto +1865 2240 1536 2240 conicto +1208 2240 1020 1976 conicto +832 1713 832 1249 conicto +832 784 1020 520 conicto +1208 256 1536 256 conicto +1865 256 2052 520 conicto +2240 784 2240 1249 conicto +832 2112 moveto +963 2340 1164 2450 conicto +1366 2560 1645 2560 conicto +2108 2560 2398 2198 conicto +2688 1837 2688 1248 conicto +2688 659 2398 297 conicto +2108 -64 1645 -64 conicto +1366 -64 1164 46 conicto +963 156 832 384 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +end_ol grestore +gsave 0.475460 16.887600 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 0.847993 16.887600 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 1.017327 16.887600 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore +gsave -1.446473 17.687600 translate 0.035278 -0.035278 scale +start_ol +832 384 moveto +832 -960 lineto +448 -960 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +963 2340 1164 2450 conicto +1366 2560 1645 2560 conicto +2108 2560 2398 2198 conicto +2688 1837 2688 1248 conicto +2688 659 2398 297 conicto +2108 -64 1645 -64 conicto +1366 -64 1164 46 conicto +963 156 832 384 conicto +2240 1249 moveto +2240 1713 2052 1976 conicto +1865 2240 1536 2240 conicto +1208 2240 1020 1976 conicto +832 1713 832 1249 conicto +832 784 1020 520 conicto +1208 256 1536 256 conicto +1865 256 2052 520 conicto +2240 784 2240 1249 conicto +end_ol grestore +gsave -1.057007 17.687600 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave -0.803007 17.687600 translate 0.035278 -0.035278 scale +start_ol +448 2496 moveto +832 2496 lineto +832 0 lineto +448 0 lineto +448 2496 lineto +448 3520 moveto +832 3520 lineto +832 3008 lineto +448 3008 lineto +448 3520 lineto +end_ol grestore +gsave -0.633673 17.687600 translate 0.035278 -0.035278 scale +start_ol +2431 2020 moveto +2590 2296 2809 2428 conicto +3029 2560 3325 2560 conicto +3726 2560 3943 2287 conicto +4160 2014 4160 1509 conicto +4160 0 lineto +3776 0 lineto +3776 1496 lineto +3776 1874 3641 2057 conicto +3506 2240 3228 2240 conicto +2890 2240 2693 2018 conicto +2496 1796 2496 1413 conicto +2496 0 lineto +2112 0 lineto +2112 1496 lineto +2112 1876 1976 2058 conicto +1841 2240 1560 2240 conicto +1225 2240 1028 2017 conicto +832 1794 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +977 2341 1180 2450 conicto +1383 2560 1662 2560 conicto +1942 2560 2139 2422 conicto +2337 2284 2431 2020 conicto +end_ol grestore +gsave -0.041007 17.687600 translate 0.035278 -0.035278 scale +start_ol +448 2496 moveto +832 2496 lineto +832 0 lineto +448 0 lineto +448 2496 lineto +448 3520 moveto +832 3520 lineto +832 3008 lineto +448 3008 lineto +448 3520 lineto +end_ol grestore +gsave 0.128327 17.687600 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 0.365393 17.687600 translate 0.035278 -0.035278 scale +start_ol +448 2496 moveto +832 2496 lineto +832 0 lineto +448 0 lineto +448 2496 lineto +448 3520 moveto +832 3520 lineto +832 3008 lineto +448 3008 lineto +448 3520 lineto +end_ol grestore +gsave 0.534727 17.687600 translate 0.035278 -0.035278 scale +start_ol +128 2496 moveto +563 2496 lineto +1344 401 lineto +2125 2496 lineto +2560 2496 lineto +1623 0 lineto +1065 0 lineto +128 2496 lineto +end_ol grestore +gsave 0.898793 17.687600 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 1.271327 17.687600 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore 1.000000 1.000000 1.000000 srgb -n 8.004240 12.950000 m 8.004240 17.250000 l 13.954240 17.250000 l 13.954240 12.950000 l f +n 11.604240 14.750000 m 11.604240 17.450000 l 17.200000 17.450000 l 17.200000 14.750000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb -n 8.004240 12.950000 m 8.004240 17.250000 l 13.954240 17.250000 l 13.954240 12.950000 l cp s -/Helvetica-latin1 ff 0.560000 scf sf -(Execute car:) dup sw 2 div 10.979240 ex sub 14.100000 m gs 1 -1 sc sh gr -(compound defs) dup sw 2 div 10.979240 ex sub 14.900000 m gs 1 -1 sc sh gr -(symbols) dup sw 2 div 10.979240 ex sub 15.700000 m gs 1 -1 sc sh gr -(primitives) dup sw 2 div 10.979240 ex sub 16.500000 m gs 1 -1 sc sh gr +n 11.604240 14.750000 m 11.604240 17.450000 l 17.200000 17.450000 l 17.200000 14.750000 l cp s +gsave 12.734187 15.900000 translate 0.035278 -0.035278 scale +start_ol +896 2944 moveto +896 1728 lineto +1488 1728 lineto +1817 1728 1996 1886 conicto +2176 2044 2176 2337 conicto +2176 2627 1996 2785 conicto +1817 2944 1488 2944 conicto +896 2944 lineto +448 3328 moveto +1488 3328 lineto +2050 3328 2337 3076 conicto +2624 2824 2624 2337 conicto +2624 1847 2337 1595 conicto +2050 1344 1488 1344 conicto +896 1344 lineto +896 0 lineto +448 0 lineto +448 3328 lineto +end_ol grestore +gsave 13.089787 15.900000 translate 0.035278 -0.035278 scale +start_ol +448 986 moveto +448 2496 lineto +832 2496 lineto +832 1001 lineto +832 629 978 442 conicto +1124 256 1417 256 conicto +1768 256 1972 477 conicto +2176 699 2176 1081 conicto +2176 2496 lineto +2560 2496 lineto +2560 0 lineto +2176 0 lineto +2176 384 lineto +2022 157 1819 46 conicto +1617 -64 1349 -64 conicto +906 -64 677 203 conicto +448 471 448 986 conicto +end_ol grestore +gsave 13.479253 15.900000 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore +gsave 13.800987 15.900000 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 14.190453 15.900000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 14.385187 15.900000 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 14.554520 15.900000 translate 0.035278 -0.035278 scale +start_ol +448 2496 moveto +832 2496 lineto +832 0 lineto +448 0 lineto +448 2496 lineto +448 3520 moveto +832 3520 lineto +832 3008 lineto +448 3008 lineto +448 3520 lineto +end_ol grestore +gsave 14.723853 15.900000 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 14.960920 15.900000 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 15.333453 15.900000 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 15.587453 15.900000 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 15.959987 15.900000 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 12.327787 16.700000 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 12.700320 16.700000 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 13.089787 16.700000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 13.284520 16.700000 translate 0.035278 -0.035278 scale +start_ol +2112 2112 moveto +2112 3520 lineto +2496 3520 lineto +2496 0 lineto +2112 0 lineto +2112 384 lineto +1980 156 1779 46 conicto +1578 -64 1297 -64 conicto +835 -64 545 297 conicto +256 659 256 1248 conicto +256 1837 545 2198 conicto +835 2560 1297 2560 conicto +1578 2560 1779 2450 conicto +1980 2340 2112 2112 conicto +704 1249 moveto +704 784 891 520 conicto +1079 256 1407 256 conicto +1735 256 1923 520 conicto +2112 784 2112 1249 conicto +2112 1713 1923 1976 conicto +1735 2240 1407 2240 conicto +1079 2240 891 1976 conicto +704 1713 704 1249 conicto +end_ol grestore +gsave 13.673987 16.700000 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 14.046520 16.700000 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 14.283587 16.700000 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 14.656120 16.700000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 14.850853 16.700000 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore +gsave 15.172587 16.700000 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 15.409653 16.700000 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 15.782187 16.700000 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave 16.120853 16.700000 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 1419 lineto +2087 2496 lineto +2624 2496 lineto +1266 1328 lineto +2688 0 lineto +2137 0 lineto +832 1219 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore 1.000000 1.000000 1.000000 srgb -n 4.025000 18.750000 m 4.025000 21.450000 l 10.275000 21.450000 l 10.275000 18.750000 l f +n 4.375000 21.200000 m 4.375000 23.900000 l 10.625000 23.900000 l 10.625000 21.200000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb -n 4.025000 18.750000 m 4.025000 21.450000 l 10.275000 21.450000 l 10.275000 18.750000 l cp s -/Helvetica-latin1 ff 0.560000 scf sf -(Set call frame to) dup sw 2 div 7.150000 ex sub 19.900000 m gs 1 -1 sc sh gr -(call frame's cdr) dup sw 2 div 7.150000 ex sub 20.700000 m gs 1 -1 sc sh gr +n 4.375000 21.200000 m 4.375000 23.900000 l 10.625000 23.900000 l 10.625000 21.200000 l cp s +gsave 4.993867 22.350000 translate 0.035278 -0.035278 scale +start_ol +2496 3200 moveto +2496 2752 lineto +2234 2882 2001 2945 conicto +1768 3008 1552 3008 conicto +1175 3008 971 2863 conicto +768 2718 768 2452 conicto +768 2228 905 2113 conicto +1042 1999 1426 1929 conicto +1708 1873 lineto +2210 1778 2449 1540 conicto +2688 1303 2688 903 conicto +2688 427 2358 181 conicto +2029 -64 1392 -64 conicto +1152 -64 881 -15 conicto +610 33 320 128 conicto +320 576 lineto +603 448 875 384 conicto +1147 320 1409 320 conicto +1807 320 2023 465 conicto +2240 610 2240 878 conicto +2240 1113 2084 1245 conicto +1928 1378 1572 1444 conicto +1288 1497 lineto +776 1599 548 1817 conicto +320 2035 320 2424 conicto +320 2874 636 3133 conicto +952 3392 1507 3392 conicto +1744 3392 1991 3344 conicto +2238 3297 2496 3200 conicto +end_ol grestore +gsave 5.383333 22.350000 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 5.755867 22.350000 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 5.992933 22.350000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 6.187667 22.350000 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave 6.526333 22.350000 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 6.898867 22.350000 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 7.068200 22.350000 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 7.237533 22.350000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 7.432267 22.350000 translate 0.035278 -0.035278 scale +start_ol +1664 3520 moveto +1664 3200 lineto +1305 3200 lineto +1075 3200 985 3100 conicto +896 3001 896 2742 conicto +896 2496 lineto +1600 2496 lineto +1600 2176 lineto +896 2176 lineto +896 0 lineto +512 0 lineto +512 2176 lineto +128 2176 lineto +128 2496 lineto +512 2496 lineto +512 2691 lineto +512 3124 703 3322 conicto +894 3520 1310 3520 conicto +1664 3520 lineto +end_ol grestore +gsave 7.643933 22.350000 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 7.897933 22.350000 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 8.270467 22.350000 translate 0.035278 -0.035278 scale +start_ol +2431 2020 moveto +2590 2296 2809 2428 conicto +3029 2560 3325 2560 conicto +3726 2560 3943 2287 conicto +4160 2014 4160 1509 conicto +4160 0 lineto +3776 0 lineto +3776 1496 lineto +3776 1874 3641 2057 conicto +3506 2240 3228 2240 conicto +2890 2240 2693 2018 conicto +2496 1796 2496 1413 conicto +2496 0 lineto +2112 0 lineto +2112 1496 lineto +2112 1876 1976 2058 conicto +1841 2240 1560 2240 conicto +1225 2240 1028 2017 conicto +832 1794 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +977 2341 1180 2450 conicto +1383 2560 1662 2560 conicto +1942 2560 2139 2422 conicto +2337 2284 2431 2020 conicto +end_ol grestore +gsave 8.863133 22.350000 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 9.235667 22.350000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 9.430400 22.350000 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 9.667467 22.350000 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 5.142033 23.150000 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave 5.480700 23.150000 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 5.853233 23.150000 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 6.022567 23.150000 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 6.191900 23.150000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 6.386633 23.150000 translate 0.035278 -0.035278 scale +start_ol +1664 3520 moveto +1664 3200 lineto +1305 3200 lineto +1075 3200 985 3100 conicto +896 3001 896 2742 conicto +896 2496 lineto +1600 2496 lineto +1600 2176 lineto +896 2176 lineto +896 0 lineto +512 0 lineto +512 2176 lineto +128 2176 lineto +128 2496 lineto +512 2496 lineto +512 2691 lineto +512 3124 703 3322 conicto +894 3520 1310 3520 conicto +1664 3520 lineto +end_ol grestore +gsave 6.598300 23.150000 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 6.852300 23.150000 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 7.224833 23.150000 translate 0.035278 -0.035278 scale +start_ol +2431 2020 moveto +2590 2296 2809 2428 conicto +3029 2560 3325 2560 conicto +3726 2560 3943 2287 conicto +4160 2014 4160 1509 conicto +4160 0 lineto +3776 0 lineto +3776 1496 lineto +3776 1874 3641 2057 conicto +3506 2240 3228 2240 conicto +2890 2240 2693 2018 conicto +2496 1796 2496 1413 conicto +2496 0 lineto +2112 0 lineto +2112 1496 lineto +2112 1876 1976 2058 conicto +1841 2240 1560 2240 conicto +1225 2240 1028 2017 conicto +832 1794 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +977 2341 1180 2450 conicto +1383 2560 1662 2560 conicto +1942 2560 2139 2422 conicto +2337 2284 2431 2020 conicto +end_ol grestore +gsave 7.817500 23.150000 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 8.190033 23.150000 translate 0.035278 -0.035278 scale +start_ol +832 3328 moveto +832 2048 lineto +448 2048 lineto +448 3328 lineto +832 3328 lineto +end_ol grestore +gsave 8.359367 23.150000 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore +gsave 8.681100 23.150000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 8.875833 23.150000 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave 9.214500 23.150000 translate 0.035278 -0.035278 scale +start_ol +2112 2112 moveto +2112 3520 lineto +2496 3520 lineto +2496 0 lineto +2112 0 lineto +2112 384 lineto +1980 156 1779 46 conicto +1578 -64 1297 -64 conicto +835 -64 545 297 conicto +256 659 256 1248 conicto +256 1837 545 2198 conicto +835 2560 1297 2560 conicto +1578 2560 1779 2450 conicto +1980 2340 2112 2112 conicto +704 1249 moveto +704 784 891 520 conicto +1079 256 1407 256 conicto +1735 256 1923 520 conicto +2112 784 2112 1249 conicto +2112 1713 1923 1976 conicto +1735 2240 1407 2240 conicto +1079 2240 891 1976 conicto +704 1713 704 1249 conicto +end_ol grestore +gsave 9.603967 23.150000 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc -n 7.417770 5.217190 m 7.429265 7.563896 l s +n 7.417770 5.217190 m 7.429072 7.175272 l s 0.100000 slw [] 0 sd 0 slj 0 slc -n 7.177366 7.176928 m 7.429812 7.675698 l 7.677360 7.174479 l s +n 7.176836 6.788525 m 7.429717 7.287073 l 7.676827 6.785639 l s 0.100000 slw [] 0 sd [] 0 sd 0 slc -n 10.959500 11.030100 m 10.976941 12.726405 l s +n 11.594011 11.224379 m 14.262809 14.575093 l s 0.100000 slw [] 0 sd 0 slj 0 slc -n 10.722963 12.340799 m 10.978091 12.838203 l 11.222937 12.335659 l s +n 13.825404 14.427197 m 14.332464 14.662547 l 14.216508 14.115688 l s 0.100000 slw [] 0 sd [] 0 sd 0 slc -n 3.901180 11.030100 m 3.905916 13.413994 l s +n 3.266714 11.224379 m 0.221951 13.987335 l s 0.100000 slw [] 0 sd 0 slj 0 slc -n 3.655145 13.026294 m 3.906138 13.525797 l 4.155144 13.025301 l s +n 0.341427 13.541328 m 0.139156 14.062468 l 0.677430 13.911602 l s 0.100000 slw [] 0 sd [] 0 sd 0 slc -n 10.979240 17.250000 m 8.898975 18.626602 l s +n 14.402120 17.450000 m 9.245488 21.071488 l s 0.100000 slw [] 0 sd 0 slj 0 slc -n 9.084744 18.203888 m 8.805737 18.688301 l 9.360671 18.620859 l s +n 9.419487 20.643795 m 9.153994 21.135744 l 9.706849 21.052969 l s 0.100000 slw [] 0 sd [] 0 sd 0 slc -n 3.906360 16.337600 m 5.459655 18.566545 l s +n 0.056360 18.437600 m 5.735108 21.104935 l s 0.100000 slw [] 0 sd 0 slj 0 slc -n 5.032599 18.390990 m 5.523578 18.658273 l 5.442816 18.105120 l s +n 5.277455 21.166178 m 5.836304 21.152468 l 5.490026 20.713615 l s 0.100000 slw [] 0 sd [] 0 sd 0 slj 0 slc -n 7.150000 21.450000 m 7.150000 22.099700 l -1.000000 22.099700 l -1.000000 1.319040 l 3.533880 1.319040 l 3.533880 2.080663 l s +n 7.500000 23.900000 m 7.500000 25.719040 l -3.600000 25.719040 l -3.600000 -0.330960 l 7.417767 -0.330960 l 7.417767 1.109693 l s 0.100000 slw [] 0 sd 0 slj 0 slc -n 3.283880 1.692467 m 3.533880 2.192467 l 3.783880 1.692467 l s +n 7.167767 0.721497 m 7.417767 1.221497 l 7.667767 0.721497 l s 0.100000 slw [] 0 sd [] 0 sd @@ -494,12 +4312,1149 @@ n 15.929300 9.015370 m 15.929300 9.639660 l 19.267400 9.639660 l 19.267400 1.319 0 slj 0 slc n 11.051700 1.692467 m 11.301700 2.192467 l 11.551700 1.692467 l s -/Helvetica-latin1 ff 0.560000 scf sf -(No) 6.450000 6.519040 m gs 1 -1 sc sh gr -/Helvetica-latin1 ff 0.560000 scf sf -(Yes) 13.350000 5.119040 m gs 1 -1 sc sh gr -/Helvetica-latin1 ff 0.560000 scf sf -(Yes) 11.300000 12.019040 m gs 1 -1 sc sh gr -/Helvetica-latin1 ff 0.560000 scf sf -(No) 2.750000 12.069040 m gs 1 -1 sc sh gr +gsave 6.450000 6.519040 translate 0.035278 -0.035278 scale +start_ol +448 3328 moveto +1067 3328 lineto +2560 544 lineto +2560 3328 lineto +3008 3328 lineto +3008 0 lineto +2389 0 lineto +896 2784 lineto +896 0 lineto +448 0 lineto +448 3328 lineto +end_ol grestore +gsave 6.907200 6.519040 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 13.350000 5.119040 translate 0.035278 -0.035278 scale +start_ol +-64 3328 moveto +432 3328 lineto +1379 1960 lineto +2320 3328 lineto +2816 3328 lineto +1600 1585 lineto +1600 0 lineto +1152 0 lineto +1152 1585 lineto +-64 3328 lineto +end_ol grestore +gsave 13.637867 5.119040 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 14.010400 5.119040 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore +gsave 13.600000 13.019000 translate 0.035278 -0.035278 scale +start_ol +1600 2882 moveto +985 1216 lineto +2218 1216 lineto +1600 2882 lineto +1344 3328 moveto +1858 3328 lineto +3136 0 lineto +2665 0 lineto +2360 832 lineto +847 832 lineto +542 0 lineto +64 0 lineto +1344 3328 lineto +end_ol grestore +gsave 14.014867 13.019000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 14.209600 13.019000 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 14.378933 13.019000 translate 0.035278 -0.035278 scale +start_ol +448 2496 moveto +832 2496 lineto +832 0 lineto +448 0 lineto +448 2496 lineto +448 3520 moveto +832 3520 lineto +832 3008 lineto +448 3008 lineto +448 3520 lineto +end_ol grestore +gsave 14.548267 13.019000 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 14.785333 13.019000 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 15.157867 13.019000 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 15.411867 13.019000 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 15.784400 13.019000 translate 0.035278 -0.035278 scale +start_ol +448 3520 moveto +832 3520 lineto +832 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave -1.100000 13.019040 translate 0.035278 -0.035278 scale +start_ol +1600 2882 moveto +985 1216 lineto +2218 1216 lineto +1600 2882 lineto +1344 3328 moveto +1858 3328 lineto +3136 0 lineto +2665 0 lineto +2360 832 lineto +847 832 lineto +542 0 lineto +64 0 lineto +1344 3328 lineto +end_ol grestore +gsave -0.685133 13.019040 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave -0.490400 13.019040 translate 0.035278 -0.035278 scale +start_ol +192 2496 moveto +607 2496 lineto +1126 549 lineto +1643 2496 lineto +2133 2496 lineto +2652 549 lineto +3169 2496 lineto +3584 2496 lineto +2923 0 lineto +2433 0 lineto +1890 2046 lineto +1343 0 lineto +853 0 lineto +192 2496 lineto +end_ol grestore +gsave 0.009133 13.019040 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 0.381667 13.019040 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 0.627200 13.019040 translate 0.035278 -0.035278 scale +start_ol +2112 2112 moveto +2112 3520 lineto +2496 3520 lineto +2496 0 lineto +2112 0 lineto +2112 384 lineto +1980 156 1779 46 conicto +1578 -64 1297 -64 conicto +835 -64 545 297 conicto +256 659 256 1248 conicto +256 1837 545 2198 conicto +835 2560 1297 2560 conicto +1578 2560 1779 2450 conicto +1980 2340 2112 2112 conicto +704 1249 moveto +704 784 891 520 conicto +1079 256 1407 256 conicto +1735 256 1923 520 conicto +2112 784 2112 1249 conicto +2112 1713 1923 1976 conicto +1735 2240 1407 2240 conicto +1079 2240 891 1976 conicto +704 1713 704 1249 conicto +end_ol grestore +1.000000 1.000000 1.000000 srgb +n 4.075000 14.769040 m 4.075000 17.569040 l 10.875000 17.569040 l 10.875000 14.769040 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 4.075000 14.769040 m 4.075000 17.569040 l 10.875000 17.569040 l 10.875000 14.769040 l cp s +gsave 5.121267 15.969040 translate 0.035278 -0.035278 scale +start_ol +896 2944 moveto +896 1728 lineto +1488 1728 lineto +1817 1728 1996 1886 conicto +2176 2044 2176 2337 conicto +2176 2627 1996 2785 conicto +1817 2944 1488 2944 conicto +896 2944 lineto +448 3328 moveto +1488 3328 lineto +2050 3328 2337 3076 conicto +2624 2824 2624 2337 conicto +2624 1847 2337 1595 conicto +2050 1344 1488 1344 conicto +896 1344 lineto +896 0 lineto +448 0 lineto +448 3328 lineto +end_ol grestore +gsave 5.476867 15.969040 translate 0.035278 -0.035278 scale +start_ol +448 986 moveto +448 2496 lineto +832 2496 lineto +832 1001 lineto +832 629 978 442 conicto +1124 256 1417 256 conicto +1768 256 1972 477 conicto +2176 699 2176 1081 conicto +2176 2496 lineto +2560 2496 lineto +2560 0 lineto +2176 0 lineto +2176 384 lineto +2022 157 1819 46 conicto +1617 -64 1349 -64 conicto +906 -64 677 203 conicto +448 471 448 986 conicto +end_ol grestore +gsave 5.866333 15.969040 translate 0.035278 -0.035278 scale +start_ol +2048 2432 moveto +2048 2048 lineto +1868 2144 1674 2192 conicto +1480 2240 1273 2240 conicto +957 2240 798 2144 conicto +640 2048 640 1856 conicto +640 1709 757 1625 conicto +875 1542 1229 1467 conicto +1380 1435 lineto +1812 1341 1994 1170 conicto +2176 999 2176 692 conicto +2176 343 1899 139 conicto +1622 -64 1137 -64 conicto +936 -64 717 -32 conicto +498 0 256 64 conicto +256 512 lineto +490 385 718 320 conicto +947 256 1170 256 conicto +1470 256 1631 358 conicto +1792 461 1792 647 conicto +1792 820 1670 912 conicto +1549 1004 1141 1089 conicto +988 1123 lineto +600 1203 428 1369 conicto +256 1535 256 1824 conicto +256 2177 510 2368 conicto +765 2560 1233 2560 conicto +1466 2560 1670 2528 conicto +1875 2496 2048 2432 conicto +end_ol grestore +gsave 6.188067 15.969040 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 6.577533 15.969040 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 6.772267 15.969040 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 7.009333 15.969040 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 7.398800 15.969040 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 7.771333 15.969040 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 7.966067 15.969040 translate 0.035278 -0.035278 scale +start_ol +1409 2240 moveto +1083 2240 893 1974 conicto +704 1709 704 1248 conicto +704 787 892 521 conicto +1081 256 1409 256 conicto +1733 256 1922 522 conicto +2112 789 2112 1248 conicto +2112 1705 1922 1972 conicto +1733 2240 1409 2240 conicto +1408 2560 moveto +1946 2560 2253 2212 conicto +2560 1864 2560 1248 conicto +2560 634 2253 285 conicto +1946 -64 1408 -64 conicto +869 -64 562 285 conicto +256 634 256 1248 conicto +256 1864 562 2212 conicto +869 2560 1408 2560 conicto +end_ol grestore +gsave 8.338600 15.969040 translate 0.035278 -0.035278 scale +start_ol +2240 1249 moveto +2240 1713 2052 1976 conicto +1865 2240 1536 2240 conicto +1208 2240 1020 1976 conicto +832 1713 832 1249 conicto +832 784 1020 520 conicto +1208 256 1536 256 conicto +1865 256 2052 520 conicto +2240 784 2240 1249 conicto +832 2112 moveto +963 2340 1164 2450 conicto +1366 2560 1645 2560 conicto +2108 2560 2398 2198 conicto +2688 1837 2688 1248 conicto +2688 659 2398 297 conicto +2108 -64 1645 -64 conicto +1366 -64 1164 46 conicto +963 156 832 384 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +end_ol grestore +gsave 8.728067 15.969040 translate 0.035278 -0.035278 scale +start_ol +448 2496 moveto +832 2496 lineto +832 -76 lineto +832 -542 657 -751 conicto +482 -960 91 -960 conicto +-64 -960 lineto +-64 -640 lineto +28 -640 lineto +272 -640 360 -530 conicto +448 -421 448 -76 conicto +448 2496 lineto +448 3520 moveto +832 3520 lineto +832 3008 lineto +448 3008 lineto +448 3520 lineto +end_ol grestore +gsave 8.897400 15.969040 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 9.269933 15.969040 translate 0.035278 -0.035278 scale +start_ol +2240 2432 moveto +2240 2048 lineto +2066 2144 1892 2192 conicto +1718 2240 1541 2240 conicto +1143 2240 923 1979 conicto +704 1718 704 1248 conicto +704 778 923 517 conicto +1143 256 1541 256 conicto +1718 256 1892 304 conicto +2066 352 2240 448 conicto +2240 64 lineto +2068 0 1883 -32 conicto +1698 -64 1490 -64 conicto +924 -64 590 290 conicto +256 645 256 1248 conicto +256 1859 593 2209 conicto +931 2560 1517 2560 conicto +1707 2560 1888 2528 conicto +2070 2496 2240 2432 conicto +end_ol grestore +gsave 9.608600 15.969040 translate 0.035278 -0.035278 scale +start_ol +832 3200 moveto +832 2496 lineto +1664 2496 lineto +1664 2176 lineto +832 2176 lineto +832 804 lineto +832 495 914 407 conicto +997 320 1248 320 conicto +1664 320 lineto +1664 0 lineto +1248 0 lineto +793 0 620 173 conicto +448 347 448 804 conicto +448 2176 lineto +128 2176 lineto +128 2496 lineto +448 2496 lineto +448 3200 lineto +832 3200 lineto +end_ol grestore +gsave 5.218633 16.769040 translate 0.035278 -0.035278 scale +start_ol +2240 1249 moveto +2240 1713 2052 1976 conicto +1865 2240 1536 2240 conicto +1208 2240 1020 1976 conicto +832 1713 832 1249 conicto +832 784 1020 520 conicto +1208 256 1536 256 conicto +1865 256 2052 520 conicto +2240 784 2240 1249 conicto +832 2112 moveto +963 2340 1164 2450 conicto +1366 2560 1645 2560 conicto +2108 2560 2398 2198 conicto +2688 1837 2688 1248 conicto +2688 659 2398 297 conicto +2108 -64 1645 -64 conicto +1366 -64 1164 46 conicto +963 156 832 384 conicto +832 0 lineto +448 0 lineto +448 3520 lineto +832 3520 lineto +832 2112 lineto +end_ol grestore +gsave 5.608100 16.769040 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 5.980633 16.769040 translate 0.035278 -0.035278 scale +start_ol +448 2496 moveto +832 2496 lineto +832 0 lineto +448 0 lineto +448 2496 lineto +448 3520 moveto +832 3520 lineto +832 3008 lineto +448 3008 lineto +448 3520 lineto +end_ol grestore +gsave 6.149967 16.769040 translate 0.035278 -0.035278 scale +start_ol +2560 1509 moveto +2560 0 lineto +2176 0 lineto +2176 1496 lineto +2176 1869 2029 2054 conicto +1883 2240 1590 2240 conicto +1238 2240 1035 2018 conicto +832 1796 832 1413 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +983 2337 1188 2448 conicto +1394 2560 1662 2560 conicto +2106 2560 2333 2293 conicto +2560 2027 2560 1509 conicto +end_ol grestore +gsave 6.539433 16.769040 translate 0.035278 -0.035278 scale +start_ol +2112 1278 moveto +2112 1736 1926 1988 conicto +1741 2240 1407 2240 conicto +1074 2240 889 1988 conicto +704 1736 704 1278 conicto +704 824 889 572 conicto +1074 320 1407 320 conicto +1741 320 1926 572 conicto +2112 824 2112 1278 conicto +2496 289 moveto +2496 -343 2214 -651 conicto +1933 -960 1352 -960 conicto +1137 -960 946 -928 conicto +755 -896 576 -832 conicto +576 -448 lineto +758 -546 936 -593 conicto +1114 -640 1298 -640 conicto +1707 -640 1909 -426 conicto +2112 -212 2112 220 conicto +2112 448 lineto +1982 223 1780 111 conicto +1578 0 1297 0 conicto +828 0 542 350 conicto +256 701 256 1279 conicto +256 1859 542 2209 conicto +828 2560 1297 2560 conicto +1578 2560 1780 2448 conicto +1982 2337 2112 2112 conicto +2112 2496 lineto +2496 2496 lineto +2496 289 lineto +end_ol grestore +gsave 6.928900 16.769040 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 7.123633 16.769040 translate 0.035278 -0.035278 scale +start_ol +192 2496 moveto +607 2496 lineto +1126 549 lineto +1643 2496 lineto +2133 2496 lineto +2652 549 lineto +3169 2496 lineto +3584 2496 lineto +2923 0 lineto +2433 0 lineto +1890 2046 lineto +1343 0 lineto +853 0 lineto +192 2496 lineto +end_ol grestore +gsave 7.623167 16.769040 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 7.877167 16.769040 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 8.249700 16.769040 translate 0.035278 -0.035278 scale +start_ol +832 384 moveto +832 -960 lineto +448 -960 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +963 2340 1164 2450 conicto +1366 2560 1645 2560 conicto +2108 2560 2398 2198 conicto +2688 1837 2688 1248 conicto +2688 659 2398 297 conicto +2108 -64 1645 -64 conicto +1366 -64 1164 46 conicto +963 156 832 384 conicto +2240 1249 moveto +2240 1713 2052 1976 conicto +1865 2240 1536 2240 conicto +1208 2240 1020 1976 conicto +832 1713 832 1249 conicto +832 784 1020 520 conicto +1208 256 1536 256 conicto +1865 256 2052 520 conicto +2240 784 2240 1249 conicto +end_ol grestore +gsave 8.639167 16.769040 translate 0.035278 -0.035278 scale +start_ol +832 384 moveto +832 -960 lineto +448 -960 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +963 2340 1164 2450 conicto +1366 2560 1645 2560 conicto +2108 2560 2398 2198 conicto +2688 1837 2688 1248 conicto +2688 659 2398 297 conicto +2108 -64 1645 -64 conicto +1366 -64 1164 46 conicto +963 156 832 384 conicto +2240 1249 moveto +2240 1713 2052 1976 conicto +1865 2240 1536 2240 conicto +1208 2240 1020 1976 conicto +832 1713 832 1249 conicto +832 784 1020 520 conicto +1208 256 1536 256 conicto +1865 256 2052 520 conicto +2240 784 2240 1249 conicto +end_ol grestore +gsave 9.028633 16.769040 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 9.401167 16.769040 translate 0.035278 -0.035278 scale +start_ol +2112 2112 moveto +2112 3520 lineto +2496 3520 lineto +2496 0 lineto +2112 0 lineto +2112 384 lineto +1980 156 1779 46 conicto +1578 -64 1297 -64 conicto +835 -64 545 297 conicto +256 659 256 1248 conicto +256 1837 545 2198 conicto +835 2560 1297 2560 conicto +1578 2560 1779 2450 conicto +1980 2340 2112 2112 conicto +704 1249 moveto +704 784 891 520 conicto +1079 256 1407 256 conicto +1735 256 1923 520 conicto +2112 784 2112 1249 conicto +2112 1713 1923 1976 conicto +1735 2240 1407 2240 conicto +1079 2240 891 1976 conicto +704 1713 704 1249 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 7.430363 12.499548 m 7.470603 14.545476 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 7.213017 14.162271 m 7.472801 14.657258 l 7.712921 14.152439 l s +gsave 7.700000 13.969040 translate 0.035278 -0.035278 scale +start_ol +1600 2882 moveto +985 1216 lineto +2218 1216 lineto +1600 2882 lineto +1344 3328 moveto +1858 3328 lineto +3136 0 lineto +2665 0 lineto +2360 832 lineto +847 832 lineto +542 0 lineto +64 0 lineto +1344 3328 lineto +end_ol grestore +gsave 8.114867 13.969040 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 8.309600 13.969040 translate 0.035278 -0.035278 scale +start_ol +192 2496 moveto +607 2496 lineto +1126 549 lineto +1643 2496 lineto +2133 2496 lineto +2652 549 lineto +3169 2496 lineto +3584 2496 lineto +2923 0 lineto +2433 0 lineto +1890 2046 lineto +1343 0 lineto +853 0 lineto +192 2496 lineto +end_ol grestore +gsave 8.809133 13.969040 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore +gsave 9.063133 13.969040 translate 0.035278 -0.035278 scale +start_ol +1559 1280 moveto +1040 1280 840 1160 conicto +640 1041 640 754 conicto +640 525 790 390 conicto +940 256 1198 256 conicto +1554 256 1769 510 conicto +1984 765 1984 1187 conicto +1984 1280 lineto +1559 1280 lineto +2368 1449 moveto +2368 0 lineto +1984 0 lineto +1984 384 lineto +1842 154 1628 45 conicto +1415 -64 1107 -64 conicto +717 -64 486 154 conicto +256 372 256 739 conicto +256 1166 539 1383 conicto +822 1600 1384 1600 conicto +1984 1600 lineto +1984 1641 lineto +1984 1927 1796 2083 conicto +1608 2240 1266 2240 conicto +1049 2240 843 2192 conicto +638 2144 448 2048 conicto +448 2432 lineto +673 2496 884 2528 conicto +1095 2560 1295 2560 conicto +1835 2560 2101 2284 conicto +2368 2009 2368 1449 conicto +end_ol grestore +gsave 9.435667 13.969040 translate 0.035278 -0.035278 scale +start_ol +832 384 moveto +832 -960 lineto +448 -960 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +963 2340 1164 2450 conicto +1366 2560 1645 2560 conicto +2108 2560 2398 2198 conicto +2688 1837 2688 1248 conicto +2688 659 2398 297 conicto +2108 -64 1645 -64 conicto +1366 -64 1164 46 conicto +963 156 832 384 conicto +2240 1249 moveto +2240 1713 2052 1976 conicto +1865 2240 1536 2240 conicto +1208 2240 1020 1976 conicto +832 1713 832 1249 conicto +832 784 1020 520 conicto +1208 256 1536 256 conicto +1865 256 2052 520 conicto +2240 784 2240 1249 conicto +end_ol grestore +gsave 9.825133 13.969040 translate 0.035278 -0.035278 scale +start_ol +832 384 moveto +832 -960 lineto +448 -960 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +963 2340 1164 2450 conicto +1366 2560 1645 2560 conicto +2108 2560 2398 2198 conicto +2688 1837 2688 1248 conicto +2688 659 2398 297 conicto +2108 -64 1645 -64 conicto +1366 -64 1164 46 conicto +963 156 832 384 conicto +2240 1249 moveto +2240 1713 2052 1976 conicto +1865 2240 1536 2240 conicto +1208 2240 1020 1976 conicto +832 1713 832 1249 conicto +832 784 1020 520 conicto +1208 256 1536 256 conicto +1865 256 2052 520 conicto +2240 784 2240 1249 conicto +end_ol grestore +gsave 10.214600 13.969040 translate 0.035278 -0.035278 scale +start_ol +2624 1352 moveto +2624 1152 lineto +704 1152 lineto +731 715 960 485 conicto +1189 256 1597 256 conicto +1834 256 2056 320 conicto +2278 384 2496 512 conicto +2496 128 lineto +2273 34 2039 -15 conicto +1805 -64 1565 -64 conicto +961 -64 608 284 conicto +256 632 256 1225 conicto +256 1839 595 2199 conicto +934 2560 1509 2560 conicto +2024 2560 2324 2235 conicto +2624 1910 2624 1352 conicto +2240 1472 moveto +2235 1822 2043 2031 conicto +1852 2240 1537 2240 conicto +1180 2240 965 2038 conicto +750 1836 718 1470 conicto +2240 1472 lineto +end_ol grestore +gsave 10.587133 13.969040 translate 0.035278 -0.035278 scale +start_ol +1920 2112 moveto +1848 2178 1764 2209 conicto +1680 2240 1578 2240 conicto +1218 2240 1025 2001 conicto +832 1763 832 1317 conicto +832 0 lineto +448 0 lineto +448 2496 lineto +832 2496 lineto +832 2112 lineto +965 2339 1180 2449 conicto +1396 2560 1702 2560 conicto +1747 2560 1799 2560 conicto +1852 2560 1917 2560 conicto +1920 2112 lineto +end_ol grestore showpage