summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/acroflex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/acroflex
Initial commit
Diffstat (limited to 'macros/latex/contrib/acroflex')
-rw-r--r--macros/latex/contrib/acroflex/README.md30
-rw-r--r--macros/latex/contrib/acroflex/acroflex.cfg10
-rw-r--r--macros/latex/contrib/acroflex/acroflex.dtx1951
-rw-r--r--macros/latex/contrib/acroflex/acroflex.ins60
-rw-r--r--macros/latex/contrib/acroflex/afcustom_de.def79
-rw-r--r--macros/latex/contrib/acroflex/afcustom_us.def87
-rw-r--r--macros/latex/contrib/acroflex/doc/acroflex_man.pdfbin0 -> 115222 bytes
-rw-r--r--macros/latex/contrib/acroflex/doc/acroflex_man.tex1073
-rw-r--r--macros/latex/contrib/acroflex/examples/afcustom.def87
-rw-r--r--macros/latex/contrib/acroflex/examples/afgraph.pdfbin0 -> 465359 bytes
-rw-r--r--macros/latex/contrib/acroflex/examples/afgraph.tex412
-rw-r--r--macros/latex/contrib/acroflex/examples/afgraph_shaded.tex107
-rw-r--r--macros/latex/contrib/acroflex/examples/aflogo.eps8375
-rw-r--r--macros/latex/contrib/acroflex/examples/aflogo.tex42
-rw-r--r--macros/latex/contrib/acroflex/examples/transf_grphs.pdfbin0 -> 448762 bytes
-rw-r--r--macros/latex/contrib/acroflex/examples/transf_grphs.tex296
-rw-r--r--macros/latex/contrib/acroflex/swf/AcroFleX.swfbin0 -> 267347 bytes
17 files changed, 12609 insertions, 0 deletions
diff --git a/macros/latex/contrib/acroflex/README.md b/macros/latex/contrib/acroflex/README.md
new file mode 100644
index 0000000000..0d5e7f52e6
--- /dev/null
+++ b/macros/latex/contrib/acroflex/README.md
@@ -0,0 +1,30 @@
+The AcroFleX Package
+Author: D. P. Story
+Dated: 2016/08/29
+
+The acroflex package is part of the AeB Pro family of packages.
+It is a package that creates a graphing screen using the
+rmannot package. The user can type in functions and graph them.
+A graphing screen can be populated with pre-packaged functions for
+the user the scrutinize and interact with. The package can graph
+functions of a single variable x, a pair of parametric equations that
+are functions of t, and a polar function of t.
+
+The graphing screen is a rich media annotation what uses a specially
+developed SWF file, called the AcroFLeX Graphing widget. This package
+takes advantage of rich media annotations, which is a version 9 feature
+of Acrobat. This package requires Acrobat Pro and Distiller version 9.
+The user needs to use Adobe Reader 9.0 in order to obtain the graphing
+functionality.
+
+Further description and examples may be found at the acroflex home page at
+http://www.math.uakron.edu/~dpstory/acroflex.html
+
+Let me know if there are problems or suggested features. e-mail
+me at dpstory@uakron.edu or dpstory@acrotex.net
+
+Now, I simply must get back to my retirement.
+
+D. P. Story
+dpstory@uakron.edu
+2016/01/30
diff --git a/macros/latex/contrib/acroflex/acroflex.cfg b/macros/latex/contrib/acroflex/acroflex.cfg
new file mode 100644
index 0000000000..1a2cd3fea1
--- /dev/null
+++ b/macros/latex/contrib/acroflex/acroflex.cfg
@@ -0,0 +1,10 @@
+%
+% AcroFleX Graphing Bundle Configuration File
+% D. P. Story, dpstory@acrotex.net, storyd@nwfsc.edu, dpstory@uakron.edu
+%
+\pathToAcroFlex{C:/Users/Public/Documents/My TeX Files/tex/latex/aeb/aebpro/acroflex/swf}
+%
+% The following path is used by dpstory during development
+%
+% \pathToAcroFlex{C:/acroflex/acroflex/bin-release}
+
diff --git a/macros/latex/contrib/acroflex/acroflex.dtx b/macros/latex/contrib/acroflex/acroflex.dtx
new file mode 100644
index 0000000000..b2c350055b
--- /dev/null
+++ b/macros/latex/contrib/acroflex/acroflex.dtx
@@ -0,0 +1,1951 @@
+%\iffalse
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Acroflex.sty package, %%
+%% Copyright (C) 2008 -- 2016 D. P. Story %%
+%% dpstory@acrotex.net %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</copyright>
+%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+%<package>\ProvidesPackage{acroflex}
+%<package> [2016/08/29 v1.6c AcroFLeX: AcroTeX and Adobe Flex (dps)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex]{hyperref}
+\begin{document}
+\def\AcroFLeX{AcroF\kern-.1667em\lower.5ex\hbox{L}\kern-.3eme\kern-.125emX\@}
+ \GetFileInfo{acroflex.sty}
+ \title{%
+ \texorpdfstring
+ {\AcroFLeX: Merging {Acro\negthinspace\TeX} and FLEX}
+ {AcroFLeX: Merging AcroTeX and FLEX}}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@acrotex.net}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \let\Email\texttt
+ \DocInput{acroflex.dtx}
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+% \MakeShortVerb{|}
+% \StopEventually{}
+%
+% \DoNotIndex{\def,\edef,\gdef,\xdef,\global,\long,\let}
+% \DoNotIndex{\expandafter,\string,\the,\ifx,\else,\fi}
+% \DoNotIndex{\csname,\endcsname,\relax,\begingroup,\endgroup}
+% \DoNotIndex{\DeclareTextCommand,\DeclareTextCompositeCommand}
+% \DoNotIndex{\space,\@empty,\special}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \section{Introduction}
+%
+% The word \textbf{\AcroFLeX} is meant to convey a merging of two computer technologies:
+% \begin{itemize}
+% \item \textbf{Acro}: connotes both \textbf{Adobe Acrobat} (\textbf{Adobe Reader})
+% and \textbf{{Acro\negthinspace\TeX}} (as in the
+% \textbf{{Acro\negthinspace\TeX} eDucation Bundle} or, just \textbf{AeB}).
+% \item \textbf{F\kern-.1667em\lower.5ex\hbox{L}\kern-.3eme\kern-.125emX\@}: connotes
+% \textbf{Adobe FLEX 3}. FLEX 3 is used to create SWF files to interact with the user.
+% In the case of graphing, plotting information is passed from Acrobat, via JavaScript,
+% to the Flash widget. ActionScript receives the data, plots the points, and
+% connects them with a smooth curve or a straight line segment.
+% \end{itemize}
+% Acrobat 9 Pro introduces the rich media annotation which plays FLV movies
+% and SWF files natively. Acrobat also provides a scripting bridge
+% between JavaScript for Acrobat, and ActionScript, the scripting
+% language of Flash player. This bridge enables the PDF and the
+% Flash widget, embedded in the rich media annotation, to communicate. The scripting bridge
+% opens up wonderful opportunities for application to the education
+% sector. The graphing of {\AcroFLeX} is one such application of the new
+% PDF-Flash connection to education.
+%
+% \textbf{{\AcroFLeX}} uses the commercial product Adobe FLEX Builder~3 and
+% FLEX~3 SDK to produce Flash widgets, and the AeB
+% to create PDF documents with appropriate JavaScript to communicate
+% with the Flash widget. FLEX Builder~3 is currently free for students
+% and educators, the FLEX 3 SDK is free to all.
+%
+% This style file defines some basic controls for
+% \textbf{{\AcroFLeX} Graphing} for controlling graphical SWF files
+% for graphing.
+%
+% These commands are general {\LaTeX} commands, that require no special driver, so
+% they can be used by, for example, pdftex; however, we use SWF files to produce
+% the graphing screen with the built-in ActionScript to communicate with the PDF.
+% For this, you will need Acrobat 9 Pro. In that case, you might as well use the
+% Acrobat Distiller to produce your PDF, but it is not necessary.
+%
+% \medskip\noindent
+% Let's begin with a declaration of the {\AcroFLeX} logo.
+% \begin{macrocode}
+\RequirePackage{rmannot}[2016/02/01]
+% \end{macrocode}
+%\changes{v1.6}{2015/10/13}{Save catcodes of subscript and superscript, both
+% of these are used in ordinary characters in the file.}
+% Change catcodes of subscript and superscript to other.
+% \begin{macrocode}
+\edef\af@subscriptCat{\the\catcode`\_}
+\edef\af@superscriptCat{\the\catcode`\^}
+\def\af@restoreCats{%
+ \catcode`\_=\af@subscriptCat
+ \catcode`\^=\af@superscriptCat
+}
+\catcode`\_=12\relax \catcode`\^=12\relax
+\def\AcroFLeX{%
+ AcroF\kern-.1667em\lower.5ex\hbox{L}\kern-.3eme\kern-.125emX\@}
+% \end{macrocode}
+% \begin{macro}{\pathToAcroFlex}
+% Set the path to {\AcroFLeX} widget, \texttt{AcroFlex.swf}, that actually does the
+% graphing.
+% \begin{macrocode}
+\newcommand{\pathToAcroFlex}[1]{\def\af@pathToAcroFlex{#1}%
+ \ifx\af@pathToAcroFlex\@empty
+ \PackageError{acroflex}{%
+ You must specify a full path to AcroFlex.swf}{}\else
+ \saveNamedPath{acroflexWidget}{\af@pathToAcroFlex/AcroFlex.swf}\fi
+}
+\def\af@pathToAcroFlex{}
+\@onlypreamble{\pathToAcroFlex}
+% \end{macrocode}
+% \end{macro}
+% \paragraph*{Define package options.}
+% \begin{macro}{lang}
+% We offer up a single package option, \texttt{lang}. The only languages supported
+% at this time are \texttt{english} and \texttt{german}. Additional languages may be supported in the
+% future.
+% \begin{macrocode}
+\define@choicekey*+{acroflex.sty}{lang}[\val\nr]{english,german}
+{%
+ \ifcase\nr\relax
+ \def\af@lang@type{afcustom_us.def}
+ \or
+ \def\af@lang@type{afcustom_de.def}
+ \else
+ \def\af@lang@type{afcustom.def}
+ \fi
+}{\PackageWarning{acroflex}{Bad choice for lang, permissible values
+are english and german. No lang key is equivalent to english. Try again}}
+\def\af@lang@type{afcustom.def}
+% \end{macrocode}
+% \end{macro}
+% \paragraph*{Process the options.}
+% We process our meager number of options here.
+% \begin{macrocode}
+\ProcessOptionsX
+% \end{macrocode}
+% \paragraph*{Input Configuration File.} At this point, we input the configuration file. The
+% major entry, and probably the only entry in this file is the \cs{pathToAcroFlex}. The file
+% should contain a line of code like this one:
+%\begin{verbatim}
+% \pathToAcroFlex{c:/acrotex/aebpro/acroflex/swf}
+%\end{verbatim}
+% \begin{macrocode}
+\InputIfFileExists{acroflex.cfg}{}{}
+% \end{macrocode}
+%
+% \section{Graphing a Single Function}
+%
+% This section describes the graphing screen and its controls.
+%
+% \subsection{Some Initial Parameters}
+%
+% Should you wish to use an {\AcroFLeX} graphic in your PDF, you will need to declare
+% several parameters for each graphic: \cs{dimScreenGraph} and \cs{graphName},
+% these are the rich media annotation dimensions, the rich media annot number of this annot
+% on this page, and a unique name (unique to the document) for the graph.
+%
+% You also need to declare a default function, if different from the one set by this package,
+% the default domain/range of $x$ and $y$ (the graph view window), and the default domain
+% of parameter equations (this last is options if no parametric equations are to be used).
+%
+% \paragraph{Setting the Dimensions of the Annotation}
+%
+% \begin{macro}{\dimScreenGraph}
+% This is a convenience command for storing the dimensions of the Flash widget. It assumes
+% you do not resize using \cs{resizebox} or \cs{scalebox}. The command defines two
+% commands available to the document author, these are \cs{hScreenGraph} and
+% \cs{vScreenGraph}, for the width and height respectively.
+% \begin{macrocode}
+\newcommand{\dimScreenGraph}[2]{{%
+ \setlength{\dimen@}{#1}\xdef\hScreenGraph{\the\dimen@}%
+ \setlength{\dimen@}{#2}\xdef\vScreenGraph{\the\dimen@}%
+}}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Setting the Name of the Graph}
+%
+% \begin{macro}{\graphName}
+% Each graphing screen must have a unique (base)name, the name is specified
+% using the command \cs{graphName}; for example \verb!\graphName{mygraph}!
+% specifies the base name for the next graphing screen. This name is use
+% in creating the control for the graphing screen (a Flash widget).
+%
+% \begin{macrocode}
+\newcommand{\graphName}[1]{\def\afgraphName{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\defaultFunction}
+% Declare the default function to appear in the \cs{fileInputField} on startup
+% or on reset. The function takes two arguments, the first is a display version of
+% the function, the second is a proper JavaScript form of the function. The default
+% is \verb!\defaultFunction{x^2}!
+% \begin{macrocode}
+\newcommand{\defaultFunction}[1]{\def\af@DefaultFunction{#1}}
+\defaultFunction{x^2}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Setting the View Screen Dimensions: Range/Domain}
+%
+% \begin{macro}{\defaultDomRng}
+% \begin{macro}{\defaultDomP}
+% Set the default domain and range of the default function. These values will appear
+% on start-up, and when the graph is cleared.
+% \begin{macrocode}
+\def\defaultDomRng#1#2#3#4{%
+ \def\af@DefaultDomMin{#1}\def\af@DefaultDomMax{#2}%
+ \def\af@DefaultRngMin{#3}\def\af@DefaultRngMax{#4}%
+}
+\def\defaultDomP#1#2{%
+ \def\af@DefaultDomMint{#1}\def\af@DefaultDomMaxt{#2}%
+}
+% \end{macrocode}
+% We set the default domain and range to correspond with the
+% default function.
+% \begin{macrocode}
+\defaultDomRng{-2}{2}{0}{4}
+\defaultDomP{0}{2*PI}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The Graphing Screen and its Controls}
+%
+% Here, we describe the graphing screen and its controls. The graphing screens and
+% its controls may be arranged on the page in any way the document author wishes.
+%
+% \subsubsection{The Graphing Screen}
+%
+% The graphing screen is the centerpiece of the {\AcroFLeX} graphing system.
+%
+% \begin{macro}{\graphScreen}
+%
+% The \cs{graphScreen} command is just the \cs{rmAnnot} command with the
+% fourth argument set to the \texttt{acroflexWidget}. The command takes
+% three parameters, each just passed to \cs{rmAnnot}: The first is optional
+% that sets the key-value pairs, an important one is \texttt{poster=afposter}
+% to get the famous \AcroFLeX{} logo inserted as the opster; the second
+% is the width; the third is the height. The widget resizes itself, so the choice
+% of the dimensions is up to the document author.
+%
+% If \cs{dimSreenGraph} is used then you can simply use the dimensions declared there;
+% for example,
+%\begin{verbatim}
+% \dimScreenGraph{186bp}{186bp*3/4}
+% ...
+% \graphScreen[poster=aflogo]{\hScreenGraph}{\vScreenGraph}
+%\end{verbatim}
+% Note the use of calculated height, three-fourths of the width. \cs{graphScreen} can be,
+% in turn, be resized using \cs{resizebox} or \cs{scalebox}.
+%
+% \begin{macrocode}
+\newcommand{\graphScreen}[3][]{\rmAnnot[#1,%
+ name=afRM\afgraphName]{#2}{#3}{acroflexWidget}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\iconFloatGraphScreen}
+% Should you wish to create a graphing screen in a floating window, use the
+% \cs{iconFloatGraphScreen}. It takes three arguments, the first one is optional
+% and is passed to the first argument the underlying \cs{graphScreen}. A typical
+% first argument is a poster key value: \texttt{poster=aflogo}. The second two are
+% dimensions (width and height). We use \cs{resizebox} from the graphicx package.
+% The \cs{resizebox} can take an exclamation point (!) as its arguments, in this
+% case, the object will be resized to keep its aspect ratio. See the documentation
+% of \cs{resizebox} for more details. Below is an example,
+%\begin{verbatim}
+% \iconFloatGraphScreen[poster=aflogo]{40bp}{!}
+%\end{verbatim}
+% The rich media annotation has a transparent button on top of it. The poster of the annotation
+% can be see through the button. Pressing on the button activates, or deactivates the annotation.
+%
+% The default is not to allow the user to close the window or go into full screen mode, however
+% by executing\DescribeMacro{\allowFSFloatGS} \cs{allowFSFloatGS} before the
+% \cs{iconFloatGraphScreen} command, we allow for full screen, while
+% \DescribeMacro{\defaultFloatGS} \cs{defaultFloatGS} returns to the default state.
+% \begin{macrocode}
+\newcommand{\allowFSFloatGS}{\def\af@passcontext{\@gobble}}
+\newcommand{\defaultFloatGS}{\def\af@passcontext{passcontext}}
+% \end{macrocode}
+% We set the default value, we do no allow full screen.
+% \begin{macrocode}
+\defaultFloatGS
+% \end{macrocode}
+% Now for the \cs{iconFloatGraphScreen} command
+% \begin{macrocode}
+\newcommand{\iconFloatGraphScreen}[3][]{%
+ \makebox[0pt][l]{%
+ \resizebox{#2}{#3}{%
+% \end{macrocode}
+% Here is the graphing screen
+% \begin{macrocode}
+ \graphScreen[#1,windowed,\af@passcontext,deactivated=pageclose
+ ]{\hScreenGraph}{\vScreenGraph}}}%
+ \resizebox{#2}{#3}{%
+% \end{macrocode}
+% And the button that overlays it
+% \begin{macrocode}
+ \pushButton[\S{S}\H{N}\autoCenter{n}\W0\BG{}\BC{}
+ \TU{\tt@iconFloatGraphScreen}\A{\JS{%
+ var rm = this.getAnnotRichMedia(%
+ this.pageNum, "afRM\afgraphName");\r
+ rm.activated=!rm.activated;
+ }}]{float\afgraphName Btn-\therm@Cnt}{\hScreenGraph}
+ {\vScreenGraph}}%
+}
+\newcommand{\tticonFloatGraphScreen}[1]{%
+ \def\tt@iconFloatGraphScreen{#1}}
+\tticonFloatGraphScreen{Click to view graphing screen,
+ click again to hide graphing screen.}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Various Controls}
+%
+% The graphing screen, obviously, graphs functions of the form $ y = f(x) $. The user
+% must have a way of entering the functional part, the $f(x)$. \cs{fileInputField}
+% is used for this purpose. The \cs{graphBtn} is used to graph the function, while
+% \cs{graphClrBtn} is used to clear the graph and deactivate the Flash widget.
+%
+% The domain of the variable $x$ is specified though the commands
+% \cs{domMin} and \cs{domMax}; while the range of values on
+% the $y$ axis is specified by \cs{rngMin} and \cs{rngMax}. The number of points
+% that are plotted can be specified through \cs{numPoints}.
+%
+% \paragraph{The Input Function.}
+% \begin{macro}{\funcInputField}
+% The parameters for all the above mentioned functions, with the exception of
+% \cs{afDefaultFunction}, take three parameters generally described below:
+%
+% \begin{enumerate}
+% \item[\texttt{[\#1]}:] optional arguments to modify appearance of the form field
+% \item[\texttt{\#2}:] the width of the form field
+% \item[\texttt{\#3}:] the height of the form field
+% \end{enumerate}
+% The definitions below use two new keys, \cs{nuDV} and \cs{nuV}, to avoid the use
+% of unicode when the unicode option of hyperref has been invoked. The initial and
+% default values of the function input field may contain symbols like \texttt{\string^}
+% that hyperref does not like and strips out. These two keys are also used in
+% \cs{functionSelect} below, for the same reason.
+% \begin{macrocode}
+\newcommand{\funcInputField}[3][]{\makebox[0pt][l]{%
+ \textField[%
+ \nuDV{\af@DefaultFunction}\nuV{\af@DefaultFunction}
+ \F{\FHidden}\Ff{\FfReadOnly}
+ ]{\afgraphName theHiddenFunction}{1bp}{1bp}}%
+ \textField[%
+ \BC{0 0 0}\nuDV{\af@DefaultFunction}\nuV{\af@DefaultFunction}
+ \TU{\tt@funcInputField}#1\AA{\AAFormat{%
+ \formatFunctionInput{"\afgraphName theHiddenFunction"}}
+ \AAKeystroke{\keystrokeFunctionInput}
+ }%
+ ]{\afgraphName theFunction}{#2}{#3}%
+}
+\newcommand{\ttfuncInputField}[1]{%
+ \def\tt@funcInputField{#1}}
+\ttfuncInputField{Enter any of the following for expressions:\r
+\space\space1. A function of x of the form f(x);\r
+\space\space2. A polar function of t of the form f(t);\r
+\space\space3. A set of parametric functions of t of the form f(t);g(t)
+\r\space\space\space\space\space(separated by a semi-colon);\r
+\space\space4. A list of points, (a1,b1);(a2,b2);...;(an,bn)\r
+\space\space\space\space\space(separated by semi-colons).
+}
+% \end{macrocode}
+% I originally named the previous macro definition \cs{fileInputField}. My bad!
+% In case there is someone out there that uses this package, I'll let
+% \cs{fileInputField} to \cs{funcInputField}.
+% \begin{macrocode}
+\let\fileInputField\funcInputField
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\formatFunctionInput}
+% \cs{formatFunctionInput} supplies format event for the
+% \cs{funcInputField}. Then the user enters a new function, the JavaScript function
+% \texttt{formatFunctionInput} executes \texttt{ParseInput} (from \textsf{exerquiz}), and places it
+% in the hidden function field.
+% \begin{macrocode}
+\def\formatFunctionInput#1{%
+ try{ formatFunctionInput(#1) } catch(e){};
+}
+\def\keystrokeFunctionInput{%
+ try{ keystrokeFunctionInput() } catch(e){};
+}
+% \end{macrocode}
+% \end{macro}
+% \paragraph{The Curve Select Combo Box.}
+% \begin{macro}{\functionSelect}
+% \begin{macro}{\initFuncSelect}
+% \begin{macro}{\savedelSelBtn}
+% This is an optional combo box for selecting curves and points to graph.
+% Note, this drop down list should not overlay the graphing widget, the widget
+% is on top, and the list cannot be seen.
+% \begin{macrocode}
+\newcommand{\afCurve}[1]{\def\afcurve{#1 }\def\afcurvei{#1}}
+\afCurve{Curve}
+\newcommand{\afPoint}[1]{\def\afpoint{#1 }\def\afploti{#1}}
+\afPoint{Point}
+\newcommand{\afUnused}[1]{\def\afunused{#1}}
+\afUnused{--unused}
+% \end{macrocode}
+% Any re-definitions should take place in the preamble only!
+% \begin{macrocode}
+\@onlypreamble\afCurve
+\@onlypreamble\afPoint
+\@onlypreamble\afUnused
+% \end{macrocode}
+% The listing of the drop-down menu. To begin with, there are eight
+% menu items: four for curves, and four for plotted points.
+% \begin{macrocode}
+\newcommand{\initFuncSelect}[1]{\def\af@initializeFuncSelect{#1}}
+\initFuncSelect{%
+ [(\af@DefaultFunction)(\afcurve1)]%
+ [(<\afcurve2\afunused>)(\afcurve2)]%
+ [(<\afcurve3\afunused>)(\afcurve3)]%
+ [(<\afcurve4\afunused>)(\afcurve4)]%
+ [(<\afpoint1\afunused>)(\afpoint1)]%
+ [(<\afpoint2\afunused>)(\afpoint2)]%
+ [(<\afpoint3\afunused>)(\afpoint3)]%
+ [(<\afpoint4\afunused>)(\afpoint4)]}
+% \end{macrocode}
+% The combo box that displays the above items. On selection,
+% we populate the \texttt{theFunction} field.
+% \begin{macrocode}
+\newcommand{\functionSelect}[3][]{%
+ \comboBox[\TU{\tt@functionSelect}#1\Ff{\FfCommitOnSelChange}
+ \nuDV{\af@DefaultFunction}\nuV{\af@DefaultFunction}
+ \AA{\AAKeystroke{%
+ if (!event.willCommit) {\r\t
+ this.getField(
+ "\afgraphName theFunction").value=event.changeEx;\r
+ }}}]{\afgraphName ComboSelect}{#2}{#3}{\af@initializeFuncSelect}%
+}
+\newcommand{\ttfunctionSelect}[1]{%
+ \def\tt@functionSelect{#1}}
+\ttfunctionSelect{Enter a function on \afcurvei1--\afcurvei4, or
+ a list of points on \afploti1--\afploti4.}
+% \end{macrocode}
+% Saves the current function to the list, shift-click deletes
+% the current list item, and returns it to its default.
+% \begin{macrocode}
+\newcommand{\savedelSelBtn}[3][]{%
+ \pushButton[\TU{\tt@savedelSelBtn}#1
+ \A{\JS{saveDelSelAction("\afgraphName");
+ }}]{\afgraphName savedelSelectBtn}{#2}{#3}%
+}
+\newcommand{\ttsavedelSelBtn}[1]{\def\tt@savedelSelBtn{#1}}
+\ttsavedelSelBtn{Click to save current function to list, shift-click
+ to delete the current function from list}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \paragraph{The Graphing Button.}
+% \begin{macro}{\graphBtn}
+% Clicking on this button when the
+% rich media annot is not activated will activate it. Clicking on
+% this button when the rich media annot is activate will cause the
+% function in the \cs{fileInputField} to be graphed.
+% \begin{macrocode}
+\newcommand{\graphBtn}[3][]{%
+ \pushButton
+ [\BC{0 0 0}\CA{Graph It!}\TU{\tt@graphBtn}#1
+ \A{\JS{graphBtnAction("\afgraphName",this.pageNum);
+ }}]{\afgraphName graphIt}{#2}{#3}%
+}
+\newcommand{\ttgraphBtn}[1]{\def\tt@graphBtn{#1}}
+\ttgraphBtn{Press to graph the function}
+% \end{macrocode}
+% \end{macro}
+% \paragraph{The Clear Screen Button.}
+%
+% \begin{macro}{\graphClrBtn}
+% \begin{macro}{\clearGraphJS}
+% Click on this button and all fields
+% associated with this graphing screen are reset. Shift click makes the
+% AcroFlex widget deactivated.
+% \begin{macrocode}
+\newcommand{\clearGraphJS}{%
+ clearGraph("all","\afgraphName",this.pageNum);}
+\newcommand{\graphClrBtn}[3][]{\pushButton[\BC{0 0 0}\CA{Clear}
+ \A{\JS{\clearGraphJS}}\TU{\tt@graphClrBtn}#1
+ ]{\afgraphName clearIt}{#2}{#3}%
+}
+\newcommand{\ttgraphClrBtn}[1]{\def\tt@graphClrBtn{#1}}
+\ttgraphClrBtn{Click to clear graph, shift-click to deactivate the
+ graphing screen}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{The Domain the function is to be graphed over.}
+%
+% \begin{macro}{\domMin}
+% \begin{macro}{\domMax}
+% The lower endpoint of the interval over which the function is
+% graphed.
+%
+% \begin{macrocode}
+\newcommand{\domMin}[3][]{\makebox[0pt][l]{%
+ \textField[\nuDV{\af@DefaultDomMin}\nuV{\af@DefaultDomMin}
+ \F{\FHidden}\Ff{\FfReadOnly}
+ ]{\afgraphName theHiddenDom.min}{1bp}{1bp}}%
+ \textField[\textSize{0}\nuV{\af@DefaultDomMin}
+ \nuDV{\af@DefaultDomMin}\BC{0 0 0}\TU{\tt@domMin}#1\AA{%
+ \AAKeystroke{\keystrokeDomRng{"\afgraphName theHiddenDom.min"}}
+ \AAFormat{\formatVarIntervals{"\afgraphName theHiddenDom.min"}}
+ }]{\afgraphName theDom.min}{#2}{#3}%
+}
+\newcommand{\ttdomMin}[1]{\def\tt@domMin{#1}}
+\ttdomMin{Enter the minimum value for the variable x}
+% \end{macrocode}
+% The upper endpoint of the interval over which the function is graphed.
+% \begin{macrocode}
+\newcommand{\domMax}[3][]{\makebox[0pt][l]{%
+ \textField[\nuDV{\af@DefaultDomMax}\nuV{\af@DefaultDomMax}
+ \F{\FHidden}\Ff{\FfReadOnly}
+ ]{\afgraphName theHiddenDom.max}{1bp}{1bp}}%
+ \textField[\textSize{0}\nuV{\af@DefaultDomMax}
+ \nuDV{\af@DefaultDomMax}\BC{0 0 0}\TU{\tt@domMax}#1\AA{%
+ \AAKeystroke{\keystrokeDomRng{"\afgraphName theHiddenDom.max"}}
+ \AAFormat{\formatVarIntervals{"\afgraphName theHiddenDom.max"}}
+ }]{\afgraphName theDom.max}{#2}{#3}%
+}
+\newcommand{\ttdomMax}[1]{\def\tt@domMax{#1}}
+\ttdomMax{Enter the maximum value for the variable x}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \paragraph{The interval on vertical axis what is to be displayed.}
+% \begin{macro}{\rngMin}
+% \begin{macro}{\rngMax}
+% The lower endpoint of the interval on the $y$-axis that is displayed on the
+% graphing screen.
+% \begin{macrocode}
+\newcommand{\rngMin}[3][]{\makebox[0pt][l]{%
+ \textField[\nuDV{\af@DefaultRngMin}\nuV{\af@DefaultRngMin}
+ \F{\FHidden}\Ff{\FfReadOnly}
+ ]{\afgraphName theHiddenRng.min}{1bp}{1bp}}%
+ \textField[\textSize{0}\nuV{\af@DefaultRngMin}
+ \nuDV{\af@DefaultRngMin}\BC{0 0 0}\TU{\tt@rngMin}#1\AA{%
+ \AAKeystroke{\keystrokeDomRng{"\afgraphName theHiddenRng.min"}}
+ \AAFormat{\formatVarIntervals{"\afgraphName theHiddenRng.min"}}
+ }]{\afgraphName theRng.min}{#2}{#3}%
+}
+\newcommand{\ttrngMin}[1]{\def\tt@rngMin{#1}}
+\ttrngMin{Enter the minimum value for the variable y}
+% \end{macrocode}
+% The upper endpoint of the interval on the $y$-axis that is displayed on the
+% graphing screen.
+% \begin{macrocode}
+\newcommand{\rngMax}[3][]{\makebox[0pt][l]{%
+ \textField[\nuDV{\af@DefaultRngMax}\nuV{\af@DefaultRngMax}
+ \F{\FHidden}\Ff{\FfReadOnly}
+ ]{\afgraphName theHiddenRng.max}{1bp}{1bp}}%
+ \textField[\textSize{0}\nuV{\af@DefaultRngMax}
+ \nuDV{\af@DefaultRngMax}\BC{0 0 0}\TU{\tt@rngMax}#1\AA{%
+ \AAKeystroke{\keystrokeDomRng{"\afgraphName theHiddenRng.max"}}
+ \AAFormat{\formatVarIntervals{"\afgraphName theHiddenRng.max"}}
+ }]{\afgraphName theRng.max}{#2}{#3}%
+}
+\newcommand{\ttrngMax}[1]{\def\tt@rngMax{#1}}
+\ttrngMax{Enter the maximum value for the variable y}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \paragraph{The Domain parametric equations is to be graphed over.}
+% \begin{macro}{\domMinP}
+% \begin{macro}{\domMaxP}
+% The lower endpoint of the interval over which the function is graphed.
+% \begin{macrocode}
+\newcommand{\domMinP}[3][]{\makebox[0pt][l]{%
+ \textField[\nuDV{\af@DefaultDomMint}\nuV{\af@DefaultDomMint}
+ \F{\FHidden}\Ff{\FfReadOnly}
+ ]{\afgraphName theHiddenDom_t.min}{1bp}{1bp}}%
+ \textField[\textSize{0}\nuV{\af@DefaultDomMint}
+ \nuDV{\af@DefaultDomMint}\BC{0 0 0}\TU{\tt@domMinP}#1\AA{%
+ \AAKeystroke{\keystrokeDomRng{"\afgraphName theHiddenDom_t.min"}}
+ \AAFormat{\formatVarIntervals{"\afgraphName theHiddenDom_t.min"}}
+ }]{\afgraphName theDom_t.min}{#2}{#3}%
+}
+\newcommand{\ttdomMinP}[1]{\def\tt@domMinP{#1}}
+\ttdomMinP{Enter the minimum value for the variable t}
+% \end{macrocode}
+% The upper endpoint of the interval over which the function is graphed.
+% \begin{macrocode}
+\newcommand{\domMaxP}[3][]{\makebox[0pt][l]{%
+ \textField[\nuDV{\af@DefaultDomMaxt}\nuV{\af@DefaultDomMaxt}
+ \F{\FHidden}\Ff{\FfReadOnly}
+ ]{\afgraphName theHiddenDom_t.max}{1bp}{1bp}}%
+ \textField[\textSize{0}\nuV{\af@DefaultDomMaxt}
+ \nuDV{\af@DefaultDomMaxt}\BC{0 0 0}\TU{\tt@domMaxP}#1\AA{%
+ \AAKeystroke{\keystrokeDomRng{"\afgraphName theHiddenDom_t.max"}}
+ \AAFormat{\formatVarIntervals{"\afgraphName theHiddenDom_t.max"}}
+ }]{\afgraphName theDom_t.max}{#2}{#3}%
+}
+\newcommand{\ttdomMaxP}[1]{\def\tt@domMaxP{#1}}
+\ttdomMaxP{Enter the maximum value for the variable t}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\formatVarIntervals}
+% \begin{macro}{\keystrokeDomRng}
+% These are format and keystroke functions that support the above
+% domain and range commands.
+% \begin{macrocode}
+\def\formatVarIntervals#1{%
+ try{ formatVarIntervals(#1) } catch(e){};
+}
+\def\keystrokeDomRng#1{%
+ if (event.willCommit) keystrokeDomRng(#1);
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \paragraph{The Number of points to plot.}
+% \begin{macro}{\numPoints}
+% \begin{macro}{\defaultNumPoints}
+% The number of points to use for plotting the specified function.
+% \begin{macrocode}
+\newcommand{\defaultNumPoints}[1]{%
+ \def\af@defaultNumPoints{#1}}
+\defaultNumPoints{40}
+\newcommand\numPoints[3][]{%
+ \textField[\nuV{\af@defaultNumPoints}\nuDV{\af@defaultNumPoints}
+ \Q1\BC{0 0 0}\TU{\tt@numPoints}#1\AA{%
+ \AAKeystroke{if (event.willCommit) keystrokeNumPoints();}}
+ ]{\afgraphName numNodes}{#2}{#3}%
+}
+\newcommand{\ttnumPoints}[1]{\def\tt@numPoints{#1}}
+\ttnumPoints{Enter the number of points to plot}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{Shifting the Graph Screen.}
+% In this section we provide basic control for shifting the graph screen up and down,
+% and left and right. Two new text fields are designed to set the amount of vertical
+% or horizontal shifting.
+%
+% \begin{macro}{\amtShift}
+% Use this text field to enter the amount of horizontal or vertical shift.
+%
+% We have the usual three parameters, optional argument to change the appearance,
+% the width of the form field, the height of the form field.
+% \begin{macrocode}
+\newcommand{\defaultShiftAmt}[1]{%
+ \def\af@defaultShiftAmt{#1}}
+\defaultShiftAmt{1}
+\newcommand{\amtShift}[3][]{%
+ \textField[\nuV{\af@defaultShiftAmt}\nuDV{\af@defaultShiftAmt}\Q1
+ \BC{0 0 0}\TU{\tt@amtShift}#1\AA{\AAKeystroke{%
+ if (event.willCommit) keystrokeAmtShift();
+ }}]{\afgraphName amtshift}{#2}{#3}%
+}
+\newcommand{\ttamtShift}[1]{\def\tt@amtShift{#1}}
+\ttamtShift{Enter the amount to shift, horizontally or vertically}
+% \end{macrocode}
+% \end{macro}
+%
+% For the controls for initiating the shifting action, we can use forms or links. We'll begin
+% by using links.
+% \begin{macro}{\hShiftL}
+% \begin{macro}{\hShiftR}
+% \begin{macro}{\vShiftD}
+% \begin{macro}{\vShiftU}
+% Basic link to initiate the actions of shifting the viewing screen horizontally or vertically
+% an amount equal to the entries in \cs{amtShift}.
+% \begin{macrocode}
+\newcommand{\hShiftL}[2][]{%
+ \setLinkText[#1\A{\JS{%
+ shiftHorVert ("\afgraphName",this.pageNum,"h","-");
+ }}]{#2}%
+}
+\newcommand{\hShiftR}[2][]{%
+ \setLinkText[#1\A{\JS{%
+ shiftHorVert ("\afgraphName",this.pageNum,"h","+");
+ }}]{#2}%
+}
+\newcommand{\vShiftD}[2][]{%
+ \setLinkText[#1\A{\JS{%
+ shiftHorVert ("\afgraphName",this.pageNum,"v","-");
+ }}]{#2}%
+}
+\newcommand{\vShiftU}[2][]{%
+ \setLinkText[#1\A{\JS{%
+ shiftHorVert ("\afgraphName",this.pageNum,"v","+");
+ }}]{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \paragraph{The Zooming in and out.}
+% Coming fresh off the success of the horizontal and vertical shifting commands, let's plough
+% on to zooming in.
+% \begin{macro}{\zoomInOut}
+% This push button control zooms out, with a click, or zoom in with a shift-click.
+% \begin{macrocode}
+\newcommand{\zoomInOut}[3][]{%
+ \pushButton[\BC{0 0 0}\CA{Zoom}\TU{\tt@zoomInOut}#1
+ \A{\JS{%
+ var shiftType = (event.shift) ? "+" : "-";\r
+ zoomInOut ("\afgraphName",this.pageNum,shiftType);
+ }}
+ ]{\afgraphName zoominout}{#2}{#3}%
+}
+\newcommand{\ttzoomInOut}[1]{\def\tt@zoomInOut{#1}}
+\ttzoomInOut{Click to zoom out, shift-click to zoom in}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Non-Interactive Graphing}
+%
+% Use the \cs{setLinkText} command to pass a function name, the number of points, and domain/range
+% information to the graphing screen, without user input. This command is useful for tutorials
+% that would like to create a graph for the student to inspect, or as part of a quiz.
+% \begin{macro}{\sgraphLink}
+% The command \cs{sgraphLink} has four arguments, the first one is an optional argument
+% to modify the appearance of the link; the second argument consist of key-value pairs that
+% are options for the {\AcroFLeX} Graphing system; the third argument is the function of the
+% semi-colon delimited list of points to be plotted; the fourth argument is the text to be used
+% as the link.
+%\begin{verbatim}
+% \sgraphLink[<appearance>]{<graph_key_vals>}{func|points}{<text>}
+%\end{verbatim}
+%\paragraph{Options for the Second Parameter.} We define and briefly discuss
+% a series of keys for the second parameter.
+%
+% \begin{macrocode}
+% \end{macrocode}
+% \DescribeMacro{graph}
+% Curves and points are graphed on chart series. This system uses \texttt{LinearSeries},
+% \texttt{PlotSeries}, and \texttt{AreaSeries}. The {\AcroFLeX} graphing widget provides
+% four series for each of these three. Values of \texttt{c1}, \texttt{c2}, \texttt{c3}, \texttt{c4} for this key graphs the data
+% on a \texttt{LinearSeries}; values of \texttt{p1}, \texttt{p2}, \texttt{p3}, \texttt{p4} plot the data on a \texttt{PlotSeries};
+% and values of \texttt{a1}, \texttt{a2}, \texttt{a3}, \texttt{a4} graphs the data on a \texttt{AreaSeries}.
+% \begin{macrocode}
+\define@choicekey+{afsl}{graph}{c1,c2,c3,c4,p1,p2,p3,p4,%
+ a1,a2,a3,a4}[c1]{\edef\afsl@graph{#1}}{\PackageWarning{acroflex}
+ {Bad choice for the graph key, permissible values are
+ c1, c2, c3,c4, p1, p2, p3, p4, a1, a2, a3, a4. Try again}}
+% \end{macrocode}
+% \DescribeMacro{type}
+% The type of curve this is, \texttt{cart} ($y=f(x)$), \texttt{para}
+% ($x=f(t); y=g(t)$), or \texttt{polar} ($r = f(t)$). When defining a polar function
+% using \cs{sgraphLink}, use \texttt{type=polar} to signal that the curve is a polar function.
+% \changes{v1.6c}{2016/08/29}{Set defaults for type and connectwith}
+% \begin{macrocode}
+\define@choicekey+{afsl}{type}{cart,para,polar}[cart]{%
+ \edef\afsl@type{#1}}{\PackageWarning{acroflex}
+ {Bad choice for the type key, permissible values are
+ cart, para, and polar. Try again}}
+\let\afsl@type\@empty
+% \end{macrocode}
+% \DescribeMacro{connectwith}
+% When the graph is either a \texttt{LinearSeries} or an
+% \texttt{AreaSeries}, the points are connected. Use this key to
+% specify how the points are to be connected. The default values
+% for this key are as follows: for
+% \texttt{graph=cart} it is \texttt{connectwith=curve}, and for
+% \texttt{graph=para} it is \texttt{connectwith=segment}.
+% Use this key to override these defaults. For parametric equations,
+% \texttt{connectwith=curve} is not recommended, the results may not
+% be good. Use of this key is recommended for \texttt{graph=cart}.
+% \begin{macrocode}
+\define@choicekey+{afsl}{connectwith}{curve,segment}[curve]{%
+ \edef\afsl@form{#1}}{\PackageWarning{acroflex}
+ {Bad choice for the connectwith key, permissible values are
+ curve and segment. Try again}}
+\let\afsl@form\@empty
+% \end{macrocode}
+% \DescribeMacro{noquotes}
+% This key is a workaround for the case when the function or data is passed by
+% JavaScript. Used when passing things that are already strings, such as \texttt{event.value}.
+% An example of usage can be found in \texttt{afgraph.tex}.
+% \begin{macrocode}
+\define@choicekey+{afsl}{noquotes}[\val\nr]{true,false}[true]{%
+ \ifcase\nr\relax\def\af@quotes{}\or\def\af@quotes{"}\fi}
+ {\PackageWarning{acroflex}
+ {Bad choice for the noquotes key, permissible values are
+ true and false. Try again}}
+% \end{macrocode}
+% \DescribeMacro{points}
+% Use this key to specify the number of points to generate from the function.
+% The key is ignored if \texttt{PlotSeries} is used, and should not appear, or be set to zero.
+% \begin{macrocode}
+\define@key{afsl}{points}[0]{\edef\afsl@nPoints{#1}}
+% \end{macrocode}
+% \DescribeMacro{xInterval}
+% An interval of numbers on the horizontal axis. This interval determines the
+% domain over which the function of $x$ is to be graphed. The endpoints of this
+% interval also determine the left and right boundaries of the viewing window.
+% \begin{macrocode}
+\define@key{afsl}{xInterval}[]{\edef\afsl@xInterval{#1}}
+% \end{macrocode}
+% \DescribeMacro{xPlot}
+% (10/11/09) Added the \texttt{xPlot} key. With the \texttt{xInterval} key, the interval over which to
+% plot the curve is bound to the scaling on the x-axis. It is now desired to plot
+% a graph over a smaller interval than the one on the x-axis, and \texttt{xPlot} will be used for
+% that purpose; thus one can say \verb!xInterval={[-2,2]},xPlot={[-1,0]}!. If \texttt{xPlot}
+% is not specified, then $\texttt{xPlot}=\texttt{xInterval}$.
+% \begin{macrocode}
+\define@key{afsl}{xPlot}[]{\edef\afsl@xPlot{#1}}
+% \end{macrocode}
+% \DescribeMacro{yInterval}
+% An interval of numbers on the vertical axis. The endpoints of this
+% interval also determine the lower and upper boundaries of the viewing window.
+% \begin{macrocode}
+\define@key{afsl}{yInterval}[]{\edef\afsl@yInterval{#1}}
+% \end{macrocode}
+% \DescribeMacro{tInterval}
+% An interval of numbers on the parameter axis. This interval determines the
+% domain over which a polar function and parametric equations are to be graphed.
+% \texttt{xInterval} and \texttt{yInterval} determines the viewing window.
+% \begin{macrocode}
+\define@key{afsl}{tInterval}[]{\edef\afsl@tInterval{#1}}
+% \end{macrocode}
+% \DescribeMacro{populate}
+% A Boolean value, which if \texttt{true}, signals \texttt{Graph\_xy()} or
+% \texttt{Graph\_xyt()} to populate the interactive field controls. When
+% no controls are provided for the graphing screen, populate should have a
+% value of \texttt{false}.
+% \begin{macrocode}
+\define@choicekey+{afsl}{populate}{true,false}[true]{%
+ \edef\afsl@populate{#1}}{\PackageWarning{acroflex}
+ {Bad choice for the populate key, permissible values are
+ true and false. Try again}}
+% \end{macrocode}
+% \DescribeMacro{wait}
+% When using \cs{defineGraphJS} to create an action with multiple graph events,
+% use \texttt{wait=true}. This setting gives the {\AcroFLeX} graphing widget to
+% receive one set of plotting data before trying to digest another.
+% \begin{macrocode}
+\define@choicekey+{afsl}{wait}{true,false}[true]{%
+ \edef\afsl@wait{#1}}{\PackageWarning{acroflex}
+ {Bad choice for the wait key, permissible values are
+ true and false. Try again}}
+% \end{macrocode}
+% \paragraph*{Set the defaults for all the keys.}
+% All changes are local to each link, so we set global defaults whose values
+% are not changed by the changes as a result of the passing key-value pairs
+% through \cs{sgraphLink}.
+% \begin{macrocode}
+\setkeys{afsl}{graph,points,xInterval,xPlot,yInterval,tInterval,%
+ populate=false,type,connectwith,noquotes=false,wait=false}
+% \end{macrocode}
+% \begin{macro}{\sgraphLink}
+% We finally come to the \cs{sgraphLink}.
+% \begin{macrocode}
+\newcommand{\sgraphLink}[4][]{{%
+ \defineGraphJS{#2}{#3}{\af@sglnkAction}%
+ \setLinkText[#1\A{\JS{\af@sglnkAction}}]{#4}%
+}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\defineGraphJS}
+% The \cs{defineGraphJS} is the JS used to call the \texttt{Graph\_xy()} or \texttt{Graph\_xyt()}
+% JavaScript function defined in this package. It uses the same key-value pairs as the second
+% argument of \cs{sgraphLink}. The command can be used to construct links that graph several
+% curves (or plots) with a link or form action. It can be integrated into the exerquiz quizzing system,
+% using the new key \cs{AddAAKeystroke} of \cs{RespBoxMath}. The use of this key and this command is illustrated
+% in the \texttt{acroflex.tex} demo file.
+%\par\medskip\noindent
+% The \texttt* optional first parameter signals to use \cs{edef} in the subsequent command
+% \cs{af@defineGraphJS}.
+% \begin{macrocode}
+\newcommand{\defineGraphJS}{\@ifstar{\let\AF@exDEF\edef\af@defineGraphJS}
+ {\let\AF@exDEF\xdef\af@defineGraphJS}}
+% \end{macrocode}
+% We continue \cs{defineGraphJS}: The first parameter are key-values of the
+% \texttt{afsl} family; the second parameter is the function; the third is the
+% name to assign the command being defined.
+% modify the appearance of the link; the second parameter
+% \begin{macrocode}
+\newcommand{\af@defineGraphJS}[3]{{\makeJSspecials
+ \edef\af@tmp@exp{\noexpand\setkeys{afsl}{#1}}\af@tmp@exp
+ \ifx\afsl@xPlot\@empty\let\afsl@xPlot\afsl@xInterval\fi
+ \AF@exDEF#3{Graph_xytJS (\af@quotes#2\af@quotes,"\afsl@xInterval",%
+ "\afsl@yInterval","\afsl@xPlot","\afsl@tInterval","\afsl@graph",%
+ \afsl@populate,\afsl@wait,"\afsl@type","\afsl@form","\afgraphName",%
+ \afsl@nPoints)}%
+}}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Document JS in Support of \texorpdfstring{\protect\AcroFLeX}{AcroFleX}}
+%
+% Below are some text macros used in creating error messages. They may be redefined
+% into better English, or another language. Use the definition file \texttt{afcustom.def}
+% to make these re-definitions.
+% \begin{macrocode}
+\defineJSStr{\af@badNumberMsg}{%
+ The value input does not appear to be a number, please enter a
+ number, or an expression that evaluates to a number.}
+\defineJSStr{\af@negNumberMsg}{%
+ The number of points is a positive integer, changing to a
+ positive integer.}
+\defineJSStr{\af@zeroNumberMsg}{%
+ The number of points is a positive integer, changing to the
+ default value of \af@defaultNumPoints.}
+\defineJSStr{\af@negShiftMsg}{%
+ The amount of shift is a positive number, changing to a positive
+ number.}
+\defineJSStr{\af@zeroShiftMsg}{%
+ The amount of shift is a positive number, changing to the
+ default value of 1.}
+\defineJSStr{\af@saveDelSelAlerti}{%
+ There is nothing in the function input text field.}
+\defineJSStr{\af@saveDelSelAlertii}{%
+ You have not defined any points to plot}
+\defineJSStr{\af@graphBtnAlerti}{Undefined graph types}
+% \end{macrocode}
+% \begin{macrocode}
+\begin{insDLJS*}[acroflexLoaded]{afgrfJS}
+\begin{newsegment}{AF: AcroFLeX Graphing Bundle}
+/*
+ Document Level JavaScript
+ AcroFLeX Graphing Bundle
+ D. P. Story copyright 2008-\the\year
+*/
+var acroflexLoaded = true;
+var _mathVars="xt";
+var aGraphData = new Array();
+var ck4PtsRe = /\(.+,.+\)/;
+var badNumberMsg=\af@badNumberMsg;
+var negNumberMsg=\af@negNumberMsg;
+var zeroNumberMsg=\af@zeroNumberMsg;
+var negShiftMsg=\af@negShiftMsg;
+var zeroShiftMsg=\af@zeroShiftMsg;
+var saveDelSelAlerti=\af@saveDelSelAlerti;
+var saveDelSelAlertii=\af@saveDelSelAlertii;
+var graphBtnAlerti=\af@graphBtnAlerti;
+var scratchCounter=0;
+var aTimeOutArray = new Array();
+var afSuffixes = new Array("ComboSelect","theFunction",
+ "amtShift","theDom","theRng", "theDom_t",
+ "Rng_t","numNodes");
+\end{newsegment}
+\begin{newsegment}{AF: Graphing Functions}
+% \end{macrocode}
+% \DescribeMacro{Graph\_xy} Graphs a function of a single variable in the rectangular
+% coordinate system.
+%
+% The \texttt{Graph\_xy} function takes four or more arguments. In interactive
+% mode, it takes four.
+%\begin{enumerate}
+% \item \texttt{graph\_props}: (Needs Revision) This is a signal for the type of graphing requested.
+% \texttt{c1,...,c4} for continuous plotting; and \texttt{p1,...,p4} for discrete
+% plotting. There are four of these types.
+% \item \texttt{baseName}: The base name of the graphing environment. This is used to
+% build the field names for the controls, if any, on the page.
+% \item \texttt{pNum}: The page number of the target rich media annot. This together
+% with \texttt{baseName} is enough information to get the AnnotRichMedia object using
+% the \texttt{Doc.AnnotRichMedia} method.
+%\end{enumerate}
+% When in interactive mode, we get the function to be graphed, the domain of $x$
+% the range of $y$, and the number of points to plot from form fields.
+% \begin{itemize}
+% \item The function is input by the user into the field \texttt{baseName+"theFunction"},
+% but we get the JS version from \texttt{baseName+"theHiddenFunction"}.
+% When the user enters a function, it is parsed, and changed into a proper JS
+% expression: \verb!2x^2sin(x)! becomes \verb!2*Math.pow(x,2)*Math.sin(x)!.
+%
+% \item The domain and range values are input by the user through the fields, having field names of
+% \texttt{baseName+"theDom.min"}, \texttt{baseName+"theDom.max"}, \texttt{baseName+"theRng.min"},
+% and \texttt{baseName+"theRng.max"}, but we retrieve the values from hidden fields.
+% See \texttt{getDomRng} below for the listing of the hidden fields.
+% When the user enters domain/range info, this info is parsed and made into
+% property JS expressions. In this way, the user can enter symbolics like \texttt{PI}
+% or \texttt{sin(PI/3)}, or do arithmetic, like \texttt{2 + 1/3}.
+%
+% \item The number of points to plot is obtained from \texttt{baseName+"numNodes"},
+% no preprocessing is used.
+%
+% \end{itemize}
+%
+% \noindent When the number of arguments is greater than four, we are in non-interactive
+% mode. The 5th argument is the JS function to graph; the 6th is the number of
+% points to plot; the 7th is an object containing the domain
+%
+% \paragraph{Notes on the Modes.} There are three modes of operation: interactive, populate,
+% and silent.
+%\begin{itemize}
+% \item \textbf{Interactive:} This occurs when the user enters a
+% function through the UI. In this case the number of arguments
+% passed to \texttt{Graph\_xy} (or \texttt{Graph\_xyt}) is only four.
+% The number of \texttt{arguments} is determined by the arguments
+% object, and the switch \texttt{afInteractive} is set to
+% \texttt{true}. For this mode
+%
+% The following controls are \emph{required}: \cs{fileInputField},
+% \cs{graphBtn}, \cs{domMin}, \cs{domMax}, \cs{rngMin}, \cs{rngMax},
+% and \cs{numPoints}. If parametric or polar graphs are to be used,
+% then \cs{domMinP} and \cs{domMaxP} are also required. The other
+% controls are \emph{optional}, \cs{graphClrBtn} (recommended),
+% \cs{amtShift} (and \cs{hShiftL},
+% \cs{hShiftR},\cs{vShiftD},\cs{vShiftU}) and \cs{zoomInOut}.
+%
+% \item \textbf{Populate:} This mode occurs when the graphing parameters
+% are passed to \texttt{Graph\_xy} (or \texttt{Graph\_xyt}) by \cs{sgraphLink}
+% (or some other command). All the essential information is passed as arguments,
+% so the number of arguments is greater than four. The command initiating the
+% graphing should set the \texttt{graph\_props.populate} to \texttt{true}. In this
+% case the graphing data populate the required fields and the graph will be drawn.
+% It is the document author's responsibility to only use populate on graphing screens
+% that have all the required control fields. \texttt{Graph\_xy} (and \texttt{Graph\_xyt})
+% checks the value of the \texttt{graph\_props.populate} property, and sets the switch
+% \texttt{populate} to \texttt{true}.
+%
+% Populate behave exactly like interactive, but the graphing data is passed to it in pre-packaged
+% for my the document author; the user, however, can manipulate the curve once it appears.
+%
+% The required controls are the same as the interactive mode.
+%
+% \item \textbf{Silent:} This is a non-interactive mode, there must be no controls other than
+% \cs{graphClrBtn}. Basically, the author prepares some pre-packaged graphs to be displayed
+% to the user, without interaction. These may go along with a tutorial discussion symmetry,
+% periodicity, tangent lines, etc.
+%
+%\end{itemize}
+% \begin{macrocode}
+function Graph_xy(graph_props, baseName, pNum)
+{
+ _mathVars="x";
+ var afInteractive = (arguments.length <= 3);
+ if (afInteractive) {
+ var f = this.getField(baseName+"theHiddenFunction").value;
+% \end{macrocode}
+% If the file input field does not contain a Cartestian point $(a,b)$,
+% but it does contain a semi-colon, we figure what is entered is a
+% set of parametric equations.
+% \begin{macrocode}
+ if ( !ck4PtsRe.test(f) && (f.indexOf(";")!=-1) ) {
+ var dt = this.getField(baseName+"theDom_t.min");
+ if ( dt == null ) {
+ syntaxError(); return;
+ }
+ Graph_xyt(graph_props, baseName, pNum);
+ return;
+ }
+ f = this.getField(baseName+"theHiddenFunction").value;
+ }
+ createGraphData(baseName);
+ var which_graph=graph_props.graph;
+ var populate = false;
+ graph_props.type="cart";
+ var aWhichGraph=/(c|p|a)(\d)/.exec(which_graph);
+ if ( aWhichGraph==null ) aWhichGraph=["","c","1"];
+ var isGraph = (aWhichGraph[1]=="c" || aWhichGraph[1]=="a");
+ var connectPoints=false;
+ var plotPoints=false;
+ var wait = false;
+ switch(aWhichGraph[1]) {
+ case "p":
+ var which_series="p"+aWhichGraph[2];
+ plotPoints=true;
+ break;
+ case "a":
+ var which_series="a"+aWhichGraph[2];
+ break;
+ default:
+ var which_series="c"+aWhichGraph[2];
+ }
+ graph_props.graph=which_series;
+% \end{macrocode}
+% Get domain and range of x and y, respectively
+% obtain in math environment so we can evaluate
+% any symbolic constants, such as \texttt{Math.PI}
+% \begin{macrocode}
+ if (afInteractive) var oDR = getDomRng (baseName);
+ else {
+ wait=graph_props.wait;
+ populate = graph_props.populate;
+ var oDR = arguments[5];
+ if (populate) populateDomRng(baseName,oDR);
+ for ( var o in oDR ) oDR[o] = EvalParse(oDR[o]);
+ }
+ aGraphData[baseName].aDomRngs = oDR;
+% \end{macrocode}
+% calculate width of intervals. If the user has passed a subinterval to us, then
+% \texttt{oDR.x\_min} would be defined, and we use it to compute the range.
+% \begin{macrocode}
+ var rng_x = (typeof oDR.x_u=="undefined") ?
+ (oDR.x_max - oDR.x_min) : (oDR.x_u - oDR.x_l);
+ /* Get the function and calculated the plotted points */
+ if (afInteractive) {
+ var n = Number(this.getField(baseName+"numNodes").value);
+ if ( isNaN(n) || n <=0 ) n = \af@defaultNumPoints;
+ } else {
+ var f = ParseInput(arguments[2+1]);
+ var n = Number(arguments[2+2]);
+ if (populate) {
+ this.getField(baseName+"theFunction").value=arguments[2+1];
+ this.getField(baseName+"numNodes").value=n;
+ }
+ if (isGraph) {
+% \end{macrocode}
+% Is there a function there? We use n to determine
+% that, if $n > 0$ we assume a function; otherwise, we
+% assume plotted points to be connected.
+% \begin{macrocode}
+ connectPoints = ( n <= 0 );
+ if ( connectPoints ) plotPoints = true;
+ // passing points to be plotted, not connected
+ } else plotPoints = true;
+ }
+% \end{macrocode}
+% Before we calculate the points, let's record what we are graphing.
+% \begin{macrocode}
+ if (afInteractive || populate)
+ updateGraphData(graph_props,baseName,f);
+% \end{macrocode}
+% Now we begin calculating the points to plot.
+% \begin{macrocode}
+ var plot_x, plot_y;
+ var x = (typeof oDR.x_u=="undefined") ? oDR.x_min : oDR.x_l;
+ var h = rng_x / n;
+ var thismax = (typeof oDR.x_u=="undefined") ? oDR.x_max : oDR.x_u;
+% \end{macrocode}
+% The plotted data will be accumulated as XML
+% \begin{macrocode}
+ var cPlotData=<points></points>;
+% \end{macrocode}
+% We strip out anything of the form \texttt{"y = "}, \texttt{"x = "} or \texttt{"r = "},
+% allowing the user to enter the expressions in equational form \verb!"y = x^2"!, for example.
+% \begin{macrocode}
+ var aSearchResults=/(([a-zA-Z])\s*=\s*)/.exec(f);
+ if ( aSearchResults != null) {
+ if ( aSearchResults[2] != "y" && aSearchResults[2] != "r" ) {
+ syntaxError(); return;
+ }
+ }
+% \end{macrocode}
+% This allows functions of the form $y=f(x)$, $r=f(x)$, $y=f(t)$, $r=f(t)$.
+% \begin{macrocode}
+ f = f.replace(/(([a-zA-Z])\s*=\s*)/g,"");
+% \end{macrocode}
+% \begin{macrocode}
+ if ( isGraph && !plotPoints ) {
+ for (var i=0; i<=n; i++)
+ {
+% \end{macrocode}
+% We evaluate the function, and try to detect any errors. If an exception is thrown,
+% we display an \textsf{exerquiz} \texttt{syntaxError()} message. If the result is not
+% a number, we skip over it.
+% \begin{macrocode}
+ try { with(Math) {_y = eval(f);} }
+ catch(e) {
+% \end{macrocode}
+% We have thrown an exception, so either this is bad code, or the user wants us
+% to plot this as a polar function. We'll try, but if we're wrong, we'll throw an
+% exception in \texttt{Graph\_xyt()}.
+% \begin{macrocode}
+ var paraEqs = "("+f+")*Math.cos(t);("+f+")*Math.sin(t)";
+ graph_props.type="polar";
+ this.getField(baseName
+ +"theHiddenFunction").value=paraEqs;
+ Graph_xyt(graph_props, baseName, pNum);
+ return;
+ }
+ // If not a number then skip over.
+ if (isFinite(_y))
+ {
+ plot_x = util.printf("\%.10f", x);
+ plot_y = util.printf("\%.10f", _y);
+% \end{macrocode}
+% We add the latest data point to the end of the XMList
+% \begin{macrocode}
+ cPlotData.points[cPlotData..point.length()]=
+ <point><x>{plot_x}</x><y>{plot_y}</y></point>
+ }
+ x += h;
+ }
+ } else { // prepare to data for plotting
+% \end{macrocode}
+% At this point the variable f should be a string of
+% points to plot.\\
+% \hspace*{30pt}\texttt{f = "(0,1);(2,2);(4,2);...;(5,3)"}.\\
+% It's not clear whether the abcissas need to be sorted in
+% increasing order, or whether FLEX is smart enough to do
+% that. We'll assume the latter case.
+% \begin{macrocode}
+ var afBegin = (f.indexOf("\(")+1);
+ var afEnd = f.lastIndexOf("\)");
+ cPlotData=f.substring(afBegin,afEnd);
+ var re = /\)\s*;\s*\(/;
+ aPlotData= cPlotData.split(re);
+ var cPlotData=<points></points>;
+ with (Math) {
+ for ( var i=0; i<aPlotData.length; i++) {
+ var cTmp = "["+aPlotData[i]+"]";
+ var aTmp = eval(cTmp);
+% \end{macrocode}
+% We add the latest data point to the end of the XMList
+% \begin{macrocode}
+ cPlotData.points[cPlotData..point.length()]=
+ <point><x>{aTmp[0]}</x><y>{aTmp[1]}</y></point>
+ }
+ }
+ }
+ cPlotData=cPlotData.toXMLString();
+ var annot = this.getAnnotRichMedia(pNum,"afRM"+baseName);
+ if ( annot )
+ {
+ if (!annot.activated || wait ) {
+ annot.activated=true;
+ afWait4Activation(
+ graph_props,baseName,pNum,oDR,cPlotData,50);
+ }
+ else
+ annot.callAS("getPlotData", graph_props, oDR, cPlotData);
+ }
+}
+% \end{macrocode}
+% \DescribeMacro{Graph\_xyt} This function graphs a set of parametric equations in the
+% rectangular coordinate system. The function pair is delimited by a semi-colon, early
+% in the code we get the function and test whether the function has a semi-colon in its
+% definition, so not, we send assume it is a function of a single variable, and send it
+% off to \texttt{Graph\_xy}.
+%
+% For silent mode, the parameters are the same, except that there are two extra arguments,
+% the endpoints of the parameter, $t$. The last argument is a Boolean, the author wants the
+% graphing data to populate the corresponding fields so user can manipulate.
+% \begin{macrocode}
+function Graph_xyt(graph_props, baseName, pNum)
+{
+ _mathVars="t";
+ var which_graph=graph_props.graph;
+ var populate = false;
+ var afInteractive = (arguments.length <= 3);
+ if (afInteractive) {
+ var f = this.getField(baseName+"theHiddenFunction").value;
+ if ( ck4PtsRe.test(f) || (f.indexOf(";")==-1) ) {
+ Graph_xy(graph_props, baseName, pNum);
+ return;
+ }
+ f = this.getField(baseName+"theHiddenFunction").value;
+ }
+ createGraphData(baseName);
+ if ( graph_props.type!="polar") graph_props.type="para";
+ var aWhichGraph=/(c|p|a)(\d)/.exec(which_graph);
+ if ( aWhichGraph==null ) aWhichGraph=["","c","1"];
+ var isGraph = (aWhichGraph[1]=="c" || aWhichGraph[1]=="a");
+ var connectPoints=false;
+ var plotPoints=false;
+ var wait=false;
+ switch(aWhichGraph[1]) {
+ case "p":
+ var which_series="p"+aWhichGraph[2];
+ plotPoints=true;
+ break;
+ case "a":
+ var which_series="a"+aWhichGraph[2];
+ break;
+ default:
+ var which_series="c"+aWhichGraph[2];
+ }
+ graph_props.graph=which_series;
+% \end{macrocode}
+% Get domain and range of x and y, respectively
+% obtain in math environment so we can evaluate
+% any symbolic constants, such as \texttt{Math.PI}
+% \begin{macrocode}
+ if (afInteractive) {
+ var oDR = getDomRng (baseName);
+ var oDp = getParaDom (baseName);
+ }
+ else {
+ wait=graph_props.wait;
+ populate = graph_props.populate;
+ var oDR = arguments[5];
+ if (populate) populateDomRng(baseName,oDR);
+ for ( var o in oDR ) oDR[o] = EvalParse(oDR[o]);
+ var oDp = arguments[6];
+ if (populate) populateParaDom(baseName,oDp);
+ for ( var o in oDp ) oDp[o] = EvalParse(oDp[o]);
+ }
+ aGraphData[baseName].aDomRngs = oDR;
+ aGraphData[baseName].aDom_P = oDp;
+% \end{macrocode}
+% calculate width of intervals
+% \begin{macrocode}
+ var rng_t = oDp.t_max - oDp.t_min;
+ /* Get the function and calculated the plotted points */
+ if (afInteractive) {
+ var n = Number(this.getField(baseName+"numNodes").value);
+ if ( isNaN(n) || n <=0 ) n = \af@defaultNumPoints;
+ } else {
+% \end{macrocode}
+% If this is polar, then we need to check if it has been parsed yet.
+% \begin{macrocode}
+ var f = arguments[2+1];
+ if ( graph_props.type=="polar") {
+ if(f.indexOf(";")==-1) {
+ f = "("+f+")*cos(t);("+f+")*sin(t)";
+ f = ParseInput(f);
+ }
+ } else
+ f = ParseInput(f);
+ var n = Number(arguments[2+2]);
+ if (populate) {
+ this.getField(baseName+"theHiddenFunction").value=f;
+ this.getField(baseName+"theFunction").value=arguments[2+1];
+ this.getField(baseName+"numNodes").value=n;
+ }
+ if (isGraph) {
+% \end{macrocode}
+% Is there a function there? We use n to determine
+% that, if $n > 0$ we assume a function; otherwise, we
+% assume plotted points to be connected.
+% \begin{macrocode}
+ connectPoints = ( n <= 0 );
+ if ( connectPoints ) plotPoints = true;
+ // passing points to be plotted, not connected
+ } else plotPoints = true;
+ }
+% \end{macrocode}
+% Before we calculate the points, let's record what we are graphing.
+% \begin{macrocode}
+ if (afInteractive || populate)
+ updateGraphData(graph_props,baseName,f);
+% \end{macrocode}
+% We strip out anything of the form \texttt{"y = "}, \texttt{"x = "} or \texttt{"r = "},
+% allowing the user to enter the expressions in equational form \texttt{"r = 1+sin(t)"},
+% or \texttt{x=sin(t); y = cos(t)}, for example.
+% \begin{macrocode}
+ var aFunction = f.split(";");
+ var x_function = aFunction[0];
+ var y_function = aFunction[1];
+ var aSearchResults=/(([a-zA-Z])\s*=\s*)/.exec(x_function);
+ if ( aSearchResults != null && aSearchResults[2] != "x") {
+ syntaxError(); return;
+ }
+ x_function = x_function.replace(/(([a-zA-Z])\s*=\s*)/g,"");
+ aSearchResults=/(([a-zA-Z])\s*=\s*)/.exec(y_function);
+ if ( aSearchResults != null && aSearchResults[2] != "y") {
+ syntaxError(); return;
+ }
+ y_function = y_function.replace(/(([a-zA-Z])\s*=\s*)/,"");
+ var plot_x, plot_y;
+ var t = oDp.t_min;
+ var h = rng_t / n;
+ var thismax = oDp.t_max;
+% \end{macrocode}
+% The plotted data will be accumulated as XML
+% \begin{macrocode}
+ var cPlotData=<points></points>;
+% \end{macrocode}
+% \begin{macrocode}
+ if ( isGraph && !plotPoints ) {
+ for (var i=0; i<=n; i++)
+ {
+% \end{macrocode}
+% We evaluate the function, and try to detect any errors. If an exception is thrown,
+% we display an \textsf{exerquiz} \texttt{syntaxError()} message. If the result is not
+% a number, we skip over it.
+% \begin{macrocode}
+ try {
+ with(Math) {
+ _x = eval(x_function);
+ _y = eval(y_function);
+ }
+ } catch(e) { syntaxError(); return;}
+ // If not a number then skip over.
+ if (isFinite(_x)&&isFinite(_y))
+ {
+ plot_x = util.printf("\%.10f", _x);
+ plot_y = util.printf("\%.10f", _y);
+% \end{macrocode}
+% We add the latest data point to the end of the XMList
+% \begin{macrocode}
+ cPlotData.points[cPlotData..point.length()]=
+ <point><x>{plot_x}</x><y>{plot_y}</y></point>
+ }
+ t += h;
+ }
+ } else { // prepare to data for plotting
+% \end{macrocode}
+% At this point the variable f should be a string of
+% points to plot.\\
+% \hspace*{30pt}\texttt{f = "(0,1);(2,2);(4,2);...;(5,3)"}.\\
+% It's not clear whether the abcissas need to be sorted in
+% increasing order, or whether FLEX is smart enough to do
+% that. We'll assume the latter case.
+% \begin{macrocode}
+ var afBegin = (f.indexOf("\(")+1);
+ var afEnd = f.lastIndexOf("\)");
+ cPlotData=f.substring(afBegin,afEnd);
+ var re = /\)\s*;\s*\(/;
+ aPlotData= cPlotData.split(re);
+ var cPlotData=<points></points>;
+ with (Math) {
+ for ( var i=0; i<aPlotData.length; i++) {
+ var cTmp = "["+aPlotData[i]+"]";
+ var aTmp = eval(cTmp);
+% \end{macrocode}
+% We add the latest data point to the end of the XMList
+% \begin{macrocode}
+ cPlotData.points[cPlotData..point.length()]=
+ <point><x>{aTmp[0]}</x><y>{aTmp[1]}</y></point>
+ }
+ }
+ }
+ cPlotData=cPlotData.toXMLString();
+ var annot = this.getAnnotRichMedia(pNum,"afRM"+baseName);
+ if ( annot )
+ {
+ if (!annot.activated || wait ) {
+ annot.activated=true;
+ afWait4Activation(
+ graph_props,baseName,pNum,oDR,cPlotData,50);
+ }
+ else
+ annot.callAS("getPlotData", graph_props, oDR, cPlotData);
+ }
+}
+function createGraphData(baseName)
+{
+ if( aGraphData[baseName] == undefined ) {
+ aGraphData[baseName] = new Object();
+ aGraphData[baseName].aDomRngs=new Object();
+ aGraphData[baseName].aDom_P=new Object();
+ aGraphData[baseName].current = new Array();
+ }
+}
+% \end{macrocode}
+% This function is called by the \texttt{Graph\_xy} or \texttt{Graph\_xyt}
+% and updates the graphing data we are trying to track.
+%
+% Properties of the object
+% \verb!aGraphData[baseName].current[which_graph]! object are
+% \texttt{hiddenFN} (a string of the hidden JS version of the
+% function), \texttt{appearFN} (a string of the function the user
+% sees), and \texttt{graph\_props} (the graph properties passed from
+% \texttt{Graph\_xy} or \texttt{Graph\_xyt}.
+% \begin{macrocode}
+function updateGraphData(graph_props,baseName,f)
+{
+ var which_graph=graph_props.graph;
+ if (aGraphData[baseName].current[which_graph] == undefined)
+ aGraphData[baseName].current[which_graph]=new Object();
+ aGraphData[baseName].current[which_graph].appearFN
+ =this.getField(baseName+"theFunction").value;
+ aGraphData[baseName].current[which_graph].hiddenFN=f;
+ aGraphData[baseName].current[which_graph].graph_props=graph_props;
+}
+\end{newsegment}
+% \end{macrocode}
+% When there are more than three arguments, we are in non-interactive mode.
+% The 4th-7th arguments are the domain and range that the graph should be
+% set to on reset.
+%
+% In the flash widget, we call the function \texttt{clearPlotData}, the parameters
+% of which are
+%\begin{verbatim}
+% clearPlotData(graph_props:Object, oDR:Object)
+%\end{verbatim}
+% \begin{macrocode}
+\begin{newsegment}{AF: Supporting Form Fields}
+function clearGraph(graph_opts,baseName, pNum)
+{
+ which_graph=graph_opts.graph;
+ var aWhichGraph=/(c|p|a)(\d)/.exec(which_graph);
+ if ( aWhichGraph==null ) aWhichGraph=["","c","1"];
+ var isGraph = (aWhichGraph[1]=="c" || aWhichGraph[1]=="a");
+ switch(aWhichGraph[1]) {
+ case "p":
+ var which_series="p"+aWhichGraph[2];
+ break;
+ case "a":
+ var which_series="a"+aWhichGraph[2];
+ break;
+ default:
+ var which_series="c"+aWhichGraph[2];
+ }
+ ProcessIt = false;
+ afResetForms = new Array ();
+ for (var i=0; i<afSuffixes.length; i++)
+ afResetForms.push(baseName+afSuffixes[i]);
+ this.resetForm(afResetForms);
+ ProcessIt = true;
+% \end{macrocode}
+% Now reset the array of graphs plotted.
+% \begin{macrocode}
+ if ( aGraphData[baseName] == undefined ) return;
+ try { aGraphData[baseName].current = new Array(); } catch(e) {}
+ var oDR = getDomRng (baseName);
+ var annot = this.getAnnotRichMedia(pNum,"afRM"+baseName);
+ if ( annot )
+ {
+ annot.callAS("clearPlotData", {graph:"all"}, oDR);
+ }
+ if (event.shift) annot.activated=false;
+}
+function stripBrackets(aStr) {
+ var afBegin = (aStr.indexOf("[")+1);
+ var afEnd = aStr.lastIndexOf("]");
+ aStr= aStr.substring(afBegin,afEnd);
+ return aStr;
+}
+function EvalParse(str) {
+ return eval(ParseInput(String(str)));
+}
+function getDomRng (baseName)
+{
+ var x_min, x_max, y_min, y_max;
+ if ( baseName == null )
+ return { x_min: \af@DefaultDomMin, y_min: \af@DefaultRngMin,
+ x_max: \af@DefaultDomMax, y_max: \af@DefaultRngMax };
+ var f = this.getField(baseName+"theHiddenDom.min");
+ if ( f == null ) {
+ f = aGraphData[baseName].aDomRngs;
+ if ( f == null )
+ aGraphData[baseName].aDomRngs = {
+ x_min: \af@DefaultDomMin, y_min: \af@DefaultRngMin,
+ x_max: \af@DefaultDomMax, y_max: \af@DefaultRngMax };
+ } else {
+ x_min=eval(this.getField(baseName+"theHiddenDom.min").value);
+ x_max=eval(this.getField(baseName+"theHiddenDom.max").value);
+ y_min=eval(this.getField(baseName+"theHiddenRng.min").value);
+ y_max=eval(this.getField(baseName+"theHiddenRng.max").value);
+ aGraphData[baseName].aDomRngs={
+ x_min: x_min, y_min: y_min,
+ x_max: x_max,y_max: y_max };
+ }
+ return aGraphData[baseName].aDomRngs;
+}
+function populateDomRng(baseName,oDR)
+{
+ try{this.getField(baseName+"theDom.min").value=oDR.x_min}catch(e){};
+ try{this.getField(baseName+"theDom.max").value=oDR.x_max}catch(e){};
+ try{this.getField(baseName+"theRng.min").value=oDR.y_min}catch(e){};
+ try{this.getField(baseName+"theRng.max").value=oDR.y_max}catch(e){};
+}
+function getParaDom (baseName)
+{
+ var t_min, t_max;
+ if ( baseName == null )
+ return { t_min: \af@DefaultDomMint, t_max: \af@DefaultDomMaxt };
+ var f = this.getField(baseName+"theHiddenDom_t.min");
+ if ( f == null ) {
+ f = aGraphData[baseName].aDom_P;
+ if ( f == null )
+ aGraphData[baseName].aDom_P = {
+ t_min: \af@DefaultDomMint,
+ t_max: \af@DefaultDomMaxt };
+ } else {
+ t_min=eval(this.getField(baseName+"theHiddenDom_t.min").value);
+ t_max=eval(this.getField(baseName+"theHiddenDom_t.max").value);
+ aGraphData[baseName].aDom_P={ t_min: t_min, t_max: t_max };
+ }
+ return aGraphData[baseName].aDom_P;
+}
+function populateParaDom(baseName,oDp)
+{
+ try{this.getField(baseName+"theDom_t.min").value=oDp.t_min}
+ catch(e){};
+ try{this.getField(baseName+"theDom_t.max").value=oDp.t_max}
+ catch(e){};
+}
+function afWait4Activation (graph_props, baseName, pNum,%
+oDR, cPlotData, delay) {
+ var annotName = "afRM"+baseName;
+ scratchCounter += 1;
+ aTimeOutArray[scratchCounter] = app.setTimeOut(%
+'this.getAnnotRichMedia('+pNum+',"'
+ +annotName+'").callAS("getPlotData",'
+ + 'aTimeOutArray['+scratchCounter+'].graph_props,'
+ + 'aTimeOutArray['+scratchCounter+'].oDR,'
+ + 'aTimeOutArray['+scratchCounter+'].cPlotData)',50);
+ aTimeOutArray[scratchCounter].graph_props=graph_props;
+ aTimeOutArray[scratchCounter].oDR=oDR;
+ aTimeOutArray[scratchCounter].cPlotData=cPlotData;
+}
+function shiftHorVert (baseName,pNum,horVert,posNeg) {
+ var amtShift=baseName+"amtshift";
+ if ( horVert=="h" ) {
+ var LEP = baseName+"theDom.min";
+ var UEP= baseName+"theDom.max";
+ } else {
+ var amtShift=baseName+"amtshift";
+ var LEP = baseName+"theRng.min";
+ var UEP= baseName+"theRng.max";
+ }
+ var amtSft=this.getField(amtShift).value
+ amtSft=EvalParse(amtSft);
+ var gf_l=this.getField(LEP);
+ var gfv_l=Number(EvalParse(gf_l.value));
+ gf_l.value = (posNeg=="+") ?
+ (gfv_l+(Math.abs(amtSft))) : (gfv_l-(Math.abs(amtSft)));
+ gf_u=this.getField(UEP);
+ gfv_u=Number(EvalParse(gf_u.value));
+ gf_u.value = (posNeg=="+") ?
+ (gfv_u+(Math.abs(amtSft))) : (gfv_u-(Math.abs(amtSft)));
+ var g = aGraphData[baseName].aDomRngs;
+ var oPts = this.getField(baseName+"numNodes");
+ var nPts = ( oPts == null ) ? \af@defaultNumPoints : oPts.value;
+ if ( horVert=="h" ) {
+ g.x_min=gf_l.value;g.x_max=gf_u.value;
+ } else {
+ g.y_min=gf_l.value;g.y_max=gf_u.value;
+ }
+ var p = aGraphData[baseName].aDom_P;
+ for ( var o in aGraphData[baseName].current )
+ {
+ var gd = aGraphData[baseName].current[o];
+ gd.graph_props.populate=true;
+ if ( gd.graph_props.type=="cart" ) {
+ Graph_xy(gd.graph_props,baseName,pNum,
+ gd.appearFN,nPts,g);
+ } else { // gd.graph_props.type=="para"
+ Graph_xyt(gd.graph_props,baseName,pNum,
+ gd.appearFN,nPts,g,p);
+ }
+ }
+}
+function zoomInOut (baseName,pNum,posNeg) {
+ var amtShift=baseName+"amtshift";
+ var g = aGraphData[baseName].aDomRngs;
+ var oPts = this.getField(baseName+"numNodes");
+ var nPts = ( oPts == null ) ? \af@defaultNumPoints : oPts.value;
+// Begin horizontal calculations
+ var LEP = baseName+"theDom.min";
+ var UEP= baseName+"theDom.max";
+ var amtSft=this.getField(amtShift).value
+ amtSft=EvalParse(amtSft);
+ var gf_l=this.getField(LEP);
+ var gfv_l=Number(EvalParse(gf_l.value));
+ gf_l.value = (posNeg=="+") ?
+ (gfv_l+(Math.abs(amtSft))) : (gfv_l-(Math.abs(amtSft)));
+ gf_u=this.getField(UEP);
+ gfv_u=Number(EvalParse(gf_u.value));
+ gf_u.value = (posNeg=="+") ?
+ (gfv_u-(Math.abs(amtSft))) : (gfv_u+(Math.abs(amtSft)));
+% \end{macrocode}
+% Update the \texttt{aGraphData[baseName].aDomRngs} object for horizontal parameters
+% \begin{macrocode}
+ g.x_min=gf_l.value;
+ g.x_max=gf_u.value;
+// Begin vertical calculations
+ var LEP = baseName+"theRng.min";
+ var UEP= baseName+"theRng.max";
+ var gf_l=this.getField(LEP);
+ var gfv_l=Number(EvalParse(gf_l.value));
+ gf_l.value = (posNeg=="+") ?
+ (gfv_l+(Math.abs(amtSft))) : (gfv_l-(Math.abs(amtSft)));
+ gf_u=this.getField(UEP);
+ gfv_u=Number(EvalParse(gf_u.value));
+ gf_u.value = (posNeg=="+") ?
+ (gfv_u-(Math.abs(amtSft))) : (gfv_u+(Math.abs(amtSft)));
+% \end{macrocode}
+% Update the \texttt{aGraphData[baseName].aDomRngs} object for vertical parameters
+% \begin{macrocode}
+ g.y_min=gf_l.value;
+ g.y_max=gf_u.value;
+ var p = aGraphData[baseName].aDom_P;
+ for ( var o in aGraphData[baseName].current )
+ {
+ var gd = aGraphData[baseName].current[o];
+ if ( gd.graph_props.type=="cart" ) {
+ Graph_xy(gd.graph_props,baseName,pNum,
+ gd.appearFN,nPts,g);
+ } else { // gd.graph_props.type=="para"
+ Graph_xyt(gd.graph_props,baseName,pNum,
+ gd.appearFN,nPts,g,p);
+ }
+ }
+}
+function saveDelSelAction (baseName)
+{
+ var f = this.getField(baseName+"theFunction");
+ var s = this.getField(baseName+"ComboSelect");
+ if ( f != null && s != null ) {
+ var nIndx = s.currentValueIndices;
+ var cExportV=s.getItemAt(s.currentValueIndices,true);
+ var cAppearV=s.getItemAt(s.currentValueIndices,false);
+ if (event.shift) {
+ s.deleteItemAt(s.currentValueIndices);
+ s.insertItemAt(cAppearV,("<"+cAppearV+"\afunused>"),nIndx);
+ s.currentValueIndices=nIndx;
+ f.value="<"+cAppearV+"\afunused>";
+ } else {
+ var newFunc = f.value;
+ var newFunc_tmp = newFunc.replace(/\s/g,"");
+ if ( newFunc_tmp == "" ) {
+ app.alert({cTitle:"AcroFLeX Graphing",
+ cMsg:saveDelSelAlerti});
+ } else { // something there, let's test it
+ if(/\afploti/.test(cAppearV) ) {
+ if (ck4PtsRe.test(newFunc)) {
+ // A set of points to plot
+ s.deleteItemAt(s.currentValueIndices);
+ s.insertItemAt(cAppearV,newFunc,nIndx);
+ s.currentValueIndices=nIndx;
+ } else {/* does not appear to be a point */
+ app.alert({cTitle:"AcroFLeX Graphing",
+ cMsg:saveDelSelAlertii});
+ }
+ } else {/* not plot, must be curve*/
+ s.deleteItemAt(s.currentValueIndices);
+ s.insertItemAt(cAppearV,newFunc,nIndx);
+ s.currentValueIndices=nIndx;
+ }
+ }
+ }
+ }
+}
+function graphBtnAction (baseName,pNum)
+{
+ var s = this.getField(baseName+"ComboSelect");
+ var d;
+ var d, plot_curve="c1";
+ if ( s != null ) {
+ var nIndx = s.currentValueIndices;
+ var cAppearV=s.getItemAt(s.currentValueIndices,false);
+ if ( ( d = /\afploti\s+(\d)/.exec(cAppearV) ) != null ) {
+ plot_curve="p"+d[1];
+ } else {
+ if ( ( d = /\afcurvei\s+(\d)/.exec(cAppearV) ) != null ) {
+ plot_curve="c"+d[1];
+ } else {
+ app.alert({cTitle:"AcroFLeX Graphing",
+ cMsg:graphBtnAlerti});
+ }
+ }
+ }
+ Graph_xy({graph:plot_curve},baseName,pNum);
+}
+function afsplitInterval(cInterval)
+{
+ var aDomTmp=stripBrackets(cInterval);
+ aDomTmp=aDomTmp.split(",");
+ return { LEP: aDomTmp[0], UEP: aDomTmp[1] };
+}
+\end{newsegment}
+\begin{newsegment}{AF: Keystroke/Formatting Functions}
+function keystrokeDomRng (fname)
+{
+ if (event.willCommit) {
+ var retn = ParseInput(event.value);
+ if ( !retn ) event.rc = false;
+ else {
+ try { eval ( retn ) }
+ catch(e) {
+ app.alert({cTitle:"AcroFLeX Graphing",
+ cMsg:badNumberMsg});
+ event.rc=false;
+ };
+ }
+ }
+}
+function formatFileInput (fname)
+{
+ this.getField(fname).value = ParseInput(event.value);
+}
+function formatVarIntervals (fname)
+{
+ var val = Number(EvalParse(event.value));
+ this.getField(fname).value = val;
+}
+function formatFunctionInput (fname)
+{
+ var val = ParseInput(event.value);
+ this.getField(fname).value = val;
+}
+function keystrokeFunctionInput ()
+{
+ if (event.willCommit) {
+ var str = event.value.replace(/\s/g,"");
+ if ( str == "" ) {
+ app.alert({cTitle:"AcroFleX Graphing",
+ cMsg:saveDelSelAlerti});
+ event.rc = false;
+ }
+ }
+}
+function keystrokeNumPoints ()
+{
+ try{
+ var val = Number(EvalParse(event.value));
+ } catch(e) {
+ app.alert({cTitle:"AcroFLeX Graphing",
+ cMsg:badNumberMsg});
+ event.rc=false;
+ return;
+ }
+ if ( val < 0 ) {
+ app.alert({cTitle:"AcroFLeX Graphing",
+ cMsg:negNumberMsg});
+ } else {
+ if ( val == 0 ) {
+ app.alert({cTitle:"AcroFLeX Graphing",
+ cMsg:zeroNumberMsg});
+ val = \af@defaultNumPoints;
+ }
+ }
+ event.value = Math.ceil(Math.abs(val));
+}
+function keystrokeAmtShift()
+{
+ try{
+ var val = Number(EvalParse(event.value));
+ } catch(e) {
+ app.alert({cTitle:"AcroFLeX Graphing",
+ cMsg:badNumberMsg});
+ event.rc=false;
+ return;
+ }
+ if ( val < 0 ) {
+ app.alert({cTitle:"AcroFLeX Graphing",
+ cMsg:negShiftMsg});
+ } else {
+ if ( val == 0 ) {
+ app.alert({cTitle:"AcroFLeX Graphing",
+ cMsg:zeroShiftMsg});
+ val = 1;
+ }
+ }
+ event.value = Math.abs(val);
+}
+\end{newsegment}
+\begin{newsegment}{AF: Support for Custom Graphing Problems}
+% \end{macrocode}
+% A general purpose function for graphing that takes into consideration all the
+% parameters. This is used by the \cs{sgraphLink} and for any JS code that uses
+% custom methods. The command \cs{defineGraphJS} is used to set up the parameters
+% for this function..
+% \begin{macrocode}
+function Graph_xytJS (func,xI,yI,xP,tI,graph,populate,wait,%
+type,form,gName,nPts) {
+ var oDom = afsplitInterval(xI);
+ var oRng = afsplitInterval(yI);
+ var oPlotD = afsplitInterval(xP);
+ var oP=new Object(), oD=new Object(), oDt=new Object();
+ oP.graph=graph;
+ oP.populate=populate;
+ oP.wait=wait;
+ if (type!="") oP.type=type;
+ if (form!="") oP.form=form;
+ oD={x_min:oDom.LEP,x_max:oDom.UEP,y_min:oRng.LEP,y_max:oRng.UEP,x_l:oPlotD.LEP,x_u:oPlotD.UEP};
+ if ( tI=="") {
+ Graph_xy(oP,gName,this.pageNum,func,nPts,oD);
+ } else {
+ var oDom_t = afsplitInterval(tI);
+ oDt={t_min:oDom_t.LEP,t_max:oDom_t.UEP};
+ Graph_xyt(oP,gName,this.pageNum,func,nPts,oD,oDt);
+ }
+}
+\end{newsegment}
+\end{insDLJS*}
+% \end{macrocode}
+% Lastly, we define a \texttt{willClose} code and an \texttt{execJS}
+% code. The first comes in on the ``developer's hook'' so the user
+% can still use the \texttt{willClose} environment without disturbing
+% this code. When the document starts to close, we deactivate all
+% rich media annotations, to prevent exceptions from being thrown.
+% \begin{macrocode}
+\begin{defineJS}{\af@WillClose}
+for (var n=0; n<this.numPages; n++) {
+ var rm = this.getAnnotsRichMedia(n);
+ if ( rm != undefined) {
+ for (var i=0; i<rm.length; i++ ) rm[i].activated=false;
+ }
+}
+\end{defineJS}
+% \end{macrocode}
+% We save any other developer \texttt{willClose} code, and define ours, after
+% replacing any older developer \texttt{willClose} code.
+% \begin{macrocode}
+\let\af@save@developer@will@Close\developer@will@Close
+\def\developer@will@Close{%
+ \af@save@developer@will@Close
+ \af@WillClose
+}
+% \end{macrocode}
+% We reset only the form fields in the document created by \textsf{acroflex} and use
+% a format script. What this does is to make Acrobat execute the format code
+% of any text field (or combo box). The formatting code I've placed causes
+% the default functions and values such as \verb!x^2! to be parse, and place
+% in the hidden field. This code is used only once when the document is
+% first opened by Acrobat then thrown away. The document author needs to
+% save the document after opening.
+% \begin{macrocode}
+\begin{execJS}{afreset}
+% try {this.resetForm()} catch(e){};
+var aResetFields=new Array();
+var fname;
+var re=/theFunction|theDom|theRng/;
+for (var i=0; i< this.numFields; i++) {
+ fname = this.getNthFieldName(i);
+ if ( re.test(fname) ) aResetFields.push(fname);
+}
+if (aResetFields.length !=0)
+ try {this.resetForm(aResetFields)} catch(e){};
+\end{execJS}
+% \end{macrocode}
+% We input a customization file for the document author to enter language localizations
+% for the tooltip, for example. This file can be placed in the folder of the source file
+% of elsewhere on the {\LaTeX} search path.
+% \begin{macrocode}
+\InputIfFileExists{\af@lang@type}{}{%
+ \PackageWarning{acroflex}{Could not find the language file
+ \af@lang@type,\MessageBreak please place this file on the latex
+ search path.}
+}
+% \end{macrocode}
+%\changes{v1.6}{2015/10/13}{Restore catcodes of subscript and superscript}
+% Restore catcodes of subscript and superscript to other.
+% \begin{macrocode}
+\af@restoreCats
+%</package>
+% \end{macrocode}
+% \section{History}
+% This initial roll-out of {\AcroFLeX} occurred on 07/06/08 with version v0.4e.
+% Changes since then are listed below.
+%\begin{itemize}
+% \item (2008/09/26 v0.5b) System freezes when the \cs{domMinP} and \cs{domMaxP} macros are not present, and the
+% user enters a function of $t$. Put in some tests to prevent this from happening.
+% \item (2008/09/23 v0.5a) Fixed a problem that JS goes into an infinite loop when a non-functional
+% expression is in the function input field.
+% \item (2008/07/26 v0.5) Worked on compatibility issues with the \texttt{unicode} option of \textsf{hyperref}.
+% Defined two commands \cs{eq@nuDV} and \cs{eq@nuV} (in \textsf{eforms}) which prevents hyperref from converting the text to
+% octal notation. These are used in the fields that take functions as their initial values, now \verb!x^2!
+% does not raise a problem with hyperref even when in unicode mode. Also, made some changes to eforms.dtx
+% concerning \cs{r} and \cs{t}. When in unicode mode, these two have to be redefined to \cs{textCR} and
+% \cs{textHT}, respectively.
+% \item (2008/07/24 v0.4g) Fixed a problem with entering points through the user interface. Now fixed.
+% \item (2008/07/18 v0.4f) Identified a problem with parametric equations (interactive mode),
+% when one of the expressions involves a power. The system went into an infinite loop, jumping
+% between \texttt{Graph\_xy} and \texttt{Graph\_xyt}. Changed the early test to \texttt{theFunction}
+% rather than \texttt{theHiddenFunction}.
+% \item[] Added the new series \texttt{a1}, \texttt{a2}, \texttt{a3}, and \texttt{a4} as values of the graph key of \cs{sgraphLink}. These are similar to the c counterparts, but
+% shade in the graph between the x-axis and the graph. For parametric equations, the results seem
+% good, but could be unpredictable.
+%\end{itemize}
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/acroflex/acroflex.ins b/macros/latex/contrib/acroflex/acroflex.ins
new file mode 100644
index 0000000000..0b53dfae61
--- /dev/null
+++ b/macros/latex/contrib/acroflex/acroflex.ins
@@ -0,0 +1,60 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright 1999-2006 D. P. Story
+%%
+%% This file is part of the `AcroTeX eDucation Bundle'.
+%% -------------------------------------------
+%%
+%% It may be distributed under the conditions of the LaTeX Project Public
+%% License, either version 1.2 of this license or (at your option) any
+%% later version. The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\filedate{2008/07/01}
+\def\batchfile{acroflex.ins}
+
+\input docstrip
+\ifx\generate\undefined
+ \Msg{**********************************************}
+ \Msg{*}
+ \Msg{* This installation requires docstrip}
+ \Msg{* version 2.4 or later.}
+ \Msg{*}
+ \Msg{* An older version of docstrip has been input}
+ \Msg{*}
+ \Msg{**********************************************}
+ \errhelp{Move or rename old docstrip.tex and get a newer one.}
+ \errmessage{Old docstrip in input path}
+ \batchmode
+ \csname @@end\endcsname\end
+\fi
+
+\keepsilent
+\askforoverwritefalse
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\preamble
+\endpreamble
+
+\generate
+{%
+ \file{acroflex.sty}{\from{acroflex.dtx}{copyright,package}}
+}
+
+\Msg{***************************************************************}
+\Msg{*}
+\Msg{* \space To finish the installation you have to copy the files }
+\Msg{*}
+\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX}
+\Msg{*}
+\Msg{***************************************************************}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
diff --git a/macros/latex/contrib/acroflex/afcustom_de.def b/macros/latex/contrib/acroflex/afcustom_de.def
new file mode 100644
index 0000000000..2075a30d62
--- /dev/null
+++ b/macros/latex/contrib/acroflex/afcustom_de.def
@@ -0,0 +1,79 @@
+%
+% AcroFleX (language) customization definition file
+% Dr. D. P. Story
+% http://www.acrotex.net
+%
+% Remove the \endinput command below, and redefine each as desired. For languages
+% that require special accented characters, the unicode option of hyperref is needed
+% for the tooltips. See the AcroFleX manual for more details.
+%
+
+%
+% ------------------------------------------------------------------;
+% These text commands are tooltip messages for the various controls ;
+% ------------------------------------------------------------------;
+%
+% For special accented characters, try entering them directly from your keyboard;
+% if that fails, use the unicode option of web (which is just passed to hyperrerf),
+% then enter the accented characters using latex commands, like \"{u} for u-umlaut.
+%
+\tticonFloatGraphScreen{Klicken Sie, um den Grafik-Bildschirm anzuzeigen,
+ klicken Sie erneut, um diesen wieder zu schliessen.}
+%
+% This message attempts to format the tooltip as an enumerated list.
+%
+\ttfuncInputField{Geben Sie eine der folgenden Ausdrücke ein:\r
+ \space\space1. Eine Funktion in Abhängigkeit von x und der Gestalt f(x);\r
+ \space\space2. Eine Polarfunktion in Abhängigkeit von t und der Gestalt f(t);\r
+ \space\space3. Ein Satz von Parameterfunktionen in Abhängigkeit von t und der Gestalt f(t);g(t)\r
+ \space\space\space\space\space(getrennt durch ein Semikolon);\r
+ \space\space4. Eine Liste von Punkten, (a1,b1);(a2,b2);...;(an,bn)\r
+ \space\space\space\space\space(jeweils getrennt durch ein Semikolon).}
+\ttgraphBtn{Klicken Sie hier, um das zugehörige Schaubild zeichnen zu lassen.}
+\ttgraphClrBtn{Klicken Sie hier, um das Schaubild zu löschen, Shift-klicken Sie, um den Grafik-Bildschirm zu deaktivieren.}
+%
+\ttfunctionSelect{Geben Sie in \afcurvei1 - \afcurvei4 eine Funktion ein, oder in \afploti1 - \afploti4 eine Liste von Punkten.}
+\ttsavedelSelBtn{Klicken Sie hier, um die eingegebene Funktion in der Liste zu speichern, Shift-klicken Sie, um diese Funktion wieder von der Liste zu löschen.}
+%
+\ttdomMin{Geben Sie den kleinsten Wert der Variablen x ein.}
+\ttdomMax{Geben Sie den größten Wert der Variablen x ein.}
+\ttrngMin{Geben Sie den kleinsten Wert der Variablen y ein.}
+\ttrngMax{Geben Sie den größten Wert der Variablen y ein.}
+\ttdomMinP{Geben Sie den kleinsten Wert der Variablen t ein.}
+\ttdomMaxP{Geben Sie den größten Wert der Variablen t ein.}
+%
+\ttnumPoints{Geben Sie die Anzahl der Punkte ein, mit der gezeichnet werden soll.}
+\ttamtShift{Geben Sie die Schrittweite ein, mit der horizontal oder vertikal verschoben wird.}
+\ttzoomInOut{Klicken Sie zum Auszoomen, Shift-klicken Sie zum Einzoomen.}
+%
+% ------------------------------------------------------------------;
+% Below are some text macros used in creating error messages. They ;
+% may be redefined into better English, or another language. ;
+% ------------------------------------------------------------------;
+%
+% \defineJSStr is a new command (defined in eforms) that enables you
+% to enter unicode, for example, \u00FC is \"{u}. Also within the
+% argument string, you can use \r and \t to format your lines as
+% needed. Double back slash \\ is converted into single backslash \,
+% so for example, \\defineJSStr appears in the dialog box as
+% \defineJSStr. The string argument is immediately expanded, so a
+% command like \af@defaultNumPoints (in \af@zeroNumberMsg below) gets
+% expanded at definition time. Use \protect to delay the expansion
+% until the tex compiler finally expands the JS command string.
+%
+\defineJSStr{\af@badNumberMsg}{%
+ Der angegebene Wert ist keine Zahl, bitte geben Sie eine Zahl ein, oder zumindest einen Ausdruck, der eine Zahl ergibt.}
+\defineJSStr{\af@negNumberMsg}{%
+ Die Anzahl der Punkte ist eine positive ganze Zahl, die nun mit einem positiven Wert versehen wird.}
+\defineJSStr{\af@zeroNumberMsg}{%
+ Die Anzahl der Punkte ist eine positive ganze Zahl, die nun mit dem Wert \af@defaultNumPoints vorgegeben wird.}
+\defineJSStr{\af@negShiftMsg}{%
+ Die Schrittweite der Verschiebung ist eine positive Zahl, die nun in eine positive Zahl umgewandelt wird.}
+\defineJSStr{\af@zeroShiftMsg}{%
+ Die Schrittweite der Verschiebung ist eine positive Zahl, die nun mit 1 vorgegeben ist.}
+\defineJSStr{\af@saveDelSelAlerti}{%
+ Bitte geben Sie erst eine Funktion in das Textfeld ein, bevor Sie es speichern wollen.}
+\defineJSStr{\af@saveDelSelAlertii}{%
+ Sie haben keine Punkte zum Zeichnen definiert.}
+\defineJSStr{\af@graphBtnAlerti}{Undefinierte Funktionstypen.}
+\endinput
diff --git a/macros/latex/contrib/acroflex/afcustom_us.def b/macros/latex/contrib/acroflex/afcustom_us.def
new file mode 100644
index 0000000000..b45ed17c0f
--- /dev/null
+++ b/macros/latex/contrib/acroflex/afcustom_us.def
@@ -0,0 +1,87 @@
+%
+% AcroFleX (language) customization definition file
+% Dr. D. P. Story
+% http://www.acrotex.net
+%
+% Remove the \endinput command below, and redefine each as desired. For languages
+% that require special accented characters, the unicode option of hyperref is needed
+% for the tooltips. See the AcroFleX manual for more details.
+%
+\endinput
+%
+% ------------------------------------------------------------------;
+% These text commands are tooltip messages for the various controls ;
+% ------------------------------------------------------------------;
+%
+% For special accented characters, try entering them directly from your keyboard;
+% if that fails, use the unicode option of web (which is just passed to hyperrerf),
+% then enter the accented characters using latex commands, like \"{u} for u-umlaut.
+%
+\tticonFloatGraphScreen{Click to view graphing screen,
+ click again to hide graphing screen.}
+%
+% This message attempts to format the tooltip as an enumerated list.
+%
+\ttfuncInputField{Enter any of the following for expressions:\r
+ \space\space1. A function of x of the form f(x);\r
+ \space\space2. A polar function of t of the form f(t);\r
+ \space\space3. A set of parametric functions of t of the form f(t);g(t)\r
+ \space\space\space\space\space(separated by a semi-colon);\r
+ \space\space4. A list of points, (a1,b1);(a2,b2);...;(an,bn)\r
+ \space\space\space\space\space(separated by semi-colons).}
+\ttgraphBtn{Press to graph the function}
+\ttgraphClrBtn{Click to clear graph, shift-click to deactivate the
+ graphing screen}
+%
+\ttfunctionSelect{Enter a function on \afcurvei1--\afcurvei4, or
+ a list of points on \afploti1--\afploti4.}
+\ttsavedelSelBtn{Click to save current function to list, shift-click
+ to delete the current function from list}
+%
+\ttdomMin{Enter the minimum value for the variable x}
+\ttdomMax{Enter the maximum value for the variable x}
+\ttrngMin{Enter the minimum value for the variable y}
+\ttrngMax{Enter the maximum value for the variable y}
+\ttdomMinP{Enter the minimum value for the variable t}
+\ttdomMaxP{Enter the maximum value for the variable t}
+%
+\ttnumPoints{Enter the number of points to plot}
+\ttamtShift{Enter the amount to shift, horizontally or vertically}
+\ttzoomInOut{Click to zoom out, shift-click to zoom in}
+%
+% ------------------------------------------------------------------;
+% Below are some text macros used in creating error messages. They ;
+% may be redefined into better English, or another language. ;
+% ------------------------------------------------------------------;
+%
+% \defineJSStr is a new command (defined in eforms) that enables you
+% to enter unicode, for example, \u00FC is \"{u}. Also within the
+% argument string, you can use \r and \t to format your lines as
+% needed. Double back slash \\ is converted into single backslash \,
+% so for example, \\defineJSStr appears in the dialog box as
+% \defineJSStr. The string argument is immediately expanded, so a
+% command like \af@defaultNumPoints (in \af@zeroNumberMsg below) gets
+% expanded at definition time. Use \protect to delay the expansion
+% until the tex compiler finally expands the JS command string.
+%
+\defineJSStr{\af@badNumberMsg}{%
+ The value input does not appear to be a number, please enter a
+ number, or an expression that evaluates to a number.}
+\defineJSStr{\af@negNumberMsg}{%
+ The number of points is a positive integer, changing to a
+ positive integer.}
+\defineJSStr{\af@zeroNumberMsg}{%
+ The number of points is a positive integer, changing to the
+ default value of \af@defaultNumPoints.}
+\defineJSStr{\af@negShiftMsg}{%
+ The amount of shift is a positive number, changing to a positive
+ number.}
+\defineJSStr{\af@zeroShiftMsg}{%
+ The amount of shift is a positive number, changing to the
+ default value of 1.}
+\defineJSStr{\af@saveDelSelAlerti}{%
+ There is nothing in the function input text field.}
+\defineJSStr{\af@saveDelSelAlertii}{%
+ You have not defined any points to plot}
+\defineJSStr{\af@graphBtnAlerti}{Undefined graph types}
+\endinput
diff --git a/macros/latex/contrib/acroflex/doc/acroflex_man.pdf b/macros/latex/contrib/acroflex/doc/acroflex_man.pdf
new file mode 100644
index 0000000000..7edb5a4c41
--- /dev/null
+++ b/macros/latex/contrib/acroflex/doc/acroflex_man.pdf
Binary files differ
diff --git a/macros/latex/contrib/acroflex/doc/acroflex_man.tex b/macros/latex/contrib/acroflex/doc/acroflex_man.tex
new file mode 100644
index 0000000000..63bbcbb8f6
--- /dev/null
+++ b/macros/latex/contrib/acroflex/doc/acroflex_man.tex
@@ -0,0 +1,1073 @@
+% makeindex < acroflex_man.idx > acroflex_man.ind
+\documentclass{article}
+\usepackage[fleqn]{amsmath}
+\usepackage[
+ web={centertitlepage,designv,
+ nodirectory,forcolorpaper,
+ latextoc,pro},
+ eforms,
+ linktoattachments,
+ aebxmp
+]{aeb_pro}
+\usepackage[dvipsone,showembeds]{graphicxsp}
+\usepackage{array}
+\usepackage[altbullet]{lucidbry}
+%\usepackage{myriadpro}
+
+%\usepackage{makeidx}
+%\makeindex
+\usepackage{acroman}
+\usepackage[active]{srcltx}
+
+\makeatletter
+\renewcommand{\paragraph}
+ {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}}
+\renewcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.5em}}
+\renewcommand*\descriptionlabel[1]{\hspace\labelsep
+ \normalfont #1}
+\newcommand{\aebDescriptionlabel}[1]{%
+ \setlength\dimen@{\amtIndent+\labelsep}%
+ {\hspace*{\dimen@}#1}}
+\makeatother
+\newenvironment{aebDescript}
+ {\begin{list}{}{\setlength{\labelwidth}{0pt}%
+ \setlength{\leftmargin}{\leftmargin}%
+ \setlength{\leftmargin}{\leftmargin+\amtIndent}%
+ \setlength\itemindent{-\leftmargin}%
+ \let\makelabel\aebDescriptionlabel
+ }}{\end{list}}
+
+\def\AEBBook{\textsl{{Acro\!\TeX} eDucation System Tools: {\LaTeX} for interactive PDF documents}}
+\def\AcroBlog{{Acro\!\TeX} Blog}
+
+\newcommand\refctan[1]{\href{http://ctan.org/pkg/#1}{ctan.org/pkg/#1}}
+\newlength{\aebdimen}
+\def\anglemeta#1{$\langle\textit{\texttt{#1}}\rangle$}
+%\def\meta#1{\textit{\texttt{#1}}}
+\let\meta\anglemeta
+\let\pkg\textsf
+\let\env\texttt
+\let\opt\texttt
+\let\app\textsf
+\def\RMA{RMA}
+\let\SC\relax
+\def\SWF{SWF}
+\def\FLV{FLV}
+\let\EXT\relax
+\def\AcroFLeX{AcroF\kern-.1667em
+ \lower.5ex\hbox{L}\kern-.3eme\kern-.125emX\@}
+\def\AEB{\textsf{AeB}}
+\def\AcroTeX{Acro\!\TeX}
+\def\HTML{HTML}\def\FDF{FDF}
+\def\PDF{PDF}\def\URL{URL}
+\let\amtIndent\leftmargini
+\def\bNH{\begin{NoHyper}}\def\eNH{\end{NoHyper}}
+\def\nhnameref#1{\bNH\nameref{#1}\eNH}
+\def\nhNameref#1{\bNH\Nameref{#1}\eNH}
+\def\nhurl#1{\bNH\url{#1}\eNH}
+\def\grayV#1{\textcolor{gray}{#1}}
+\def\darg#1{\{#1\}}
+\def\parboxValign{t}
+\renewcommand*{\backrefalt}[4]{%
+ \ifcase #1\or
+ See page~#2.\else See pages~#2.\fi
+}
+\newenvironment{aebQuote}
+ {\list{}{\leftmargin\amtIndent}%
+ \item\relax}{\endlist}
+\newcommand{\FmtMP}[2][0pt]{\mbox{}\marginpar{%
+ \raisebox{.5\baselineskip+#1}{%
+ \expandafter\parbox\expandafter[\parboxValign]%
+ {\marginparwidth}{\aebbkFmtMp#2}}}}
+\def\aebbkFmtMp{\kern0pt\itshape\small
+ \color{blue}\raggedright\hspace{0pt}}
+\newcommand{\BlogArticle}{\makebox[0pt][l]{\hspace{-1pt}\color{blue}\Pisymbol{webd}{254}%
+ }\raisebox{.5pt}{\color{red}\ding{045}}}
+\def\dps{$\mbox{$\mathfrak D$\kern-.3em\mbox{$\mathfrak P$}%
+ \kern-.6em \hbox{$\mathcal S$}}$}
+\def\FitItIn{\eq@fititin}
+\def\endredpoint{\FitItIn{{\large\ifusebw\color{black}\else\color{red}\fi$\blacktriangleleft$}}}
+
+\def\takeMeasure{\bgroup\obeyspaces\takeMeasurei}
+\def\takeMeasurei#1{\global\setbox\webtempboxi\hbox{\ttfamily#1}\egroup}
+
+
+\urlstyle{rm}
+
+\def\expath{../examples}
+
+\DeclareDocInfo
+{
+ university={\AcroTeX.Net},
+ title={\texorpdfstring{\AcroFLeX\\[1em]
+ The {\AcroTeX} and FLEX/Flash Connection\\[1em]Applications to Graphing}{The AcroFLeX
+ Graphing System}},
+ author={D. P. Story},
+ email={dpstory@acrotex.net},
+ subject={Documentation for AcroFLeX},
+ talksite={\url{www.acrotex.net}},
+ version={1.6c},
+ keywords={SWF, Adobe FLEX, Adobe Acrobat, JavaScript, ActionScript, AcroTeX},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) \the\year, D. P. Story},
+ copyrightInfoURL={http://www.acrotex.net}
+}
+
+\def\dps{$\hbox{$\mathfrak D$\kern-.3em\hbox{$\mathfrak P$}%
+ \kern-.6em \hbox{$\mathcal S$}}$}
+
+\setWindowOptions{showtitle}
+
+\universityLayout{fontsize=Large}
+\titleLayout{fontsize=LARGE}
+\authorLayout{fontsize=Large}
+\tocLayout{fontsize=Large,color=aeb}
+\sectionLayout{indent=-62.5pt,fontsize=large,color=aeb}
+\subsectionLayout{indent=-31.25pt,color=aeb}
+\subsubsectionLayout{indent=0pt,color=aeb}
+\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}}
+
+%\pagestyle{empty}
+%\parindent0pt\parskip\medskipamount
+
+\definePath\bgPath{"C:/Users/Public/Documents/%
+ ManualBGs/Manual_BG_Print_AeB.pdf"}
+\begin{docassembly}
+\addWatermarkFromFile({
+ bOnTop:false,
+ cDIPath: \bgPath
+});
+\executeSave();
+\end{docassembly}
+
+\begin{document}
+
+\maketitle
+
+\selectColors{linkColor=black}
+\tableofcontents
+\selectColors{linkColor=webgreen}
+
+\section{Introduction}
+
+The \textbf{{\AcroFLeX}} Graphing Bundle is used to create a
+\emph{graphing screen} that can be incorporated into a PDF document
+and viewed within \app{Adobe Acrobat Reader}, version 9.0 or later. The graphing
+screen can be interactive or non-interactive.
+
+For the interactive graphing screen, the user can enter an
+expression representing a function of a single variable $x$, a polar
+function of $t$, or a set of parametric equations that are functions
+of $t$. Various controls are provided to change the viewing window,
+for shifting horizontally and vertically, and for zooming in or out.
+
+For the non-interactive graphing screen, the screen is populated
+when the user clicks a link created by \cs{sgraphLink}.
+\cs{sgraphLink} passes such information as the function,
+domain, and range to the graphing routines of {\AcroFLeX}.
+
+In this version of {\AcroFLeX}, up to four functions can be graphed
+and four sets of plotted points can be displayed, on one graphing
+screen.
+
+The graph screen itself is actually a SWF file, named
+\texttt{acroflex.swf}. This SWF file is part of the {\AcroFLeX}
+distribution. This package uses the \pkg{rmannot} package, also
+written by this author, to create rich media annotations, to embed
+\texttt{acroflex.swf} in the PDF document, and to display the SWF through
+the rich media annotation.
+
+\subsection{Background}
+
+Version 9 of Acrobat/Adobe Reader introduces the \textit{rich media
+annotation} which plays FLV movies, and SWF animations, and MP3 files.\footnote{%
+The rich media annotation is introduced in
+\textsl{Adobe Supplement to the ISO 32000}, which documents
+BaseLevel 1.7, ExtensionLevel 3, the Adobe's extensions to PDF~1.7.}
+Acrobat/Adobe Reader also provides a scripting bridge between
+JavaScript for Acrobat, and ActionScript, the scripting language of
+Flash player. This bridge enables the PDF and the Flash widget,
+embedded in the rich media annotation, to communicate. The scripting
+bridge opens up wonderful opportunities for applications to the
+education sector. The {\AcroFLeX} Graphing Bundle is one such
+application of the new PDF-Flash connection to education.
+
+\textbf{{\AcroFLeX}} uses the commercial product Adobe FLEX
+Builder~3 and FLEX~3 SDK to produce Flash widgets, and the AeB to
+create PDF documents with appropriate JavaScript to communicate with
+the Flash widget. FLEX Builder~3 is currently free for students and
+educators, the FLEX 3 SDK is free to all.
+
+% This style file defines some basic controls for
+% \textbf{{\AcroFLeX} Graphing} for controlling graphical SWF files
+% for graphing.
+%
+% These commands are general {\LaTeX} commands, that require no special driver, so
+% they can be used by, for example, pdftex; however, we use SWF files to produce
+% the graphing screen with the built-in ActionScript to communicate with the PDF.
+% For this, you will need Acrobat 9 Pro. In that case, you might as well use the
+% Acrobat Distiller to produce your PDF, but it is not necessary.
+
+\subsection{What is \texorpdfstring{{\AcroFLeX}}{AcroFLeX}?}
+
+The word \textbf{\AcroFLeX} is meant to convey a merging of two computer technologies:
+\begin{itemize}
+\item \textbf{Acro}: connotes both \textbf{Adobe Acrobat} (\textbf{Adobe Reader})
+and \textbf{{Acro\negthinspace\TeX}} (as in the
+\textbf{{Acro\negthinspace\TeX} eDucation Bundle} or, just \textbf{AeB}).
+\item \textbf{F\kern-.1667em\lower.5ex\hbox{L}\kern-.3eme\kern-.125emX\@}: connotes
+ \textbf{Adobe FLEX 3}. FLEX 3 is used to create SWF files to interact with the user.
+ In the case of graphing, plotting information is passed from Acrobat, via JavaScript,
+ to the Flash widget. ActionScript takes the data, and plots the points provided, and
+ connects them with a smooth curve.
+\end{itemize}
+
+
+\section{Requirements}
+
+In this section we list the requirements for this package.
+
+\subsection{{\LaTeX} Package Requirements}
+
+The preamble of the demo file afgraph.tex lists:
+\begin{Verbatim}[xleftmargin=\amtIndent,numbers=left]
+\usepackage[%
+ driver=dvips,
+ web={nodirectory,pro,tight,usesf},
+ eforms,exerquiz,dljslib={ImplMulti},
+ graphicxsp={showembeds}
+]{aeb_pro}
+\usepackage{acroflex}
+\end{Verbatim}
+Let me comment on each of these lines.
+\begin{itemize}
+ \item Line~(7): Of course, we use the \pkg{acroflex} package. The
+ \pkg{acroflex} package \textit{requires} the \pkg{rmannot} package.
+ The latter package is the one that creates the rich media annotation,
+ embeds the graphing Flash widget, acroflex.swf, and displays it. The
+ \pkg{rmannot} package is the only one listed in \texttt{acroflex.dtx}
+ as required, however, more packages are really required, as discussed
+ in the next items.
+
+ \item Lines (1)--(6): The \pkg{aeb\_pro} package is \textit{strongly
+ recommended}. The {\AcroFLeX} Graphing Bundle uses the
+ \texttt{willClose} environment to assure the document will behave
+ properly when the user closes the document.
+
+ The options use the so-called \textbf{AeB Control Central} that represent
+ a convenient way to input the other required packages (in optimal order)
+ needed by the \pkg{acroflex} package.
+
+ If \texttt{aeb\_pro} is not used, then the individual
+ required packages must be input using the \cs{usepackage}
+ mechanism.
+
+ We input the \texttt{aeb\_pro} package before the
+ \pkg{acroflex} package.
+
+ We now comment on each of the options used in the \texttt{aeb\_pro}
+ package:
+ \begin{description}
+ \item[Line (2), the \texttt{driver} option:] This system uses \app{Acrobat
+ Distiller}, which distills a PostScript file. The driver values
+ this package uses are \texttt{dvips} and \texttt{dvipsone}.
+ Setting the driver is important because the dvi-to-ps application
+ (\texttt{dvips} and \texttt{dvipsone}) consumes the dvi file
+ produced by the {\TeX} compiler and writes a PostScript file that
+ Acrobat Distiller consumes.
+
+ \item [Line (3), the \texttt{web} option:] The \texttt{web} package
+ is not really required. It is used to create a PDF page size
+ convenient to view on a computer monitor. This package has many
+ options and features for the document author to design a document
+ for screen---or for paper---viewing.
+
+ The \pkg{web} package brings in the \pkg{hyperref} package, which is
+ a \textit{required package}. If \texttt{web} is not used,
+ \pkg{hyperref} needs to be input.
+
+ \item [Line (4), the \texttt{eforms} option:] A \textit{required}
+ package. This package provides form field and link support for
+ the {\AcroFLeX} Graphing Bundle. The \texttt{eforms}, in turn,
+ inputs the \texttt{insdljs} package, which provides support for
+ document-level JavaScript. It is the document-level JavaScript
+ where much of the work is done: parsing input, calculating
+ graphing data, and sending this data off to the
+ \texttt{acroflex.swf} widget for display.
+
+ \item [Line (4), the \texttt{exerquiz} option:] A \textit{required}
+ package. The \texttt{exerquiz} package has several function
+ parsing methods defined in its document-level JavaScript.
+ {\AcroFLeX} uses these parsing routines. One of these days, I'll
+ separate out the parsing routines from \texttt{exerquiz}, but not
+ now.
+
+ \item [Line (4), the \texttt{dljslib} option:] An optional, \emph{but
+ recommended} package. We use this package for its
+ \texttt{ImplMulti} option. This option simplifies the problem of
+ entering functional expressions. Without the \texttt{ImplMulti},
+ to enter $2x\sin^2(2x)$, the user must type explicit
+ multiplications, \verb!2*x*(sin(2*x))^2!, with the
+ \texttt{ImplMulti} option, the user needs only enter
+ \verb!2xsin^2(2x)!.
+
+ \item [Line (5), the \texttt{graphicxsp} option:] The \texttt{graphicxsp} is a
+ \textit{required} package of \pkg{rmannot}, but we input it
+ earlier so we can set its options through the \textbf{AeB Control
+ Central} (part of AeB Pro). The \texttt{graphicxsp} package, part
+ of the AeB Pro Bundle, provides embedding of poster graphics for
+ a rich media annotation. A poster graphic is the appearance you
+ see when the annotation is not activated.
+
+ \end{description}
+\end{itemize}
+
+\subsection{PDF Creator Requirements}
+
+This package requires Acrobat Distiller 9.0 (or later) to convert
+PostScript files to PDF. Because this package uses \pkg{rmannot}
+to create rich media annotations, there is also a requirement that
+the Distiller must be opened using the \texttt{-F} command line
+flag. See the documentation of the \pkg{rmannot} package for more
+details.
+
+\subsection{Installation}
+
+The installation of the \pkg{acroflex} package is
+straightforward. Place \texttt{acroflex.zip} in the search path of
+your {\TeX} system and unzip. Unzipping creates a folder named
+\pkg{acroflex}. Refresh your filename database, if your system
+requires it.
+
+Accompanying the distribution is a file named \texttt{acroflex.cfg}.
+Open this file in your favorite text editor and you see the
+following lines.
+\begin{Verbatim}
+ %
+ % AcroFleX Graphing Bundle Configuration File
+ % D. P. Story, dpstory@acrotex.net
+ %
+ \pathToAcroFlex{C:/acrotex/aebpro/acroflex/swf}
+\end{Verbatim}
+Edit the argument of \cs{pathToAcroFlex} (defined in the
+\pkg{acroflex} package) to the path of the folder that contains
+the \texttt{acroflex.swf} Flash file. Save and close
+\texttt{acroflex.cfg}.
+
+Of course, you need to install the latest versions of AeB (the
+{\AcroTeX} eDucation Bundle), AeB Pro, \texttt{graphicxsp}, and
+\pkg{rmannot}. Follow the package documentation closely for
+installation, some of the packages require that certain JavaScript
+file be installed.
+
+
+\section{The \texorpdfstring{\AcroFLeX}{AcroFLeX} Graphing System}
+
+This package defines several document scripts, the two primary ones are
+\texttt{Graph\_xy()} and \texttt{Graph\_xyt()}, the others support these two.
+\texttt{Graph\_xy()} and \texttt{Graph\_xyt()} take the data passed to it,
+parse it, create plot data, and send it off to the {\AcroFLeX} graphing
+widget to graph the data by way of the infamous scripting bridge. Details of
+these functions can be found in the documentation in the
+\texttt{acroflex.dtx} file.
+
+In the {\AcroFLeX} graphing system there are three modes of
+operation: interactive, populate, and silent.
+\begin{itemize}
+\item \textbf{Interactive:} This occurs when the user enters a
+function through the UI.
+
+The following controls are \emph{required}:
+\begin{Verbatim}
+ \funcInputField, \graphBtn, \numPoints
+ \domMin, \domMax, \rngMin, \rngMax,
+\end{Verbatim}
+If parametric or polar graphs are to be used,
+then \cs{domMinP} and \cs{domMaxP} are also required. The other
+controls are \emph{optional}:
+\begin{Verbatim}
+ \graphClrBtn
+ \amtShift (\hShiftL, \hShiftR, \vShiftD, \vShiftU)
+ \zoomInOut, \savedelSelBtn, \functionSelect
+\end{Verbatim}
+The \cs{graphClrBtn} button is recommended, though not required.
+All these commands will be discussed in detail in the pages that follow.
+
+\item \textbf{Populate:} The populate mode occurs when the graphing
+ parameters are passed to \texttt{Graph\_xy} (or \texttt{Graph\_xyt}) by
+ \cs{sgraphLink} (or some other command). All the essential information
+ is passed as arguments. The target graphing screen has all the required
+ controls, as listed above. The command initiating the graphing must set
+ the \texttt{graph\_props.populate} property to \texttt{true}. In this
+ case the graphing data populate the required fields and the graph will
+ be drawn. It is the document author's responsibility to only use
+ populate on graphing screens that have all the required control fields.
+
+ Populate behaves exactly like interactive, but the graphing data is
+ passed to the graphing routines in pre-packaged form, prepared by the
+ document author; the user, however, can manipulate the curve once it
+ appears.
+
+ The required controls are the same as the interactive mode.
+
+\item \textbf{Silent:} In the silent or \emph{non-interactive} mode, there
+ must be no controls other than \cs{graphClrBtn}. Basically, the
+ document author prepares some pre-packaged graphs to be displayed to
+ the user, without interaction. These may go along with a tutorial
+ discussion symmetry, periodicity, tangent lines, etc.
+
+ If the document author wants the user to interact with the graph, the
+ required controls need to be supplied and the
+ \texttt{graph\_props.populate} property needs to be set to \texttt{true}.
+ That is, use the populate mode.
+
+\end{itemize}
+
+\subsection{Setting up the Graphing Screen}
+
+It should be a hard and fast rule that all content concerning a
+graphing screen should occur on the same page as the rich media
+annotation that displays the graphing screen. Should discussion
+cross page boundaries, create another graphing screen for that page.
+Never fear, the {\AcroFLeX} graphing widget is only embedded once,
+so adding more screens does not bloat the size of the file.
+
+There are three commands to set up an {\AcroFLeX} graph screen:
+\Com{dimScreenGraph}, \Com{graphName} and \Com{graphScreen}. The use of
+the command \cs{dimScreenGraph} is not required, but recommended.
+\takeMeasure{\string\graphScreen[\meta{rma\_options}]\{\meta{width}\}\{\meta{height}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\dimScreenGraph{!meta(width)}{!meta(height)}
+\graphName{!meta(unique_name)}
+\graphScreen[!meta(rma_options)]{!meta(width)}{!meta(height)}
+\end{dCmd}
+
+\CmdDescription We describe each of these three, and their parameters.
+\begin{itemize}
+ \item \cs{dimScreenGraph}: This command is a convenient way of setting the dimensions
+ of the graphing screen. You specify the width of the screen using the \meta{width}
+ parameter and the height of the screen using the \meta{height} parameter. These values
+ are passed through a \cs{setlength}, so simple calculations on the dimension can be performed
+ on the parameters. (The \texttt{calc} package is used by the web package.) This command then
+ defines macros \Com{hScreenGraph} and \Com{vScreenGraph} to hold these two dimensions, respectively.
+ \cs{hScreenGraph} and \cs{vScreenGraph} can be used in \cs{graphScreen}, or in setting up
+ \texttt{minipage}s based on these lengths, for example.
+
+ \item[] If the aspect ratio of all your graphing screens is going to be the same, then
+ it suffices to use \cs{dimScreenGraph} only once in the document.
+
+ \item \cs{graphName}: Use this command to define a unique name for this graphing screen. Each
+ screen must have a different name. This command defines the text macro \Com{afgraphName}, which
+ expands to the given name.
+
+ \item \cs{graphScreen}: This is the main command of this package,
+ it's the one that creates a rich media annotation and associates
+ it with the {\AcroFLeX} Graphing widget. It has three parameters:
+ %\begin{aebQuote}
+ \begin{description}\def\NH{\hspace{-\labelsep}}
+ \item \NH\meta{rma\_options} is optional and just passes to the underlying
+ command \Com{rmAnnot} (defined in the \pkg{rmannot}
+ package) that actually creates the rich media annotation.
+ The most ``important'' key-value pair, for this package,
+ is the \texttt{poster} key, through this key, a poster can
+ be associated with the annotation.
+ \item \NH\meta{width} is the width of the graph screen, if \cs{dimScreenGraph} was used,
+ just use \cs{hScreenGraph} as this value.
+ \item\NH\meta{height} is height the screen of the graph screen, if \cs{dimScreenGraph} was used,
+ just use \cs{vScreenGraph} as this value.
+ \end{description}
+% \end{aebQuote}
+\end{itemize}
+The \cs{graphScreen} can be resized using \cs{resizebox} or
+\cs{scalebox} (from the \texttt{graphicx} package) to obtain a
+larger or smaller graph screen with the same aspect ratio.
+
+
+The following is an example of the usage of each of these three commands. Note that the
+height is three-fourths that of the width.
+
+\takeMeasure{\string\graphScreen[poster=aflogo]\{\string\hScreenGraph\}\{\string\vScreenGraph\}}
+\begin{dCmd*}{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\dimScreenGraph{186bp}{186bp*3/4}
+\graphName{graph1}
+\graphScreen[poster=aflogo]{\hScreenGraph}{\vScreenGraph}
+\end{dCmd*}
+
+\paragraph*{Graphing Screen in a Floating Window.} The graphing
+window can appear in a floating window as well. The
+\Com{iconFloatGraphScreen} command is used to create such a screen.
+
+\takeMeasure{\string\iconFloatGraphScreen[\meta{key\_values}]\{\meta{width}\}\{\meta{height}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\iconFloatGraphScreen[!meta(key_values)]{!meta(width)}{!meta(height)}
+\end{dCmd}
+\PD The command has three parameters. The first optional one is passed as the
+first optional parameter of the underlying \cs{graphScreen} command. The
+\cs{graphScreen} command uses \Com{hScreenGraph} and \Com{vScreenGraph},
+defined through the \cs{dimScreenGraph} command, to set the dimensions of the
+graph screen. The graph screen is then resized using \Com{resizebox} from the
+\texttt{graphicx} package. The other two parameters, \meta{width} and
+\meta{height}, are simply passed to \cs{resizebox}. See the documentation on
+\cs{resizebox} for details on these parameters.
+
+For example,\takeMeasure{\string\iconFloatGraphScreen[poster=aflogo]\{40bp\}\{!\}}
+\begin{dCmd*}{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\iconFloatGraphScreen[poster=aflogo]{40bp}{!}
+\end{dCmd*}
+\noindent The first parameter is used to define a poster of the icon, the
+second parameter is \texttt{40bp} which means to resize the graphic
+to a width of \texttt{40bp}, the third parameter of exclamation
+point (!) signals \cs{resizebox} to maintain the aspect ratio of the
+graphic.
+
+The \cs{iconFloatGraphScreen} command is implemented by creating a
+rich media annotation for the {\AcroFLeX} Graphing widget, with a
+form field button on top of it that is transparent. Pressing on the
+icon is actually pressing on the button. The button action activates
+the graphing screen if it is not activated, and deactivates it if it
+is activated. The graphing screen might be the target of graphing
+data sent to it by the \cs{sgraphLink} command, see
+\hyperref[sgraphlink]{Section~\ref*{sgraphlink}},
+page~\pageref*{sgraphlink}, or through the graphing screen controls,
+these are explained next.
+
+\subsection{Graphing Screen Controls}
+
+The controls described in this section are used for interactive and
+populate modes.
+
+\subsubsection{Required Controls}
+
+For interactive or populate mode, in addition to \cs{graphScreen},
+several controls are required so the user can manipulate the graph.
+
+\takeMeasure{\string\funcInputField[\meta{key\_values}]\{\meta{width}\}\{\meta{height}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\funcInputField[!meta(key_values)]{!meta(width)}{!meta(height)}
+\end{dCmd}
+\CmdDescription The field created by
+\cs{funcInputField}\footnote{The command was originally misnamed
+\cs{fileInputField} and is still recognized by the {\AcroFLeX}
+package; however, document authors should use the command
+\cs{funcInputField}.} is used to enter a function or a set of points
+to be graphed. The function is parsed by the \texttt{exerquiz}
+routines, so the same syntax that is used for \texttt{exerquiz}
+quizzes and short quizzes is used. The \meta{key\_values} are
+passed to the underlining text field and can be used to change the
+appearance of the field, see the \texttt{eformman.pdf} for more
+information. The \meta{width} and \meta{height} are the
+width and height, respectively, of the text field.
+
+\takeMeasure{\string\graphBtn[\meta{key\_values}]\{\meta{width}\}\{\meta{height}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\graphBtn[!meta(key_values)]{!meta(width)}{!meta(height)}
+\end{dCmd}
+\CmdDescription The graph button. Once the user has entered a
+required data into the required fields, the user press this button
+and the graph appears in the graph screen. The parameters are the
+same as for \cs{funcInputField}, the descriptions are the same.
+
+\takeMeasure{\string\numPoints[\meta{key\_values}]\{\meta{width}\}\{\meta{height}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\numPoints[!meta(key_values)]{!meta(width)}{!meta(height)}
+\end{dCmd}
+\CmdDescription This text field displays the number of points to be
+plotted. It is editable, the user can change this value. The
+parameters are the same as for \cs{funcInputField}, the descriptions
+are the same.
+
+
+\takeMeasure{\string\domMin[\meta{key\_values}]\{\meta{width}\}\{\meta{height}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\domMin[!meta(key_values)]{!meta(width)}{!meta(height)}
+\domMax[!meta(key_values)]{!meta(width)}{!meta(height)}
+\rngMin[!meta(key_values)]{!meta(width)}{!meta(height)}
+\rngMax[!meta(key_values)]{!meta(width)}{!meta(height)}
+\end{dCmd}
+\CmdDescription The graphing window is set by these four text
+fields. When the curve is graphed, only the rectangular window,
+\begin{quote}
+$[\,\cs{domMin}, \cs{domMax}\,] \times [\,\cs{rngMin},
+\cs{rngMax}\,]$
+\end{quote}
+is displayed.\footnote {By this notation, I mean the
+intervals determined by the values of these intervals.} The
+parameters are the same as for \cs{funcInputField}, the descriptions
+are the same.
+
+If parametric and polar graphing is required of the user,
+\cs{domMinP} and \cs{domMaxP} are required as well.
+
+\takeMeasure{\string\domMinP[\meta{key\_values}]\{\meta{width}\}\{\meta{height}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\domMinP[!meta(key_values)]{!meta(width)}{!meta(height)}
+\domMaxP[!meta(key_values)]{!meta(width)}{!meta(height)}
+\end{dCmd}
+\CmdDescription The interval $[\,\cs{domMinP}, \cs{domMaxP}\,]$ is
+the interval over which a set of parametric equations is traced; in
+the case of polar functions, this interval is used for the domain of
+the polar function. The parameters are the same as for
+\cs{funcInputField}, the descriptions are the same.
+
+\paragraph*{Setting the default values.} Whereas it is possible to
+set the default values of the fields just described, a more
+convenient method is used.
+
+\takeMeasure{\string\defaultDomRng%
+\{\meta{x\_min}\}\{\meta{x\_max}\}\{\meta{y\_min}\}\{\meta{y\_max}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\defaultFunction{!meta(!upshape(function|points))}
+\defaultNumPoints{!meta(postive_integer)}
+\defaultDomRng{!meta(x_min)}{!meta(x_max)}{!meta(y_min)}{!meta(y_max)}
+\defaultDomP{!meta(t_min)}{!meta(t_max)}
+\end{dCmd}
+
+\noindent These can be executed, along with \cs{graphName}, just before the
+\cs{graphScreen} command. The values of their parameters will then populate
+the corresponding fields as default values.
+
+The following are the default values of all the required fields, as
+defined by the \pkg{acroflex} package. Note that all of these are
+parsed (with the exception of the number of points) using
+\texttt{exerquiz}'s parsing routines; consequently, a value such as
+\texttt{2*PI} is perfectly legal.
+
+\takeMeasure{\string\defaultDomRng\darg{-2}\darg{2}\darg{0}\darg{4}}
+\begin{dCmd*}{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\defaultFunction{x^2}
+\defaultNumPoints{40}
+\defaultDomRng{-2}{2}{0}{4}
+\defaultDomP{0}{2*PI}
+\end{dCmd*}
+
+\subsubsection{Optional Controls}
+
+There are several other optional controls that may be useful in manipulating
+a graph.
+
+\takeMeasure{\string\graphClrBtn[\meta{key\_values}]\{\meta{width}\}\{\meta{height}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\graphClrBtn[!meta(key_values)]{!meta(width)}{!meta(height)}
+\end{dCmd}
+On clicking this button, the current graphing screen is cleared of
+all graphs and plotted points. Shift-clicking this button
+deactivates the graphing screen, and the annotation's poster
+appears.
+
+\paragraph*{Multiple Plots.} By using the \Com{functionSelect} combo
+box, the user can graph multiple curves.
+
+\takeMeasure{\string\functionSelect[\meta{key\_values}]\{\meta{width}\}\{\meta{height}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\savedelSelBtn[!meta(key_values)]{!meta(width)}{!meta(height)}
+\functionSelect[!meta(key_values)]{!meta(width)}{!meta(height)}
+\end{dCmd}
+The \cs{functionSelect} combo box serves several purposes. It consists of
+eight items that appear as \texttt{Curve\,1}, \texttt{Curve\,2},
+\texttt{Curve\,3}, \texttt{Curve\,4}, \texttt{Plot\,1}, \texttt{Plot\,2},
+\texttt{Plot\,3}, \texttt{Plot\,4}. When this combo box is present, the user
+is able to graph multiple curves and plots. Changing the combo box to
+\texttt{Curve\,2}, for example, and pressing the \cs{graphBtn} button, the
+function will be graphed on \texttt{Curve\,2}. There are four curves possible,
+and four sets of plotted points. The different curves and plots are color
+coded.
+
+When the \cs{savedelSelBtn} is also present, the user can click on
+it and save the function definition under that curve or plot. These
+expressions will only be saved during the current viewing session in
+\app{Acrobat Reader}, but if the user is on Acrobat, the PDF can be saved
+and the values added to the combo list will be saved as well.
+
+The parameters are the same as for
+\cs{funcInputField}, the descriptions are the same.
+
+\paragraph*{Horizontal and Vertical Shifting.} There are several
+controls that shift the graphing window vertically or horizontally.
+
+\takeMeasure{\string\amtShift[\meta{key\_values}]\{\meta{width}\}\{\meta{height}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\amtShift[!meta(key_values)]{!meta(width)}{!meta(height)}
+\hShiftL{!meta(text)}
+\hShiftR{!meta(text)}
+\vShiftU{!meta(text)}
+\vShiftD{!meta(text)}
+\end{dCmd}
+The \cs{amtShift} is a text field, its value is a positive number
+that will be used to shift the graphing window horizontally or
+vertically. The user can change this value. The parameters are the
+same as for \cs{funcInputField}, the descriptions are the same.
+
+The other four commands are implemented as links, then clicked, the
+graphing window moves the amount specified in \cs{amtShift} field
+left (\cs{hShiftL}), right (\cs{hShiftR}), up (\cs{vShiftU}) or down
+(\cs{vShiftD}). The argument \meta{text} is the text to be used
+to identify the link.
+
+\paragraph*{Zoom, zoom, zoom.}
+
+The user can be allowed to optionally zoom the graph out or in by providing the
+control \Com{zoomInOut}.
+
+\takeMeasure{\string\zoomInOut[\meta{key\_values}]\{\meta{width}\}\{\meta{height}\}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\zoomInOut[!meta(key_values)]{!meta(width)}{!meta(height)}
+\end{dCmd}
+Click the \cs{zoomInOut} button zooms out by an amount shown in the
+\cs{amtShift} field; shift-clicking will zoom in by the amount shown
+in the \cs{amtShift} field. The parameters are the same as for
+\cs{funcInputField}, the descriptions are the same.
+
+\paragraph*{Setting the default values.} As with the required controls, the optional ones
+can be given default values through convenience macros.
+
+
+\takeMeasure{\string\defaultShiftAmt\darg{\meta{positive\_number}}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\defaultShiftAmt{!meta(positive_number)}
+\defaultShiftAmt{1}
+\end{dCmd}
+The \cs{defaultShiftAmt} is used to set the default value of the \cs{amtShift} field; the default
+value is \cs{defaultShiftAmt\darg{1}}.
+
+The \cs{functionSelect} lists four curves and four plots. The text can be changed by
+through the following text macros. Each command is followed by its default definition.
+\takeMeasure{\string\afCurve\darg{\meta{name\_for\_curve}}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\afCurve{!meta(name_for_curve)}
+\afCurve{Curve}
+\afPoint{!meta(name_for_point)}
+\afPoint{Point}
+\afUnused{!meta(unused)}
+\afUnused{--unused}
+\end{dCmd}
+The definitions values of \cs{afCurve} and \cs{afPoint} are the
+target of several search using regular expressions. If the values of
+\cs{afCurve} and \cs{afPoint} are too complex, the regular
+expression search may fail. Try to keep these definitions to ASCII
+characters.
+
+\subsection{Populate and Silent Linking}
+
+The previous section details the interactive mode, where the
+\cs{graphScreen} is present with all its required controls, and
+possibly some optional controls. Curves are generated purely through
+the user interface, that is, the user enters data into the various
+form fields, clicks the \cs{graphBtn}, and \textsl{voil\`{a}}, the
+graph is drawn!
+
+In this section, the populate mode is discussed as well as silent mode.
+
+\subsection{Graphing with \texorpdfstring{\protect\cs{sgraphLink}}{\CMD{sgraphLink}}}\label{sgraphlink}
+
+The document author can prepare function/points to be graphed, along
+with all the essential data needed to view the graph. For populate,
+the graphing data populate the required text field, and is available
+for the user then to manipulate. The population of an interactive
+graphing screen is done though a special link, the \cs{sgraphLink}.
+(The ``s'' in \cs{sgraphLink} stands for ``silent,'' but that was
+before I made the design decision to have a populate mode.)
+
+The syntax for \cs{sgraphLink} is
+\takeMeasure{\string\sgraphLink[\meta{appr}]\darg{\meta{graph\_key\_vals}}%
+\darg{\meta{func{\upshape|}points}}\darg{\meta{text}}}
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\sgraphLink[!meta(appr)]{!meta(graph_key_vals)}{!meta(func(!upshape|)points)}{!meta(text)}
+\end{dCmd}
+\PD The command takes four parameters, the first is the usual
+optional parameter that can be used to change the appearance of the
+link. The others we present in detail.
+\begin{description}
+ \item [\texttt{[\meta{appr}]}:] Key-value pairs that are used to change the appearance of the link.
+ \item [\meta{graph\_key\_vals}:] Key-value pairs, some of which are used on the {\LaTeX} side,
+ some on the PDF side, while others on SWF side.
+ \begin{description}
+ \item\texttt{graph=\meta{value}}: The value of this key determines which
+ \emph{chart series} (FLEX terminology) the data will appear
+ on. The values of this key are:
+ \begin{description}
+ \item [\texttt{c1}, \texttt{c2}, \texttt{c3}, and \texttt{c4}:]
+ Use one of these values to graph a function, a polar function,
+ or a set of parametric functions. Up to four curves can be displayed
+ on the graphing screen at once. These values are displayed using
+ the \texttt{LinearSeries} (FLEX terminology).
+ \item [\texttt{a1}, \texttt{a2}, \texttt{a3}, and \texttt{a4}:]
+ Same as above, but the region between the horizontal axis, and
+ the graph is shaded in. These values are displayed using
+ the \texttt{AreaSeries} (FLEX terminology).
+ \item [\texttt{p1}, \texttt{p2}, \texttt{p3}, and \texttt{p4}:]
+ Use one of these values to plot points. These values are displayed using
+ the \texttt{PlotSeries} (FLEX terminology).
+ \end{description}
+ Thus, \texttt{graph=c2} tells the graphing
+ routines of {\AcroFLeX} and the {\AcroFLeX} Graphing widget
+ to display this data on series \texttt{c2}.
+
+ If two curves or plots have the same value for
+ \texttt{graph}, then the one graphed last will
+ overwrite the earlier one. If you want both curves
+ or plots to appear on the graph together, give them
+ different \texttt{graph} values.
+
+ When this key is not given a value, the default is
+ \texttt{c1}.
+
+ \item [\texttt{type=\meta{\upshape{cart|para|polar}}}:] This key declares the type of curve,
+ possible values are \texttt{cart}, \texttt{para}, and
+ \texttt{polar}. This key is used mostly internally, and is
+ normally not used. There is one situation that it is used. When
+ defining a polar function, use \texttt{type=polar}. Thus, to
+ define a polar function, type something like this:
+
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\footnotesize]
+\sgraphLink{type=polar,xInterval={[-1.5,1.5]},yInterval={[-1,2]},
+ tInterval={[0,2*PI]},points=40,populate}
+ {1+sin(t)}{$r = 1 + \sin(\theta)$ }
+\end{Verbatim}
+
+ Note the explicit use of \texttt{type=polar}; the
+ parsing can identify a function of $x$ and a set of
+ parametric equations that are function of $t$, but help
+ is needed for polar.
+
+ \item [\texttt{populate=\meta{\upshape{true|false}}}:] Possible
+ values are \texttt{true} or \texttt{false}, typing
+ \texttt{populate} is the same as \texttt{populate=true}. This
+ switch signals the graphing routines on the PDF side to populate
+ the required fields with the graphing data. The default is
+ \texttt{populate=false}, do not populate, use silent mode.
+
+ \textbf{Populate versus Silent Modes:} The \texttt{populate} key
+ is how populate mode is distinguished from silent mode:
+ \texttt{populate=true} is populate mode, while \texttt{populate=false}
+ (or the populate parameter not listed) is silent mode. In
+ populate mode, the target graphing screen must have all required
+ control fields; in silent mode, the only control should be the
+ \cs{graphClrBtn} button.
+
+ \item [\texttt{connectwith=\meta{\upshape{curve|segment}}}:] The key
+ determines the method used to connect consecutive points on the
+ graph, possible values are \texttt{curve} and \texttt{segment}.
+ This value is passed to the {\AcroFLeX} graphing widget. For
+ function of $x$, the default is \texttt{curve}; otherwise, the
+ default is \texttt{segment}. This value is ignored when the
+ \texttt{graph} property signals plotting
+ (\texttt{p1}--\texttt{p4}).
+
+ \item [\texttt{points=\meta{num}}:] The number of points to generate for
+ plotting the current function. When the \texttt{graph}
+ property signals plotting (\texttt{p1}--\texttt{p4}), the
+ \texttt{points} property is ignored. If the graph property
+ signals graphing (\texttt{c1}--\texttt{c4};
+ \texttt{a1}--\texttt{a4}), and argument \texttt{\#3} is a
+ set of rectangular points, the \texttt{points} property must
+ either not be present, or set to zero (\texttt{points=0}).
+
+ \item [\texttt{xInterval=\darg{[a,b]}}:] (Required) An interval on the $x$-axis, the
+ interval must be in the form \verb!{[a,b]}!, for example,
+ \texttt{xInterval=\darg{[0,1]}}. For functions of $x$, this interval
+ represents the domain over which the function is graphed. It
+ also represents the left and right boundaries of the graphing
+ window.
+
+ \textbf{Important:} The \texttt{xkeyval} package
+ parses these parameters. Because the interval notation
+ contains a comma (,), the whole interval must be enclosed in
+ braces so the parsing will be correct, as illustrated above.
+
+ \item [\texttt{yInterval=\darg{[a,b]}}:] (Required) An interval on the $y$-axis, the
+ interval must be in the form \verb!{[a,b]}!, for
+ example, \verb!yInterval={[0,1]}!. It represents
+ the upper and lower boundaries of the graphing window.
+
+ As with \texttt{xInterval}, the interval needs to be
+ enclosed in braces.
+
+ \item [\texttt{tInterval=\darg{[a,b]}}:] When plotting a set of parametric equations, or
+ a polar function, this interval is required as a parameter. The
+ interval is of the form \verb!{[a,b]}!, including the braces,
+ and represents the domain of the parameter. The
+ \texttt{tInterval} must not be included otherwise, that is, for
+ graphing a function of $x$. Some early {\LaTeX} parsing tests
+ whether the value of \texttt{tInterval} is empty (the default)
+ or not. If nonempty, we assume the graphing is parametric or
+ polar. For point plotting, \texttt{tInterval} must not be
+ included in the parameter list.
+
+ \item [\texttt{xPlot=\darg{[a,b]}}:] The parameter \texttt{xInterval} determines
+ the left and right boundaries of the graphing window; it also
+ determines the interval over which the function is to be plotted.
+ The \texttt{xPlot} separates these two functionalities; the value
+ of \texttt{xPlot} is an interval \verb![a,b]!, over which the
+ function will be plotted. Thus, \verb!xInterval={[-2,2]}! specifies
+ the scaling of the x-axis; while \verb!xPlot={[0,1]}! defines
+ the interval to plot the given function. If \texttt{xPlot} is not
+ specified, then \texttt{xInterval} will be used.
+
+ \item [\texttt{noquotes=\meta{\upshape{true|false}}}:] When argument \texttt{\#3} is parsed, it
+ is, by default, placed in double quotes, for example,
+ \verb!"x^2"!; however, there are some situations where the
+ double quotes should not be used. (See the \texttt{afgraph.tex}
+ file for one such example.) Possible values for
+ \texttt{noquotes} are \texttt{true} and \texttt{false}.
+ Including \texttt{noquotes} in the option list is equivalent to
+ \texttt{noquotes=true}. The default is \texttt{noquotes=false}.
+
+ \item [\texttt{wait=\meta{\upshape{true|false}}}:] Including
+ \texttt{wait} in the option list is equivalent to
+ \texttt{wait=true}. The default is \texttt{wait=false}. When
+ using \cs{defineGraphJS} to create a Java\-Script action that will
+ execute multiple calls to \texttt{Graph\_xy} or
+ \texttt{Graph\_xyt}, list \texttt{wait} in the option list. This
+ will cause a slight delay that allows the graphing screen to
+ become activated, (if not already activated) before the graphing
+ data is created and sent to the {\AcroFLeX} graphing widget. See
+ the example below in
+ \hyperref[defineGraphJS]{Section~\ref*{defineGraphJS}},
+ page~\pageref*{defineGraphJS}.
+ \end{description}
+ \item [\meta{func{\upshape|}points}:] This argument can be a function or a set of points.
+ \begin{description}
+ \item [\meta{func}:] A function can be three types: (1) a function of $x$; (2)
+ a function of $t$; and a pair of function of $t$. If there is a
+ single function of $t$, case (2), that is interpreted as a polar
+ function, and graphed accordingly. The pair of functions must be
+ functions of $t$ and separated by a semi-colon (;); these are
+ then interpreted as a set of parametric equations. For example,
+ \verb!x^2! would be graphed as a parabola; \verb!1+sin(t)! would
+ be graphed as a Cardioid in the polar coordinate system; and
+ \verb!cos(t);sin(t)! would be graphed as a circle.
+
+ \item [\meta{points}:] Points can be input as a semi-colon-delimited list of
+ rectangular coordinates. For example, \verb!(1,2);(2,3);(5,6)!.
+ Points can be plotted discretely, or plotted and connected with
+ either a smooth curve, or line segments.
+ \end{description}
+ \item [\meta{text}:] The text that the link is attached to, when
+ this text is clicked, the defined action of populating the graph
+ occurs.
+\end{description}
+
+\subsection{Graphing with \texorpdfstring{\protect\cs{defineGraphJS}}{\CMD{defineGraphJS}}}\label{defineGraphJS}
+
+The \cs{defineGraphJS} command expands to either
+\texttt{Graph\_xy()} or \texttt{Graph\_xyt()}, and is essentially
+the code used by \cs{sgraphLink}. Use \cs{defineGraphJS} to create a
+custom link action or form field action to graph pre-packaged
+functions.
+
+\takeMeasure{\string\defineGraphJS\darg{\meta{graph\_key\_vals}}\darg{\meta{func{\upshape|}points}}\darg{\meta{command}}}%
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\defineGraphJS{!meta(graph_key_vals)}{!meta(func(!upshape|)points)}{!meta(command)}
+\end{dCmd}
+
+\CmdDescription \cs{defineGraphJS} defines a new command
+\cs{\meta{command}} what will expand to \texttt{Graph\_xy()} or
+\texttt{Graph\_xyt()} fully populated by its arguments. This command
+can be used to create new actions that involve multiple calls to the
+{\AcroFLeX} graphing routines.
+
+\PD There are three required parameters.
+\begin{description}
+ \item [\meta{graph\_key\_vals}:] The same key-value pairs as
+ described for \cs{sgraphLink}.
+ \item [\meta{func{\upshape|}points}:] An expression representing a
+ function of $x$, a polar function of $t$, a set of parametric
+ equations, or a set of points.
+ \item [\meta{command}:] A command that this JavaScript code will
+ be saved under.
+\end{description}
+
+An example of usage can be found in \texttt{afgraph.tex}, we
+present another example here, also included in \texttt{afgraph.tex}, that
+might suggest the value of this command. We construct a link that
+graphs a function and plots discrete points.
+
+\begin{Verbatim}[fontsize=\footnotesize,xleftmargin=\amtIndent]
+\def\DomX{[0,2PI]}\def\DomY{[-1,1]}
+\defineGraphJS{graph=c1,wait,xInterval={\DomX},yInterval={\DomY},
+ points=40}{sin(x)}{\mySineCurve}
+\defineGraphJS{graph=p1,wait,xInterval={\DomX},yInterval={\DomY}}
+ {(0,sin(0));(PI/2,sin(PI/2));(PI,sin(PI));(3PI/2,sin(3PI/2));
+ (2PI,sin(2PI))}{\mySinePoints}
+\setLinkText[\A{\JS{%
+ \clearGraphJS\r
+ \mySineCurve\r
+ \mySinePoints
+}}]{Consider the sine function and indicated points}%
+\end{Verbatim}
+Note the use of the \texttt{wait} key in both the definitions to give the graphing screen
+time to be activated and ready to receive data. Observe also the list of points is given
+in symbolic form, we let JavaScript calculate the values for us.
+
+The command \Com{clearGraphJS} is used to clear the graphing screen before new curves are written
+to the screen. \cs{clearGraphJS} expands to the document JavaScript function that clears
+the graphing screen.
+
+\section{Customizations}
+
+There are a number of English phrases that appear as tooltips or as
+messages in alert dialog boxes, as a result, the acroflex package has
+a language option.
+\takeMeasure{\string\usepackage[lang=english|german]\darg{acroflex}}%
+\begin{dCmd}[commandchars=!()]{\wd\webtempboxi+2\fboxsep+2\fboxrule}
+\usepackage[lang=english|german]{acroflex}
+\end{dCmd}
+Specifying \texttt{english} as the value of \texttt{lang} inputs the
+file \texttt{afcustom\_us.def}, which normally does nothing; the
+definitions made in this file are the hard-wired defaults of the
+package. As an English speaker, you can edit this file, and improve
+the phrasing, if you wish. Specifying \texttt{german} as the value
+of \texttt{lang} inputs the file \texttt{afcustom\_de.def}; you can,
+of course, edit this file to get a preferred phrasing. If not lang
+key-value pair is specified, the \textsf{acroflex} package inputs
+the file \texttt{afcustom.def} (found in the examples folder). This
+file is intended for local use. Place it in the folder where the
+source file resides, modify it as desired to get custom messages.
+The file \texttt{afcustom.def} contains some instructions and guidelines for editing.
+
+\redpoint If the file \texttt{afcustom.def} is placed on the latex search
+path, it will be found and input for each source file; if
+\texttt{afcustom.def} is in the source file folder, it is this
+version that is found first and input.
+Should the phrases entered in \texttt{afcustom.def} require special
+accents, use the \texttt{unicode} option of \pkg{web} (which just
+passes the \texttt{unicode} option on to \pkg{hyperref}), and enter any
+special characters using {\LaTeX} notation. For example, to address
+my formerly favorite friend, J\"{u}rgen, we can write,
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\ttgraphBtn{J\"{u}rgen, press to graph the function}
+\end{Verbatim}
+For the alert box messages, use JavaScript unicode notation, for example
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\flJSStr{\af@badNumberMsg}{%
+ J\u00FCrgen, the value input does not appear to be a number,
+ please enter a number, or an expression that evaluates to a
+ number. \dps}
+\end{Verbatim}
+This latter example does not require the \texttt{unicode} option.
+
+
+\newtopic Note that \cs{flJSStr} is a new command (defined in \pkg{insdljs}) that enables you
+to enter unicode, for example, \cs{u00FC} is the u-umlaut (\verb!\"{u}! or
+\"{u}). Also, within the argument string, you can use \cs{r} (carriage
+return) and \t (tab) to format your lines as needed. Double backslash
+\verb!\\! is converted into single backslash \verb!\!, so for example,
+\verb!\\AcroTeX! appears in the dialog box as \cs{AcroTeX}. The string
+argument is immediately expanded, so a command like \cs{dps} (in the above
+definition) gets expanded at definition time. Use \cs{protect} to delay the
+expansion until the tex compiler finally expands the JS command string
+(useful here, if \cs{dps} gets redefined).
+
+
+
+\bigskip\noindent
+That's all for now, I simply must get back to my retirement. \dps
+
+\end{document}
+
+
+\newpage
+\leftskip20pt\rightskip20pt\small
+\addcontentsline{toc}{section}{\protect\numberline{}Index}
+\markright{Index}
+\printindex
diff --git a/macros/latex/contrib/acroflex/examples/afcustom.def b/macros/latex/contrib/acroflex/examples/afcustom.def
new file mode 100644
index 0000000000..b45ed17c0f
--- /dev/null
+++ b/macros/latex/contrib/acroflex/examples/afcustom.def
@@ -0,0 +1,87 @@
+%
+% AcroFleX (language) customization definition file
+% Dr. D. P. Story
+% http://www.acrotex.net
+%
+% Remove the \endinput command below, and redefine each as desired. For languages
+% that require special accented characters, the unicode option of hyperref is needed
+% for the tooltips. See the AcroFleX manual for more details.
+%
+\endinput
+%
+% ------------------------------------------------------------------;
+% These text commands are tooltip messages for the various controls ;
+% ------------------------------------------------------------------;
+%
+% For special accented characters, try entering them directly from your keyboard;
+% if that fails, use the unicode option of web (which is just passed to hyperrerf),
+% then enter the accented characters using latex commands, like \"{u} for u-umlaut.
+%
+\tticonFloatGraphScreen{Click to view graphing screen,
+ click again to hide graphing screen.}
+%
+% This message attempts to format the tooltip as an enumerated list.
+%
+\ttfuncInputField{Enter any of the following for expressions:\r
+ \space\space1. A function of x of the form f(x);\r
+ \space\space2. A polar function of t of the form f(t);\r
+ \space\space3. A set of parametric functions of t of the form f(t);g(t)\r
+ \space\space\space\space\space(separated by a semi-colon);\r
+ \space\space4. A list of points, (a1,b1);(a2,b2);...;(an,bn)\r
+ \space\space\space\space\space(separated by semi-colons).}
+\ttgraphBtn{Press to graph the function}
+\ttgraphClrBtn{Click to clear graph, shift-click to deactivate the
+ graphing screen}
+%
+\ttfunctionSelect{Enter a function on \afcurvei1--\afcurvei4, or
+ a list of points on \afploti1--\afploti4.}
+\ttsavedelSelBtn{Click to save current function to list, shift-click
+ to delete the current function from list}
+%
+\ttdomMin{Enter the minimum value for the variable x}
+\ttdomMax{Enter the maximum value for the variable x}
+\ttrngMin{Enter the minimum value for the variable y}
+\ttrngMax{Enter the maximum value for the variable y}
+\ttdomMinP{Enter the minimum value for the variable t}
+\ttdomMaxP{Enter the maximum value for the variable t}
+%
+\ttnumPoints{Enter the number of points to plot}
+\ttamtShift{Enter the amount to shift, horizontally or vertically}
+\ttzoomInOut{Click to zoom out, shift-click to zoom in}
+%
+% ------------------------------------------------------------------;
+% Below are some text macros used in creating error messages. They ;
+% may be redefined into better English, or another language. ;
+% ------------------------------------------------------------------;
+%
+% \defineJSStr is a new command (defined in eforms) that enables you
+% to enter unicode, for example, \u00FC is \"{u}. Also within the
+% argument string, you can use \r and \t to format your lines as
+% needed. Double back slash \\ is converted into single backslash \,
+% so for example, \\defineJSStr appears in the dialog box as
+% \defineJSStr. The string argument is immediately expanded, so a
+% command like \af@defaultNumPoints (in \af@zeroNumberMsg below) gets
+% expanded at definition time. Use \protect to delay the expansion
+% until the tex compiler finally expands the JS command string.
+%
+\defineJSStr{\af@badNumberMsg}{%
+ The value input does not appear to be a number, please enter a
+ number, or an expression that evaluates to a number.}
+\defineJSStr{\af@negNumberMsg}{%
+ The number of points is a positive integer, changing to a
+ positive integer.}
+\defineJSStr{\af@zeroNumberMsg}{%
+ The number of points is a positive integer, changing to the
+ default value of \af@defaultNumPoints.}
+\defineJSStr{\af@negShiftMsg}{%
+ The amount of shift is a positive number, changing to a positive
+ number.}
+\defineJSStr{\af@zeroShiftMsg}{%
+ The amount of shift is a positive number, changing to the
+ default value of 1.}
+\defineJSStr{\af@saveDelSelAlerti}{%
+ There is nothing in the function input text field.}
+\defineJSStr{\af@saveDelSelAlertii}{%
+ You have not defined any points to plot}
+\defineJSStr{\af@graphBtnAlerti}{Undefined graph types}
+\endinput
diff --git a/macros/latex/contrib/acroflex/examples/afgraph.pdf b/macros/latex/contrib/acroflex/examples/afgraph.pdf
new file mode 100644
index 0000000000..73d7eb2b7c
--- /dev/null
+++ b/macros/latex/contrib/acroflex/examples/afgraph.pdf
Binary files differ
diff --git a/macros/latex/contrib/acroflex/examples/afgraph.tex b/macros/latex/contrib/acroflex/examples/afgraph.tex
new file mode 100644
index 0000000000..62d8be729a
--- /dev/null
+++ b/macros/latex/contrib/acroflex/examples/afgraph.tex
@@ -0,0 +1,412 @@
+\documentclass{article}
+\usepackage{amsmath}
+\usepackage[%
+ web={pro,tight,usesf},
+ eforms,exerquiz,dljslib={ImplMulti},
+ graphicxsp={showembeds}
+]{aeb_pro}
+\usepackage{acroflex}
+\usepackage{wrapfig}
+
+\margins{.25in}{.25in}{24pt}{.25in} % left,right,top, bottom
+\screensize{5in}{5.5in} % height, width dimensions
+
+
+\DeclareDocInfo
+{
+ title=\texorpdfstring{{\AcroFLeX}}{AcroFleX} Graphing System,
+ author=D. P. Story,
+ university=Acro\negthinspace\TeX.Net,
+ email=dpstory@acrotex.net,
+ subject=Demo of the acroflex and the rmannot package,
+ keywords={Adobe Acrobat, JavaScript, Adobe FLEX 3, ActionScript},
+ talksite=\url{http://www.acrotex.net},
+ talkdate={July 2008},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) \the\year, D. P. Story},
+ copyrightInfoURL=http://www.acrotex.net
+}
+\talkdateLabel{Published:}
+
+\setWindowOptions{showtitle}
+
+\requiredVersionMsg{%
+ Version 9 required: This document may be viewed, but version 9
+ of Acrobat/Adobe Reader is required to view the rich media
+ annotations present in this document.}
+\requiredVersionMsgRedirect{%
+ Version 9 required: This document may be viewed, but version 9
+ of Acrobat/Adobe Reader is required to view the rich media
+ annotations present in this document.}
+\requiresVersion[warnonly]{9}
+
+\def\AcroTeX{Acro\!\TeX}
+\def\myURL{http://www.math.uakron.edu/\string~dpstory}
+%
+% The following definitions are for the rmannot package.
+% The \saveNamedPath associates the name AcroAd with the
+% path to a Flash animation, Acro_Advertiser.swf.
+% The two \makePoster definitions are for the posters of the
+% rich media annotations. The first for the animation on page 1
+% and the second for all the AcroFlex graphing screens.
+\newcommand{\myRMFiles}{C:/Users/Public/Documents/My TeX Files/%
+ tex/latex/aeb/aebpro/rmannot/RMfiles}
+\saveNamedPath{AcroAd}{\myRMFiles/Acro_Advertiser.swf}
+%
+% See the rmannot documentation. You can create your own
+% poster graphic and declare it in the preamble.
+%
+\makePoster[hiresbb]{aflogo}{aflogo}
+\makePoster[hiresbb]{AcroAd_poster}{AcroAd_poster}
+
+\parindent=0pt
+\pagestyle{empty} %\previewtrue
+\def\graphAndControls{\kern0pt\noindent
+ \graphScreen[poster=aflogo]{\hScreenGraph}{\vScreenGraph}\\[1ex]
+ \makebox[\hScreenGraph][l]{%
+ \savedelSelBtn[\textSize{7}\CA{S}]{9bp}{11bp}\kern1bp
+ \functionSelect{50bp}{11bp}\hfill
+ \funcInputField{\hScreenGraph-50bp-6bp-9bp}{11bp}%
+ }\\[1ex]
+ \makebox[\hScreenGraph][c]{\scriptsize
+ \graphBtn[\textSize{7}]{}{9bp}\kern1pt
+ \graphClrBtn[\textSize{7}]{}{9bp}\hfill
+ \hShiftL{\raisebox{1bp}{\reflectbox{\ding{220}}}}\,%
+ \vShiftU{\raisebox{1bp}{\rotatebox{90}{\ding{220}}}}\,\,%
+ \amtShift[\textSize{7}]{12bp}{9bp}\,\,%
+ \vShiftD{\raisebox{1bp}{\rotatebox[origin=c]{-90}{\ding{220}}}}
+ \hShiftR{\raisebox{1bp}{\ding{220}}}\enspace
+ \hfill\zoomInOut[\textSize{7}]{}{9bp}%
+ }\\[1pt]%
+ \makebox[\hScreenGraph][l]{\scriptsize
+ $x = $ \strut\domMin[\textSize{7}]{36bp}{9bp}\ldots
+ \domMax[\textSize{7}]{36bp}{9bp}\hfill
+ $n = $\numPoints[\textSize{7}]{16bp}{9bp}
+ }\\[1pt]%
+ \makebox[\hScreenGraph][l]{\scriptsize
+ $y = $ \rngMin[\textSize{7}]{36bp}{9bp}\ldots
+ \rngMax[\textSize{7}]{36bp}{9bp}%
+ }\\[1pt]%%
+ \makebox[\hScreenGraph][l]{\scriptsize
+ $t = $ \strut\domMinP[\textSize{7}]{36bp}{9bp}\ldots
+ \domMaxP[\textSize{7}]{36bp}{9bp}%
+ }
+\par
+}
+%
+% Display an advertisement on the opening page through the
+% \optionalPageMatter command.
+%
+\optionalPageMatter{%
+\begin{center}
+\begin{minipage}{.7\linewidth}
+ \resizebox{\linewidth}{!}{%
+ \rmAnnot[poster=AcroAd_poster,enabled=pageopen]{612bp}{265bp}{AcroAd}}%
+\end{minipage}
+\end{center}
+}
+
+\begin{document}
+
+\maketitle
+
+\parskip6pt
+\begin{center}
+ \large\bfseries\color{blue} What is {\AcroFLeX}?
+\end{center}
+
+The word \textbf{\AcroFLeX} is meant to convey a merging of two computer technologies:
+ \begin{itemize}
+ \item \textbf{Acro}: connotes both \textbf{Adobe Acrobat} (\textbf{Adobe Reader})
+ and \textbf{{Acro\negthinspace\TeX}} (as in the
+ \textbf{{Acro\negthinspace\TeX} eDucation Bundle} or, just \textbf{AeB}).
+ \item \textbf{F\kern-.1667em\lower.5ex\hbox{L}\kern-.3eme\kern-.125emX\@}: connotes
+ \textbf{Adobe FLEX 3}. FLEX 3 is used to create SWF files to interact with the user.
+ In the case of graphing, plotting information is passed from Acrobat, via JavaScript,
+ to the Flash widget. ActionScript takes the data, plots the points provided, and
+ connects them with a smooth curve.
+ \end{itemize}
+
+\textbf{\textcolor{blue}{{\AcroFLeX} by Acro\!\TeX:}} This graphing
+system and this demonstration file were developed by D.~P. Story
+using the \href{http://www.ctan.org/pkg/acrotex}{{Acro\!\TeX} eDucation
+Bundle}, \href{http://www.adobe.com/products/acrobat/}
+{$\text{Adobe}^{\text{\tiny\circledR}}$
+$\text{Acrobat}^{\text{\tiny\circledR}}$~9 Pro}, and
+\href{http://www.adobe.com/products/flex/}{$\text{Adobe}^{\text{\tiny\circledR}}$
+$\text{FLEX}^{\text{\tiny TM}}$~3}.
+
+Acrobat 9 Pro introduces the rich media annotation that plays FLV
+movies and SWF files natively. Acrobat also provides a scripting
+bridge between JavaScript for Acrobat, and ActionScript, the
+scripting language of Flash player. This bridge enables the PDF and
+the Flash widget, embedded in the rich media annotation, to
+communicate. The scripting bridge opens up wonderful opportunities
+for application to the education sector. The graphing of {\AcroFLeX}
+is one such application of the new PDF-Flash connection to
+education.
+
+\textbf{{\AcroFLeX}} uses the commercial product Adobe FLEX
+Builder~3 and FLEX~3 SDK to produce Flash widgets, and the AeB to
+create PDF documents with appropriate JavaScript to communicate with
+the Flash widget. FLEX Builder~3 is currently free for students and
+educators, the FLEX 3 SDK is free to all.
+
+\newpage
+\parskip0pt
+
+% Basic parameters. These are the graphing screen dimensions you wish
+% for the AcroFleX graphing widget, and the \graphName is the base name used by
+% all the supporting components to the graphing screen.
+
+\dimScreenGraph{186bp}{186bp*3/4}
+\graphName{graph1}
+
+\begin{center}\bfseries\Large\color{blue}
+ {\AcroFLeX} by {\AcroTeX}
+\end{center}
+
+\medskip
+The first goal in {\AcroFLeX} development was to build an interactive graphing
+screen educators could use in their PDFs.
+\medskip
+
+\begin{minipage}[t]{\hScreenGraph + 10bp}
+%
+% Insert the \graphScreen with all possible controls. Plot data entered by the
+% user is interactive mode.
+\graphAndControls
+\medskip
+%
+% Pass plot data to this graphing screen, and allow user to interact with it.
+%
+\makebox[\linewidth][c]{\textbf{Populate Mode}}
+Parametric Equations: \sgraphLink{xInterval={[-1,1]},yInterval={[-1,1]},tInterval={[0,2*pi]},
+ points=40,populate=true}{cos(t);sin(t)}{$x=\cos(t)$; $y=\sin(t)$}\\[1ex]
+Polar Function: \sgraphLink{type=polar,xInterval={[-1.5,1.5]},yInterval={[-1,2]},tInterval={[0,2*pi]},
+ points=60,populate=true}{1+sin(t)}{$r = 1 + \sin(\theta)$ }
+\end{minipage}\hfill
+\begin{minipage}[t]{\linewidth - \hScreenGraph - 10bp}\small\par
+\textbf{\textcolor{red}{Instructions:}} This graphing system can graph
+a function of $x$, a pair of parametric functions of $t$,
+or a polar function of $t$.
+\begin{questions}
+ \item For a function of $x$, enter an algebraic expression to be graphed, e.g.,
+ \verb!3x^2-1!, \verb!4sin(2x)!, \verb!ln(x)!,
+ \verb!e^(x+1)!. For parametric equations, two functions of
+ $t$ separated by a semicolon (;) e.g.,
+ \texttt{cos(t);sin(t)}. For a polar function, enter a single
+ expression that is a function of $t$, e.g.,
+ \texttt{1+sin(t)}.
+ \item Set the graph viewing window: The range of the horizontal
+ axis ($x$-axis) and range of the vertical axis ($y$-axis).
+ For parametric plotting, set the range of the $t$ variable.
+ \item Enter the number of points, $n$, to plot.
+ \item Click the \textsf{Graph It!} button.
+ \item Shift the viewing window horizontally or vertical;
+ or zoom in or out.
+ \item Click \texttt{Clear} to clear the plot; use
+ \textsf{shift-click} to deactivate the graphing screen.
+\end{questions}
+\end{minipage}
+
+\def\DomX{[0,2pi]}\def\DomY{[-1,1+.2]}
+
+%\end{document}
+
+\newpage
+\graphName{graph2}
+\begin{center}
+ {\large\textbf{\textcolor{blue}{Graphing Predefined Functions}}}\\[3ex]
+ \graphScreen[poster=aflogo]{\hScreenGraph}{\vScreenGraph}\par\smallskip
+ \makebox[\hScreenGraph][c]{\small\graphClrBtn{}{11bp}}
+\end{center}
+
+\begin{center}
+ \rule{.67\linewidth}{.4pt}
+\end{center}
+The document author, that's you, can prepare some functions for the student to view:
+\sgraphLink{xInterval={\DomX},yInterval={\DomY},points=40}{sin(x)}{$\sin(x)$},
+\sgraphLink{xInterval={\DomX},yInterval={\DomY},points=80}{sin(2x)}{$\sin(2x)$},
+\sgraphLink{xInterval={\DomX},yInterval={\DomY},points=100}{sin(3x)}{$\sin(3x)$}, and
+\sgraphLink{xInterval={\DomX},yInterval={\DomY},points=100}{sin(4x)}{$\sin(4x)$}.
+All functions are graphed over the interval
+$[\,0, 2\pi\,]$. Let's view a graph with a vertical asymptote, shall we?
+Try \sgraphLink{xInterval={[.5,1.5]},yInterval={[-20,20]},points=200}{1/(x-1)}{$y = 1/(x-1)$}
+and \sgraphLink{xInterval={[0,2]},yInterval={[0,20]},points=200}{1/(x-1)^2}{$y = 1/(x-1)^2$}.
+
+\smallskip
+\begin{center}
+ \rule{.67\linewidth}{.4pt}
+\end{center}
+\begin{shortquiz}
+What type of symmetry does the \sgraphLink{xInterval={[-pi,pi]},yInterval={[-1,1]},
+points=40}{sin(x)}{function}, graphed above, have?
+\begin{answers}{3}
+\Ans0 $x$-axis symmetry & \Ans0 $y$-axis symmetry & \Ans1 origin symmetry
+\end{answers}
+\end{shortquiz}
+
+\newpage
+\graphName{graph3}
+
+\begin{center}
+ {\large\textbf{\textcolor{blue}{Multiple Curves and Plots}}}\\[3ex]
+ \graphScreen[poster=aflogo]{\hScreenGraph}{\vScreenGraph}\par\smallskip
+ \makebox[\hScreenGraph][c]{\small\graphClrBtn{}{11bp}}
+\end{center}
+
+\smallskip
+\begin{center}
+ \rule{.67\linewidth}{.4pt}
+\end{center}
+
+Plot multiple curves using predefined functions:
+\begin{itemize}
+ \item \sgraphLink{graph=c1,xInterval={\DomX},yInterval={\DomY},points=40}{sin(x)}{$\sin(x)$},
+ \sgraphLink{graph=c2,xInterval={\DomX},yInterval={\DomY},points=80}{sin(2x)}{$\sin(2x)$},
+ \sgraphLink{graph=c3,xInterval={\DomX},yInterval={\DomY},points=100}{sin(3x)}{$\sin(3x)$},
+ \sgraphLink{graph=c4,xInterval={\DomX},yInterval={\DomY},points=100}{sin(4x)}{$\sin(4x)$}.
+\end{itemize}
+
+Let's plot some points:
+\begin{itemize}
+
+\item Points on \sgraphLink{graph=p1,xInterval={\DomX},yInterval={\DomY}}{(0,sin(0));(pi/2,sin(pi/2));(pi,sin(pi));(3pi/2,sin(3pi/2));(2pi,sin(2pi))}{$\sin(x)$}
+(clear the graphing screen, click on this \sgraphLink{graph=c1,xInterval={\DomX},yInterval={\DomY},points=40}{sin(x)}{$\sin(x)$}
+link, then click on the plotted points link)
+
+
+\item Plot \sgraphLink{graph=p2,xInterval={\DomX},yInterval={\DomY}}{(1,1);(2,-1);(4,1/3);(3,-1/2)}
+ {$(1,1); (2,-1); (4,1/3); (3,-1/2)$}
+
+\item Plot \sgraphLink{graph=c2,connectwith=segment,xInterval={\DomX},yInterval={\DomY}}{(2,0);(1,-1);(3,.5);(4,1);(6,0)}
+ {$(2,0);(1,-1);(3,.5);(4,1);(6,0)$}
+
+\end{itemize}
+
+\newpage
+
+\graphName{graph4}
+
+\begin{center}
+ {\large\textbf{\textcolor{blue}{Graphing in a Floating Window}}}
+\end{center}
+
+\begin{wrapfigure}[3]{l}{40bp}%
+\vspace{-\baselineskip}
+\iconFloatGraphScreen[poster=aflogo]{40bp}{!}
+\end{wrapfigure}%
+On this page, we take a different approach, by graphing functions
+in a \textsl{floating window}. This might be appropriate for graphing
+preset functions. Now let's copy and paste some of the previous text
+here: The document author, that's you, can prepare some functions
+for the student to view:
+\sgraphLink{xInterval={\DomX},yInterval={\DomY},points=40}{sin(x)}{$\sin(x)$},
+\sgraphLink{xInterval={\DomX},yInterval={\DomY},points=80}{sin(2x)}{$\sin(2x)$},
+\sgraphLink{xInterval={\DomX},yInterval={\DomY},points=100}{sin(3x)}{$\sin(3x)$}, and
+\sgraphLink{xInterval={\DomX},yInterval={\DomY},points=100}{sin(4x)}{$\sin(4x)$}.
+All functions are graphed over the interval
+$[\,0, 2\pi\,]$. Let's view a graph with a vertical asymptote, shall we?
+Try \sgraphLink{xInterval={[.5,1.5]},yInterval={[-20,20]},points=200}{1/(x-1)}{$y = 1/(x-1)$}
+and \sgraphLink{xInterval={[0,2]},yInterval={[0,20]},points=200}{1/(x-1)^2}{$y = 1/(x-1)^2$}.
+
+
+\makebox[\linewidth][c]{\rule{.67\linewidth}{.4pt}}
+
+\parskip6pt
+
+\paragraph*{Controlling the Floating Window.} Clicking a graphing
+link will open the floating window and graph the defined function.
+Clicking the {\AcroFLeX} icon closes the window. The window itself
+has controls. The clicking the upper-right corner closes the window.
+Use the lower-left corner to resize the graph window (click and drag
+the lower-left corner). Click and drag anywhere else on the boundary
+will move the window.
+
+\makebox[\linewidth][c]{\rule{.67\linewidth}{.4pt}}
+
+The following quiz integrates the quiz/shortquiz environment with
+the {\AcroFLeX} Graphing routines, and uses \texttt{\string\defineGraphJS}
+to graph the input of the user.
+
+\begin{oQuestion}{afGraphQuiz}
+\defineGraphJS{graph=c3,xInterval={[-1,3]},yInterval={[-1,9]},
+ noquotes,points=40}{event.value}{\myGraph}%
+\textbf{\textcolor{red}{Question}} Find the equation of the line
+tangent to the \sgraphLink{xInterval={[-1,3]},
+yInterval={[-1,9]},points=40}{2x^2}{graph of $f(x) = 2x^2 $} at the
+\sgraphLink{graph=p1,xInterval={[-1,3]},yInterval={[-1,9]}}{(1,2)}
+ {point $ (1,2) $}. \RespBoxMath[%
+ \AddAAKeystroke{if (retn != null){\r\myGraph}}]
+ {4x-2}{4}{.0001}{[-1,3]}\hfill\CorrAnsButton{4x-2}\kern1bp\sqClearButton
+
+\end{oQuestion}
+
+\defineGraphJS{graph=c1,wait,xInterval={\DomX},yInterval={\DomY},
+ points=40}{sin(x)}{\mySineCurve}
+\defineGraphJS{graph=p1,wait,xInterval={\DomX},yInterval={\DomY}}
+ {(0,sin(0));(pi/2,sin(pi/2));(pi,sin(pi));(3pi/2,sin(3pi/2));
+ (2pi,sin(2pi))}{\mySinePoints}
+
+Below is another example of the use of
+\texttt{\string\defineGraphJS}. A link is created with two calls to
+the graphing routines, one to plot a sine curve, the other to plot
+points on that curve.
+\setLinkText[\A{\JS{%
+ \clearGraphJS\r
+ \mySineCurve\r
+ \mySinePoints
+}}]{Consider the sine function, and indicated points}%
+
+
+\newpage
+
+\graphName{graph5}
+
+\begin{center}
+ {\large\textbf{\textcolor{blue}{Curves with filled area}}}\\[3ex]
+ \graphScreen[poster=aflogo]{\hScreenGraph}{\vScreenGraph}\par\smallskip
+ \makebox[\hScreenGraph][c]{\small\graphClrBtn{}{11bp}}
+\end{center}
+
+Plot multiple curves using predefined functions:\\
+\begin{minipage}[t]{.5\linewidth-10pt}\kern0pt
+\begin{itemize}
+ \item \sgraphLink{graph=a1,xInterval={\DomX},yInterval={\DomY},points=40}{sin(x)}{$\sin(x)$},
+ \sgraphLink{graph=a2,xInterval={\DomX},yInterval={\DomY},points=80}{sin(2x)}{$\sin(2x)$},
+ \sgraphLink{graph=a3,xInterval={\DomX},yInterval={\DomY},points=100}{sin(3x)}{$\sin(3x)$},
+ \sgraphLink{graph=a4,xInterval={\DomX},yInterval={\DomY},points=100}{sin(4x)}{$\sin(4x)$}.
+ \item Parametric Equations
+ \begin{itemize}
+ \item \sgraphLink{graph=a1,xInterval={[-1,1]},yInterval={[-1,1]},tInterval={[0,2*pi]},
+ points=40}{cos(t);sin(t)}{$x=\cos(t)$; $y=\sin(t)$}
+ \item \sgraphLink{graph=a3,xInterval={[0,4]},yInterval={[-2,2]},tInterval={[-2,2]},
+ points=40}{t^2;t}{$x=t^2$; $y=t$}
+ \end{itemize}
+\end{itemize}
+\end{minipage}\hfill\begin{minipage}[t]{.5\linewidth-10pt}\kern0pt
+\begin{itemize}
+ \item Polar Functions
+ \begin{itemize}
+ \item \sgraphLink{graph=a2,type=polar,xInterval={[-1.5,1.5]},yInterval={[-1,2.3]},tInterval={[0,2pi]},
+ points=60}{1+sin(t)}{$ r = 1 + \sin(\theta) $ }
+ \item \sgraphLink{graph=a4,type=polar,xInterval={[-1.5,1.5]},yInterval={[-1,2.3]},tInterval={[0,2pi]},
+ points=60}{1+1.25sin(t)}{$r = 1 + 1.25\sin(\theta)$ }
+ \end{itemize}
+\end{itemize}
+\end{minipage}
+
+\begin{oQuestion}{afAreaQuiz}
+\textbf{\textcolor{red}{Question}} Find the area of the region
+\emph{below} the graph of \sgraphLink{graph=a1,xInterval={[0,pi/2]},
+yInterval={[0,1.1]}, points=40}{cos(x)}{$ f(x) = \cos(x) $} and
+\emph{above} the graph of \sgraphLink{graph=a2,
+xInterval={[0,pi/2]}, yInterval={[0,1.1]}, points=40}{sin(x)}{$ g(x)
+= \sin(x) $},
+as shown in the graph screen above.\\[1ex]
+\RespBoxMath{sqrt(2)-1}{1}{.0001}{[0,1]}\hfill\CorrAnsButton{sqrt(2)-1}\kern1bp\sqClearButton
+\end{oQuestion}
+
+
+\end{document}
diff --git a/macros/latex/contrib/acroflex/examples/afgraph_shaded.tex b/macros/latex/contrib/acroflex/examples/afgraph_shaded.tex
new file mode 100644
index 0000000000..c2ca0f29d6
--- /dev/null
+++ b/macros/latex/contrib/acroflex/examples/afgraph_shaded.tex
@@ -0,0 +1,107 @@
+\documentclass{article}
+\usepackage{amsmath}
+\usepackage[%
+% driver=dvips,
+ web={pro,tight,usesf},
+ eforms,exerquiz,dljslib={ImplMulti},
+ graphicxsp={showembeds}
+]{aeb_pro}
+\usepackage{rmannot}
+\usepackage{acroflex}
+
+\margins{.25in}{.25in}{24pt}{.25in} % left,right,top, bottom
+\screensize{5in}{5.5in} % height, width dimensions
+
+\DeclareDocInfo
+{
+ title=\texorpdfstring{{\AcroFLeX}}{AcroFleX} Graphing System
+ \texorpdfstring{\\[1ex]}{: }Graphing a Subinterval,
+ author=D. P. Story,
+ university=Acro\negthinspace\TeX.Net,
+ email=dpstory@acrotex.net,
+ subject=Demo of the acroflex and the rmannot package,
+ keywords={Adobe Acrobat, JavaScript, Adobe FLEX 3, ActionScript},
+ talksite=\url{http://www.acrotex.net},
+ talkdate={July 2008},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) \the\year, D. P. Story},
+ copyrightInfoURL=http://www.acrotex.net
+}
+\talkdateLabel{Published:}
+
+\setWindowOptions{showtitle}
+
+\requiredVersionMsg{%
+ Version 9 required: This document may be viewed, but version 9
+ of Acrobat/Adobe Reader is required to view the rich media
+ annotations present in this document.}
+\requiredVersionMsgRedirect{%
+ Version 9 required: This document may be viewed, but version 9
+ of Acrobat/Adobe Reader is required to view the rich media
+ annotations present in this document.}
+\requiresVersion[warnonly]{9}
+
+\def\AcroTeX{Acro\!\TeX}
+\def\myURL{http://www.math.uakron.edu/\string~dpstory}
+%
+% The following definitions are for the rmannot package.
+% The \saveNamedPath associates the name AcroAd with the
+% path to a Flash animation, Acro_Advertiser.swf.
+% The two \makePoster definitions are for the posters of the
+% rich media annotations. The first for the animation on page 1
+% and the second for all the AcroFlex graphing screens.
+\newcommand{\myRMFiles}{C:/Users/Public/Documents/My TeX Files/%
+ tex/latex/aeb/aebpro/rmannot/RMfiles}
+%\newcommand{\myRMFiles}{C:/AcroTeX/acrotex/aebpro/rmannot/RMfiles}
+\saveNamedPath{AcroAd}{\myRMFiles/Acro_Advertiser.swf}
+%\saveNamedPath{AcroAd}{Acro_Advertiser.swf}
+%
+% See the rmannot documentation. You can create your own
+% poster graphic and declare it in the preamble.
+%
+\makePoster[hiresbb]{aflogo}{aflogo}
+
+\parindent=0pt
+\pagestyle{empty}
+
+\optionalPageMatter{%
+\begin{center}
+\begin{minipage}{.7\linewidth}
+ \resizebox{\linewidth}{!}{%
+ \rmAnnot[poster=AcroAd_poster,enabled=pageopen]{612bp}{265bp}{AcroAd}}%
+\end{minipage}
+\end{center}
+}
+
+
+
+\begin{document}
+
+\maketitle
+
+\dimScreenGraph{186bp}{186bp*3/4}
+\graphName{graph1}
+
+\begin{center}
+ {\large\textbf{\textcolor{blue}{Curves with filled area}}}\\[3ex]
+ \graphScreen[poster=aflogo]{\hScreenGraph}{\vScreenGraph}\par\smallskip
+ \makebox[\hScreenGraph][c]{\small\graphClrBtn{}{11bp}}
+\end{center}
+
+
+% I've added a new parameter xPlot, the value is an interval of numbers over which
+% the graph is to be plotted. See the documentation in acroflex.dtx for a little more
+% detail. xInterval={[-1.6,1.6]},
+\defineGraphJS{graph=c1,wait,xInterval={[-1.6,1.6]},yInterval={[-.5,2]},points=40}{x^2}{\myParabola}
+\defineGraphJS{graph=a1,wait,xPlot={[-1,0]},xInterval={[-1.6,1.6]},yInterval={[-.5,2]},points=40}{x^2}{\myShadedParabola}
+\defineGraphJS{graph=a2,wait,xPlot={[-1,0]},xInterval={[-1.6,1.6]},yInterval={[-.5,2]},points=4}{1}{\myHLine}
+
+View a shaded curve, and be
+\setLinkText[\A{\JS{%
+ \clearGraphJS\r
+ \myShadedParabola\r
+ \myHLine\r
+ \myParabola\r
+}}]{amazed!}%
+
+\end{document}
diff --git a/macros/latex/contrib/acroflex/examples/aflogo.eps b/macros/latex/contrib/acroflex/examples/aflogo.eps
new file mode 100644
index 0000000000..789100d9fe
--- /dev/null
+++ b/macros/latex/contrib/acroflex/examples/aflogo.eps
@@ -0,0 +1,8375 @@
+%!PS-Adobe-3.1 EPSF-3.0
+%ADO_DSC_Encoding: Windows Roman
+%%Title: aflogo.pdf
+%%Creator: Adobe Acrobat 9.0.0
+%%For: Donald Story
+%%CreationDate: 06/09/2008, 10:48:11 AM
+%%BoundingBox: 0 0 186 150
+%%HiResBoundingBox: 0 0 186 150
+%%CropBox: 0 0 186 150
+%%LanguageLevel: 2
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%DocumentNeededFeatures: (atend)
+%%DocumentSuppliedFeatures: (atend)
+%%DocumentData: Clean7Bit
+%%Pages: (atend)
+%%DocumentCustomColors: (atend)
+%%EndComments
+%%BeginDefaults
+%%ViewingOrientation: 1 0 0 1
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset Adobe_AGM_Utils 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{currentpacking true setpacking}if
+userdict/Adobe_AGM_Utils 75 dict dup begin put
+/bdf
+{bind def}bind def
+/nd{null def}bdf
+/xdf
+{exch def}bdf
+/ldf
+{load def}bdf
+/ddf
+{put}bdf
+/xddf
+{3 -1 roll put}bdf
+/xpt
+{exch put}bdf
+/ndf
+{
+ exch dup where{
+ pop pop pop
+ }{
+ xdf
+ }ifelse
+}def
+/cdndf
+{
+ exch dup currentdict exch known{
+ pop pop
+ }{
+ exch def
+ }ifelse
+}def
+/gx
+{get exec}bdf
+/ps_level
+ /languagelevel where{
+ pop systemdict/languagelevel gx
+ }{
+ 1
+ }ifelse
+def
+/level2
+ ps_level 2 ge
+def
+/level3
+ ps_level 3 ge
+def
+/ps_version
+ {version cvr}stopped{-1}if
+def
+/set_gvm
+{currentglobal exch setglobal}bdf
+/reset_gvm
+{setglobal}bdf
+/makereadonlyarray
+{
+ /packedarray where{pop packedarray
+ }{
+ array astore readonly}ifelse
+}bdf
+/map_reserved_ink_name
+{
+ dup type/stringtype eq{
+ dup/Red eq{
+ pop(_Red_)
+ }{
+ dup/Green eq{
+ pop(_Green_)
+ }{
+ dup/Blue eq{
+ pop(_Blue_)
+ }{
+ dup()cvn eq{
+ pop(Process)
+ }if
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+}bdf
+/AGMUTIL_GSTATE 22 dict def
+/get_gstate
+{
+ AGMUTIL_GSTATE begin
+ /AGMUTIL_GSTATE_clr_spc currentcolorspace def
+ /AGMUTIL_GSTATE_clr_indx 0 def
+ /AGMUTIL_GSTATE_clr_comps 12 array def
+ mark currentcolor counttomark
+ {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
+ /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def}repeat pop
+ /AGMUTIL_GSTATE_fnt rootfont def
+ /AGMUTIL_GSTATE_lw currentlinewidth def
+ /AGMUTIL_GSTATE_lc currentlinecap def
+ /AGMUTIL_GSTATE_lj currentlinejoin def
+ /AGMUTIL_GSTATE_ml currentmiterlimit def
+ currentdash/AGMUTIL_GSTATE_do xdf/AGMUTIL_GSTATE_da xdf
+ /AGMUTIL_GSTATE_sa currentstrokeadjust def
+ /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
+ /AGMUTIL_GSTATE_op currentoverprint def
+ /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
+ /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
+ currentcolortransfer cvlit/AGMUTIL_GSTATE_gy_xfer xdf cvlit/AGMUTIL_GSTATE_b_xfer xdf
+ cvlit/AGMUTIL_GSTATE_g_xfer xdf cvlit/AGMUTIL_GSTATE_r_xfer xdf
+ /AGMUTIL_GSTATE_ht currenthalftone def
+ /AGMUTIL_GSTATE_flt currentflat def
+ end
+}def
+/set_gstate
+{
+ AGMUTIL_GSTATE begin
+ AGMUTIL_GSTATE_clr_spc setcolorspace
+ AGMUTIL_GSTATE_clr_indx{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
+ /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def}repeat setcolor
+ AGMUTIL_GSTATE_fnt setfont
+ AGMUTIL_GSTATE_lw setlinewidth
+ AGMUTIL_GSTATE_lc setlinecap
+ AGMUTIL_GSTATE_lj setlinejoin
+ AGMUTIL_GSTATE_ml setmiterlimit
+ AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
+ AGMUTIL_GSTATE_sa setstrokeadjust
+ AGMUTIL_GSTATE_clr_rnd setcolorrendering
+ AGMUTIL_GSTATE_op setoverprint
+ AGMUTIL_GSTATE_bg cvx setblackgeneration
+ AGMUTIL_GSTATE_ucr cvx setundercolorremoval
+ AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
+ AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
+ AGMUTIL_GSTATE_ht/HalftoneType get dup 9 eq exch 100 eq or
+ {
+ currenthalftone/HalftoneType get AGMUTIL_GSTATE_ht/HalftoneType get ne
+ {
+ mark AGMUTIL_GSTATE_ht{sethalftone}stopped cleartomark
+ }if
+ }{
+ AGMUTIL_GSTATE_ht sethalftone
+ }ifelse
+ AGMUTIL_GSTATE_flt setflat
+ end
+}def
+/get_gstate_and_matrix
+{
+ AGMUTIL_GSTATE begin
+ /AGMUTIL_GSTATE_ctm matrix currentmatrix def
+ end
+ get_gstate
+}def
+/set_gstate_and_matrix
+{
+ set_gstate
+ AGMUTIL_GSTATE begin
+ AGMUTIL_GSTATE_ctm setmatrix
+ end
+}def
+/AGMUTIL_str256 256 string def
+/AGMUTIL_src256 256 string def
+/AGMUTIL_dst64 64 string def
+/AGMUTIL_srcLen nd
+/AGMUTIL_ndx nd
+/AGMUTIL_cpd nd
+/capture_cpd{
+ //Adobe_AGM_Utils/AGMUTIL_cpd currentpagedevice ddf
+}def
+/thold_halftone
+{
+ level3
+ {sethalftone currenthalftone}
+ {
+ dup/HalftoneType get 3 eq
+ {
+ sethalftone currenthalftone
+ }{
+ begin
+ Width Height mul{
+ Thresholds read{pop}if
+ }repeat
+ end
+ currenthalftone
+ }ifelse
+ }ifelse
+}def
+/rdcmntline
+{
+ currentfile AGMUTIL_str256 readline pop
+ (%)anchorsearch{pop}if
+}bdf
+/filter_cmyk
+{
+ dup type/filetype ne{
+ exch()/SubFileDecode filter
+ }{
+ exch pop
+ }
+ ifelse
+ [
+ exch
+ {
+ AGMUTIL_src256 readstring pop
+ dup length/AGMUTIL_srcLen exch def
+ /AGMUTIL_ndx 0 def
+ AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
+ 1 index exch get
+ AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
+ /AGMUTIL_ndx AGMUTIL_ndx 1 add def
+ }for
+ pop
+ AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
+ }
+ bind
+ /exec cvx
+ ]cvx
+}bdf
+/filter_indexed_devn
+{
+ cvi Names length mul names_index add Lookup exch get
+}bdf
+/filter_devn
+{
+ 4 dict begin
+ /srcStr xdf
+ /dstStr xdf
+ dup type/filetype ne{
+ 0()/SubFileDecode filter
+ }if
+ [
+ exch
+ [
+ /devicen_colorspace_dict/AGMCORE_gget cvx/begin cvx
+ currentdict/srcStr get/readstring cvx/pop cvx
+ /dup cvx/length cvx 0/gt cvx[
+ Adobe_AGM_Utils/AGMUTIL_ndx 0/ddf cvx
+ names_index Names length currentdict/srcStr get length 1 sub{
+ 1/index cvx/exch cvx/get cvx
+ currentdict/dstStr get/AGMUTIL_ndx/load cvx 3 -1/roll cvx/put cvx
+ Adobe_AGM_Utils/AGMUTIL_ndx/AGMUTIL_ndx/load cvx 1/add cvx/ddf cvx
+ }for
+ currentdict/dstStr get 0/AGMUTIL_ndx/load cvx/getinterval cvx
+ ]cvx/if cvx
+ /end cvx
+ ]cvx
+ bind
+ /exec cvx
+ ]cvx
+ end
+}bdf
+/AGMUTIL_imagefile nd
+/read_image_file
+{
+ AGMUTIL_imagefile 0 setfileposition
+ 10 dict begin
+ /imageDict xdf
+ /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
+ /imbufIdx 0 def
+ /origDataSource imageDict/DataSource get def
+ /origMultipleDataSources imageDict/MultipleDataSources get def
+ /origDecode imageDict/Decode get def
+ /dstDataStr imageDict/Width get colorSpaceElemCnt mul string def
+ imageDict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ {
+ /imbufCnt imageDict/DataSource get length def
+ /imbufs imbufCnt array def
+ 0 1 imbufCnt 1 sub{
+ /imbufIdx xdf
+ imbufs imbufIdx imbufLen string put
+ imageDict/DataSource get imbufIdx[AGMUTIL_imagefile imbufs imbufIdx get/readstring cvx/pop cvx]cvx put
+ }for
+ DeviceN_PS2{
+ imageDict begin
+ /DataSource[DataSource/devn_sep_datasource cvx]cvx def
+ /MultipleDataSources false def
+ /Decode[0 1]def
+ end
+ }if
+ }{
+ /imbuf imbufLen string def
+ Indexed_DeviceN level3 not and DeviceN_NoneName or{
+ /srcDataStrs[imageDict begin
+ currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
+ {
+ Width Decode length 2 div mul cvi string
+ }repeat
+ end]def
+ imageDict begin
+ /DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def
+ /Decode[0 1]def
+ end
+ }{
+ imageDict/DataSource[1 string dup 0 AGMUTIL_imagefile Decode length 2 idiv string/readstring cvx/pop cvx names_index/get cvx/put cvx]cvx put
+ imageDict/Decode[0 1]put
+ }ifelse
+ }ifelse
+ imageDict exch
+ load exec
+ imageDict/DataSource origDataSource put
+ imageDict/MultipleDataSources origMultipleDataSources put
+ imageDict/Decode origDecode put
+ end
+}bdf
+/write_image_file
+{
+ begin
+ {(AGMUTIL_imagefile)(w+)file}stopped{
+ false
+ }{
+ Adobe_AGM_Utils/AGMUTIL_imagefile xddf
+ 2 dict begin
+ /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
+ MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{
+ /imbuf imbufLen string def
+ }if
+ 1 1 Height MultipleDataSources not{Decode length 2 idiv mul}if{
+ pop
+ MultipleDataSources{
+ 0 1 DataSource length 1 sub{
+ DataSource type dup
+ /arraytype eq{
+ pop DataSource exch gx
+ }{
+ /filetype eq{
+ DataSource exch get imbuf readstring pop
+ }{
+ DataSource exch get
+ }ifelse
+ }ifelse
+ AGMUTIL_imagefile exch writestring
+ }for
+ }{
+ DataSource type dup
+ /arraytype eq{
+ pop DataSource exec
+ }{
+ /filetype eq{
+ DataSource imbuf readstring pop
+ }{
+ DataSource
+ }ifelse
+ }ifelse
+ AGMUTIL_imagefile exch writestring
+ }ifelse
+ }for
+ end
+ true
+ }ifelse
+ end
+}bdf
+/close_image_file
+{
+ AGMUTIL_imagefile closefile(AGMUTIL_imagefile)deletefile
+}def
+statusdict/product known userdict/AGMP_current_show known not and{
+ /pstr statusdict/product get def
+ pstr(HP LaserJet 2200)eq
+ pstr(HP LaserJet 4000 Series)eq or
+ pstr(HP LaserJet 4050 Series )eq or
+ pstr(HP LaserJet 8000 Series)eq or
+ pstr(HP LaserJet 8100 Series)eq or
+ pstr(HP LaserJet 8150 Series)eq or
+ pstr(HP LaserJet 5000 Series)eq or
+ pstr(HP LaserJet 5100 Series)eq or
+ pstr(HP Color LaserJet 4500)eq or
+ pstr(HP Color LaserJet 4600)eq or
+ pstr(HP LaserJet 5Si)eq or
+ pstr(HP LaserJet 1200 Series)eq or
+ pstr(HP LaserJet 1300 Series)eq or
+ pstr(HP LaserJet 4100 Series)eq or
+ {
+ userdict/AGMP_current_show/show load put
+ userdict/show{
+ currentcolorspace 0 get
+ /Pattern eq
+ {false charpath f}
+ {AGMP_current_show}ifelse
+ }put
+ }if
+ currentdict/pstr undef
+}if
+/consumeimagedata
+{
+ begin
+ AGMIMG_init_common
+ currentdict/MultipleDataSources known not
+ {/MultipleDataSources false def}if
+ MultipleDataSources
+ {
+ DataSource 0 get type
+ dup/filetype eq
+ {
+ 1 dict begin
+ /flushbuffer Width cvi string def
+ 1 1 Height cvi
+ {
+ pop
+ 0 1 DataSource length 1 sub
+ {
+ DataSource exch get
+ flushbuffer readstring pop pop
+ }for
+ }for
+ end
+ }if
+ dup/arraytype eq exch/packedarraytype eq or DataSource 0 get xcheck and
+ {
+ Width Height mul cvi
+ {
+ 0 1 DataSource length 1 sub
+ {dup DataSource exch gx length exch 0 ne{pop}if}for
+ dup 0 eq
+ {pop exit}if
+ sub dup 0 le
+ {exit}if
+ }loop
+ pop
+ }if
+ }
+ {
+ /DataSource load type
+ dup/filetype eq
+ {
+ 1 dict begin
+ /flushbuffer Width Decode length 2 idiv mul cvi string def
+ 1 1 Height{pop DataSource flushbuffer readstring pop pop}for
+ end
+ }if
+ dup/arraytype eq exch/packedarraytype eq or/DataSource load xcheck and
+ {
+ Height Width BitsPerComponent mul 8 BitsPerComponent sub add 8 idiv Decode length 2 idiv mul mul
+ {
+ DataSource length dup 0 eq
+ {pop exit}if
+ sub dup 0 le
+ {exit}if
+ }loop
+ pop
+ }if
+ }ifelse
+ end
+}bdf
+/addprocs
+{
+ 2{/exec load}repeat
+ 3 1 roll
+ [5 1 roll]bind cvx
+}def
+/modify_halftone_xfer
+{
+ currenthalftone dup length dict copy begin
+ currentdict 2 index known{
+ 1 index load dup length dict copy begin
+ currentdict/TransferFunction known{
+ /TransferFunction load
+ }{
+ currenttransfer
+ }ifelse
+ addprocs/TransferFunction xdf
+ currentdict end def
+ currentdict end sethalftone
+ }{
+ currentdict/TransferFunction known{
+ /TransferFunction load
+ }{
+ currenttransfer
+ }ifelse
+ addprocs/TransferFunction xdf
+ currentdict end sethalftone
+ pop
+ }ifelse
+}def
+/clonearray
+{
+ dup xcheck exch
+ dup length array exch
+ Adobe_AGM_Core/AGMCORE_tmp -1 ddf
+ {
+ Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf
+ dup type/dicttype eq
+ {
+ Adobe_AGM_Core/AGMCORE_tmp get
+ exch
+ clonedict
+ Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
+ }if
+ dup type/arraytype eq
+ {
+ Adobe_AGM_Core/AGMCORE_tmp get exch
+ clonearray
+ Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
+ }if
+ exch dup
+ Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put
+ }forall
+ exch{cvx}if
+}bdf
+/clonedict
+{
+ dup length dict
+ begin
+ {
+ dup type/dicttype eq
+ {clonedict}if
+ dup type/arraytype eq
+ {clonearray}if
+ def
+ }forall
+ currentdict
+ end
+}bdf
+/DeviceN_PS2
+{
+ /currentcolorspace AGMCORE_gget 0 get/DeviceN eq level3 not and
+}bdf
+/Indexed_DeviceN
+{
+ /indexed_colorspace_dict AGMCORE_gget dup null ne{
+ dup/CSDBase known{
+ /CSDBase get/CSD get_res/Names known
+ }{
+ pop false
+ }ifelse
+ }{
+ pop false
+ }ifelse
+}bdf
+/DeviceN_NoneName
+{
+ /Names where{
+ pop
+ false Names
+ {
+ (None)eq or
+ }forall
+ }{
+ false
+ }ifelse
+}bdf
+/DeviceN_PS2_inRip_seps
+{
+ /AGMCORE_in_rip_sep where
+ {
+ pop dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ dup 0 get/DeviceN eq level3 not and AGMCORE_in_rip_sep and
+ {
+ /currentcolorspace exch AGMCORE_gput
+ false
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+}bdf
+/base_colorspace_type
+{
+ dup type/arraytype eq{0 get}if
+}bdf
+/currentdistillerparams where{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
+{
+ /pdfmark_5{cleartomark}bind def
+}{
+ /pdfmark_5{pdfmark}bind def
+}ifelse
+/ReadBypdfmark_5
+{
+ currentfile exch 0 exch/SubFileDecode filter
+ /currentdistillerparams where
+ {pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
+ {flushfile cleartomark}
+ {/PUT pdfmark}ifelse
+}bdf
+/ReadBypdfmark_5_string
+{
+ 2 dict begin
+ /makerString exch def string/tmpString exch def
+ {
+ currentfile tmpString readline not{pop exit}if
+ makerString anchorsearch
+ {
+ pop pop cleartomark exit
+ }{
+ 3 copy/PUT pdfmark_5 pop 2 copy(\n)/PUT pdfmark_5
+ }ifelse
+ }loop
+ end
+}bdf
+/xpdfm
+{
+ {
+ dup 0 get/Label eq
+ {
+ aload length[exch 1 add 1 roll/PAGELABEL
+ }{
+ aload pop
+ [{ThisPage}<<5 -2 roll>>/PUT
+ }ifelse
+ pdfmark_5
+ }forall
+}bdf
+/lmt{
+ dup 2 index le{exch}if pop dup 2 index ge{exch}if pop
+}bdf
+/int{
+ dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul exch pop add exch pop
+}bdf
+/ds{
+ Adobe_AGM_Utils begin
+}bdf
+/dt{
+ currentdict Adobe_AGM_Utils eq{
+ end
+ }if
+}bdf
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+%%BeginResource: procset Adobe_AGM_Core 2.0 0
+%%Version: 2.0 0
+%%Copyright: Copyright(C)1997-2007 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{
+ currentpacking
+ true setpacking
+}if
+userdict/Adobe_AGM_Core 209 dict dup begin put
+/Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def
+/AGMCORE_str256 256 string def
+/AGMCORE_save nd
+/AGMCORE_graphicsave nd
+/AGMCORE_c 0 def
+/AGMCORE_m 0 def
+/AGMCORE_y 0 def
+/AGMCORE_k 0 def
+/AGMCORE_cmykbuf 4 array def
+/AGMCORE_screen[currentscreen]cvx def
+/AGMCORE_tmp 0 def
+/AGMCORE_&setgray nd
+/AGMCORE_&setcolor nd
+/AGMCORE_&setcolorspace nd
+/AGMCORE_&setcmykcolor nd
+/AGMCORE_cyan_plate nd
+/AGMCORE_magenta_plate nd
+/AGMCORE_yellow_plate nd
+/AGMCORE_black_plate nd
+/AGMCORE_plate_ndx nd
+/AGMCORE_get_ink_data nd
+/AGMCORE_is_cmyk_sep nd
+/AGMCORE_host_sep nd
+/AGMCORE_avoid_L2_sep_space nd
+/AGMCORE_distilling nd
+/AGMCORE_composite_job nd
+/AGMCORE_producing_seps nd
+/AGMCORE_ps_level -1 def
+/AGMCORE_ps_version -1 def
+/AGMCORE_environ_ok nd
+/AGMCORE_CSD_cache 0 dict def
+/AGMCORE_currentoverprint false def
+/AGMCORE_deltaX nd
+/AGMCORE_deltaY nd
+/AGMCORE_name nd
+/AGMCORE_sep_special nd
+/AGMCORE_err_strings 4 dict def
+/AGMCORE_cur_err nd
+/AGMCORE_current_spot_alias false def
+/AGMCORE_inverting false def
+/AGMCORE_feature_dictCount nd
+/AGMCORE_feature_opCount nd
+/AGMCORE_feature_ctm nd
+/AGMCORE_ConvertToProcess false def
+/AGMCORE_Default_CTM matrix def
+/AGMCORE_Default_PageSize nd
+/AGMCORE_Default_flatness nd
+/AGMCORE_currentbg nd
+/AGMCORE_currentucr nd
+/AGMCORE_pattern_paint_type 0 def
+/knockout_unitsq nd
+currentglobal true setglobal
+[/CSA/Gradient/Procedure]
+{
+ /Generic/Category findresource dup length dict copy/Category defineresource pop
+}forall
+setglobal
+/AGMCORE_key_known
+{
+ where{
+ /Adobe_AGM_Core_Id known
+ }{
+ false
+ }ifelse
+}ndf
+/flushinput
+{
+ save
+ 2 dict begin
+ /CompareBuffer 3 -1 roll def
+ /readbuffer 256 string def
+ mark
+ {
+ currentfile readbuffer{readline}stopped
+ {cleartomark mark}
+ {
+ not
+ {pop exit}
+ if
+ CompareBuffer eq
+ {exit}
+ if
+ }ifelse
+ }loop
+ cleartomark
+ end
+ restore
+}bdf
+/getspotfunction
+{
+ AGMCORE_screen exch pop exch pop
+ dup type/dicttype eq{
+ dup/HalftoneType get 1 eq{
+ /SpotFunction get
+ }{
+ dup/HalftoneType get 2 eq{
+ /GraySpotFunction get
+ }{
+ pop
+ {
+ abs exch abs 2 copy add 1 gt{
+ 1 sub dup mul exch 1 sub dup mul add 1 sub
+ }{
+ dup mul exch dup mul add 1 exch sub
+ }ifelse
+ }bind
+ }ifelse
+ }ifelse
+ }if
+}def
+/np
+{newpath}bdf
+/clp_npth
+{clip np}def
+/eoclp_npth
+{eoclip np}def
+/npth_clp
+{np clip}def
+/graphic_setup
+{
+ /AGMCORE_graphicsave save store
+ concat
+ 0 setgray
+ 0 setlinecap
+ 0 setlinejoin
+ 1 setlinewidth
+ []0 setdash
+ 10 setmiterlimit
+ np
+ false setoverprint
+ false setstrokeadjust
+ //Adobe_AGM_Core/spot_alias gx
+ /Adobe_AGM_Image where{
+ pop
+ Adobe_AGM_Image/spot_alias 2 copy known{
+ gx
+ }{
+ pop pop
+ }ifelse
+ }if
+ /sep_colorspace_dict null AGMCORE_gput
+ 100 dict begin
+ /dictstackcount countdictstack def
+ /showpage{}def
+ mark
+}def
+/graphic_cleanup
+{
+ cleartomark
+ dictstackcount 1 countdictstack 1 sub{end}for
+ end
+ AGMCORE_graphicsave restore
+}def
+/compose_error_msg
+{
+ grestoreall initgraphics
+ /Helvetica findfont 10 scalefont setfont
+ /AGMCORE_deltaY 100 def
+ /AGMCORE_deltaX 310 def
+ clippath pathbbox np pop pop 36 add exch 36 add exch moveto
+ 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
+ 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
+ 0 AGMCORE_&setgray
+ gsave 1 AGMCORE_&setgray fill grestore
+ 1 setlinewidth gsave stroke grestore
+ currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
+ /AGMCORE_deltaY 12 def
+ /AGMCORE_tmp 0 def
+ AGMCORE_err_strings exch get
+ {
+ dup 32 eq
+ {
+ pop
+ AGMCORE_str256 0 AGMCORE_tmp getinterval
+ stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
+ {
+ currentpoint AGMCORE_deltaY sub exch pop
+ clippath pathbbox pop pop pop 44 add exch moveto
+ }if
+ AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show
+ 0 1 AGMCORE_str256 length 1 sub
+ {
+ AGMCORE_str256 exch 0 put
+ }for
+ /AGMCORE_tmp 0 def
+ }{
+ AGMCORE_str256 exch AGMCORE_tmp xpt
+ /AGMCORE_tmp AGMCORE_tmp 1 add def
+ }ifelse
+ }forall
+}bdf
+/AGMCORE_CMYKDeviceNColorspaces[
+ [/Separation/None/DeviceCMYK{0 0 0}]
+ [/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind]
+ [/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind]
+ [/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind]
+ [/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind]
+ [/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind]
+ [/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind]
+ [/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind]
+ [/Separation(Cyan)/DeviceCMYK{0 0 0}]
+ [/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind]
+ [/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind]
+ [/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind]
+ [/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}]
+ [/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind]
+ [/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}]
+ [/DeviceCMYK]
+]def
+/ds{
+ Adobe_AGM_Core begin
+ /currentdistillerparams where
+ {
+ pop currentdistillerparams/CoreDistVersion get 5000 lt
+ {<</DetectBlends false>>setdistillerparams}if
+ }if
+ /AGMCORE_ps_version xdf
+ /AGMCORE_ps_level xdf
+ errordict/AGM_handleerror known not{
+ errordict/AGM_handleerror errordict/handleerror get put
+ errordict/handleerror{
+ Adobe_AGM_Core begin
+ $error/newerror get AGMCORE_cur_err null ne and{
+ $error/newerror false put
+ AGMCORE_cur_err compose_error_msg
+ }if
+ $error/newerror true put
+ end
+ errordict/AGM_handleerror get exec
+ }bind put
+ }if
+ /AGMCORE_environ_ok
+ ps_level AGMCORE_ps_level ge
+ ps_version AGMCORE_ps_version ge and
+ AGMCORE_ps_level -1 eq or
+ def
+ AGMCORE_environ_ok not
+ {/AGMCORE_cur_err/AGMCORE_bad_environ def}if
+ /AGMCORE_&setgray systemdict/setgray get def
+ level2{
+ /AGMCORE_&setcolor systemdict/setcolor get def
+ /AGMCORE_&setcolorspace systemdict/setcolorspace get def
+ }if
+ /AGMCORE_currentbg currentblackgeneration def
+ /AGMCORE_currentucr currentundercolorremoval def
+ /AGMCORE_Default_flatness currentflat def
+ /AGMCORE_distilling
+ /product where{
+ pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and
+ }{
+ false
+ }ifelse
+ def
+ /AGMCORE_GSTATE AGMCORE_key_known not{
+ /AGMCORE_GSTATE 21 dict def
+ /AGMCORE_tmpmatrix matrix def
+ /AGMCORE_gstack 32 array def
+ /AGMCORE_gstackptr 0 def
+ /AGMCORE_gstacksaveptr 0 def
+ /AGMCORE_gstackframekeys 14 def
+ /AGMCORE_&gsave/gsave ldf
+ /AGMCORE_&grestore/grestore ldf
+ /AGMCORE_&grestoreall/grestoreall ldf
+ /AGMCORE_&save/save ldf
+ /AGMCORE_&setoverprint/setoverprint ldf
+ /AGMCORE_gdictcopy{
+ begin
+ {def}forall
+ end
+ }def
+ /AGMCORE_gput{
+ AGMCORE_gstack AGMCORE_gstackptr get
+ 3 1 roll
+ put
+ }def
+ /AGMCORE_gget{
+ AGMCORE_gstack AGMCORE_gstackptr get
+ exch
+ get
+ }def
+ /gsave{
+ AGMCORE_&gsave
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gstackptr 1 add
+ dup 32 ge{limitcheck}if
+ /AGMCORE_gstackptr exch store
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gdictcopy
+ }def
+ /grestore{
+ AGMCORE_&grestore
+ AGMCORE_gstackptr 1 sub
+ dup AGMCORE_gstacksaveptr lt{1 add}if
+ dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known
+ {/AGMCORE_currentoverprint get setoverprint}{pop}ifelse
+ /AGMCORE_gstackptr exch store
+ }def
+ /grestoreall{
+ AGMCORE_&grestoreall
+ /AGMCORE_gstackptr AGMCORE_gstacksaveptr store
+ }def
+ /save{
+ AGMCORE_&save
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gstackptr 1 add
+ dup 32 ge{limitcheck}if
+ /AGMCORE_gstackptr exch store
+ /AGMCORE_gstacksaveptr AGMCORE_gstackptr store
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gdictcopy
+ }def
+ /setoverprint{
+ dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint
+ }def
+ 0 1 AGMCORE_gstack length 1 sub{
+ AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
+ }for
+ }if
+ level3/AGMCORE_&sysshfill AGMCORE_key_known not and
+ {
+ /AGMCORE_&sysshfill systemdict/shfill get def
+ /AGMCORE_&sysmakepattern systemdict/makepattern get def
+ /AGMCORE_&usrmakepattern/makepattern load def
+ }if
+ /currentcmykcolor[0 0 0 0]AGMCORE_gput
+ /currentstrokeadjust false AGMCORE_gput
+ /currentcolorspace[/DeviceGray]AGMCORE_gput
+ /sep_tint 0 AGMCORE_gput
+ /devicen_tints[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]AGMCORE_gput
+ /sep_colorspace_dict null AGMCORE_gput
+ /devicen_colorspace_dict null AGMCORE_gput
+ /indexed_colorspace_dict null AGMCORE_gput
+ /currentcolor_intent()AGMCORE_gput
+ /customcolor_tint 1 AGMCORE_gput
+ /absolute_colorimetric_crd null AGMCORE_gput
+ /relative_colorimetric_crd null AGMCORE_gput
+ /saturation_crd null AGMCORE_gput
+ /perceptual_crd null AGMCORE_gput
+ currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf
+ cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf
+ <<
+ /MaxPatternItem currentsystemparams/MaxPatternCache get
+ >>
+ setuserparams
+ end
+}def
+/ps
+{
+ /setcmykcolor where{
+ pop
+ Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put
+ }if
+ Adobe_AGM_Core begin
+ /setcmykcolor
+ {
+ 4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput
+ 1 sub 4 1 roll
+ 3{
+ 3 index add neg dup 0 lt{
+ pop 0
+ }if
+ 3 1 roll
+ }repeat
+ setrgbcolor pop
+ }ndf
+ /currentcmykcolor
+ {
+ /currentcmykcolor AGMCORE_gget aload pop
+ }ndf
+ /setoverprint
+ {pop}ndf
+ /currentoverprint
+ {false}ndf
+ /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
+ /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
+ /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
+ /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
+ /AGMCORE_plate_ndx
+ AGMCORE_cyan_plate{
+ 0
+ }{
+ AGMCORE_magenta_plate{
+ 1
+ }{
+ AGMCORE_yellow_plate{
+ 2
+ }{
+ AGMCORE_black_plate{
+ 3
+ }{
+ 4
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_have_reported_unsupported_color_space false def
+ /AGMCORE_report_unsupported_color_space
+ {
+ AGMCORE_have_reported_unsupported_color_space false eq
+ {
+ (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)==
+ Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf
+ }if
+ }def
+ /AGMCORE_composite_job
+ AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
+ /AGMCORE_in_rip_sep
+ /AGMCORE_in_rip_sep where{
+ pop AGMCORE_in_rip_sep
+ }{
+ AGMCORE_distilling
+ {
+ false
+ }{
+ userdict/Adobe_AGM_OnHost_Seps known{
+ false
+ }{
+ level2{
+ currentpagedevice/Separations 2 copy known{
+ get
+ }{
+ pop pop false
+ }ifelse
+ }{
+ false
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
+ /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
+ /AGM_preserve_spots
+ /AGM_preserve_spots where{
+ pop AGM_preserve_spots
+ }{
+ AGMCORE_distilling AGMCORE_producing_seps or
+ }ifelse
+ def
+ /AGM_is_distiller_preserving_spotimages
+ {
+ currentdistillerparams/PreserveOverprintSettings known
+ {
+ currentdistillerparams/PreserveOverprintSettings get
+ {
+ currentdistillerparams/ColorConversionStrategy known
+ {
+ currentdistillerparams/ColorConversionStrategy get
+ /sRGB ne
+ }{
+ true
+ }ifelse
+ }{
+ false
+ }ifelse
+ }{
+ false
+ }ifelse
+ }def
+ /convert_spot_to_process where{pop}{
+ /convert_spot_to_process
+ {
+ //Adobe_AGM_Core begin
+ dup map_alias{
+ /Name get exch pop
+ }if
+ dup dup(None)eq exch(All)eq or
+ {
+ pop false
+ }{
+ AGMCORE_host_sep
+ {
+ gsave
+ 1 0 0 0 setcmykcolor currentgray 1 exch sub
+ 0 1 0 0 setcmykcolor currentgray 1 exch sub
+ 0 0 1 0 setcmykcolor currentgray 1 exch sub
+ 0 0 0 1 setcmykcolor currentgray 1 exch sub
+ add add add 0 eq
+ {
+ pop false
+ }{
+ false setoverprint
+ current_spot_alias false set_spot_alias
+ 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
+ set_spot_alias
+ currentgray 1 ne
+ }ifelse
+ grestore
+ }{
+ AGMCORE_distilling
+ {
+ pop AGM_is_distiller_preserving_spotimages not
+ }{
+ //Adobe_AGM_Core/AGMCORE_name xddf
+ false
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 0 eq
+ AGMUTIL_cpd/OverrideSeparations known and
+ {
+ AGMUTIL_cpd/OverrideSeparations get
+ {
+ /HqnSpots/ProcSet resourcestatus
+ {
+ pop pop pop true
+ }if
+ }if
+ }if
+ {
+ AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not
+ }{
+ gsave
+ [/Separation AGMCORE_name/DeviceGray{}]AGMCORE_&setcolorspace
+ false
+ AGMUTIL_cpd/SeparationColorNames 2 copy known
+ {
+ get
+ {AGMCORE_name eq or}forall
+ not
+ }{
+ pop pop pop true
+ }ifelse
+ grestore
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ end
+ }def
+ }ifelse
+ /convert_to_process where{pop}{
+ /convert_to_process
+ {
+ dup length 0 eq
+ {
+ pop false
+ }{
+ AGMCORE_host_sep
+ {
+ dup true exch
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ dup(Black)eq 3 -1 roll or
+ {pop}
+ {convert_spot_to_process and}ifelse
+ }
+ forall
+ {
+ true exch
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ (Black)eq or and
+ }forall
+ not
+ }{pop false}ifelse
+ }{
+ false exch
+ {
+ /PhotoshopDuotoneList where{pop false}{true}ifelse
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ dup(Black)eq 3 -1 roll or
+ {pop}
+ {convert_spot_to_process or}ifelse
+ }
+ {
+ convert_spot_to_process or
+ }
+ ifelse
+ }
+ forall
+ }ifelse
+ }ifelse
+ }def
+ }ifelse
+ /AGMCORE_avoid_L2_sep_space
+ version cvr 2012 lt
+ level2 and
+ AGMCORE_producing_seps not and
+ def
+ /AGMCORE_is_cmyk_sep
+ AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
+ def
+ /AGM_avoid_0_cmyk where{
+ pop AGM_avoid_0_cmyk
+ }{
+ AGM_preserve_spots
+ userdict/Adobe_AGM_OnHost_Seps known
+ userdict/Adobe_AGM_InRip_Seps known or
+ not and
+ }ifelse
+ {
+ /setcmykcolor[
+ {
+ 4 copy add add add 0 eq currentoverprint and{
+ pop 0.0005
+ }if
+ }/exec cvx
+ /AGMCORE_&setcmykcolor load dup type/operatortype ne{
+ /exec cvx
+ }if
+ ]cvx def
+ }if
+ /AGMCORE_IsSeparationAProcessColor
+ {
+ dup(Cyan)eq exch dup(Magenta)eq exch dup(Yellow)eq exch(Black)eq or or or
+ }def
+ AGMCORE_host_sep{
+ /setcolortransfer
+ {
+ AGMCORE_cyan_plate{
+ pop pop pop
+ }{
+ AGMCORE_magenta_plate{
+ 4 3 roll pop pop pop
+ }{
+ AGMCORE_yellow_plate{
+ 4 2 roll pop pop pop
+ }{
+ 4 1 roll pop pop pop
+ }ifelse
+ }ifelse
+ }ifelse
+ settransfer
+ }
+ def
+ /AGMCORE_get_ink_data
+ AGMCORE_cyan_plate{
+ {pop pop pop}
+ }{
+ AGMCORE_magenta_plate{
+ {4 3 roll pop pop pop}
+ }{
+ AGMCORE_yellow_plate{
+ {4 2 roll pop pop pop}
+ }{
+ {4 1 roll pop pop pop}
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_RemoveProcessColorNames
+ {
+ 1 dict begin
+ /filtername
+ {
+ dup/Cyan eq 1 index(Cyan)eq or
+ {pop(_cyan_)}if
+ dup/Magenta eq 1 index(Magenta)eq or
+ {pop(_magenta_)}if
+ dup/Yellow eq 1 index(Yellow)eq or
+ {pop(_yellow_)}if
+ dup/Black eq 1 index(Black)eq or
+ {pop(_black_)}if
+ }def
+ dup type/arraytype eq
+ {[exch{filtername}forall]}
+ {filtername}ifelse
+ end
+ }def
+ level3{
+ /AGMCORE_IsCurrentColor
+ {
+ dup AGMCORE_IsSeparationAProcessColor
+ {
+ AGMCORE_plate_ndx 0 eq
+ {dup(Cyan)eq exch/Cyan eq or}if
+ AGMCORE_plate_ndx 1 eq
+ {dup(Magenta)eq exch/Magenta eq or}if
+ AGMCORE_plate_ndx 2 eq
+ {dup(Yellow)eq exch/Yellow eq or}if
+ AGMCORE_plate_ndx 3 eq
+ {dup(Black)eq exch/Black eq or}if
+ AGMCORE_plate_ndx 4 eq
+ {pop false}if
+ }{
+ gsave
+ false setoverprint
+ current_spot_alias false set_spot_alias
+ 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
+ set_spot_alias
+ currentgray 1 ne
+ grestore
+ }ifelse
+ }def
+ /AGMCORE_filter_functiondatasource
+ {
+ 5 dict begin
+ /data_in xdf
+ data_in type/stringtype eq
+ {
+ /ncomp xdf
+ /comp xdf
+ /string_out data_in length ncomp idiv string def
+ 0 ncomp data_in length 1 sub
+ {
+ string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put
+ }for
+ string_out
+ }{
+ string/string_in xdf
+ /string_out 1 string def
+ /component xdf
+ [
+ data_in string_in/readstring cvx
+ [component/get cvx 255/exch cvx/sub cvx string_out/exch cvx 0/exch cvx/put cvx string_out]cvx
+ [/pop cvx()]cvx/ifelse cvx
+ ]cvx/ReusableStreamDecode filter
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShadingFunction
+ {
+ 2 dict begin
+ /paint? xdf
+ /channel xdf
+ dup type/dicttype eq
+ {
+ begin
+ FunctionType 0 eq
+ {
+ /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def
+ currentdict/Decode known
+ {/Decode Decode channel 2 mul 2 getinterval def}if
+ paint? not
+ {/Decode[1 1]def}if
+ }if
+ FunctionType 2 eq
+ {
+ paint?
+ {
+ /C0[C0 channel get 1 exch sub]def
+ /C1[C1 channel get 1 exch sub]def
+ }{
+ /C0[1]def
+ /C1[1]def
+ }ifelse
+ }if
+ FunctionType 3 eq
+ {
+ /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def
+ }if
+ currentdict/Range known
+ {/Range[0 1]def}if
+ currentdict
+ end}{
+ channel get 0 paint? AGMCORE_separateShadingFunction
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShading
+ {
+ 3 -1 roll begin
+ currentdict/Function known
+ {
+ currentdict/Background known
+ {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if
+ Function 3 1 roll AGMCORE_separateShadingFunction/Function xdf
+ /ColorSpace[/DeviceGray]def
+ }{
+ ColorSpace dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
+ }{
+ ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put
+ }ifelse
+ ColorSpace 0 get/Separation eq
+ {
+ {
+ [1/exch cvx/sub cvx]cvx
+ }{
+ [/pop cvx 1]cvx
+ }ifelse
+ ColorSpace 3 3 -1 roll put
+ pop
+ }{
+ {
+ [exch ColorSpace 1 get length 1 sub exch sub/index cvx 1/exch cvx/sub cvx ColorSpace 1 get length 1 add 1/roll cvx ColorSpace 1 get length{/pop cvx}repeat]cvx
+ }{
+ pop[ColorSpace 1 get length{/pop cvx}repeat cvx 1]cvx
+ }ifelse
+ ColorSpace 3 3 -1 roll bind put
+ }ifelse
+ ColorSpace 2/DeviceGray put
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShadingDict
+ {
+ dup/ColorSpace get
+ dup type/arraytype ne
+ {[exch]}if
+ dup 0 get/DeviceCMYK eq
+ {
+ exch begin
+ currentdict
+ AGMCORE_cyan_plate
+ {0 true}if
+ AGMCORE_magenta_plate
+ {1 true}if
+ AGMCORE_yellow_plate
+ {2 true}if
+ AGMCORE_black_plate
+ {3 true}if
+ AGMCORE_plate_ndx 4 eq
+ {0 false}if
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ currentdict
+ end exch
+ }if
+ dup 0 get/Separation eq
+ {
+ exch begin
+ ColorSpace 1 get dup/None ne exch/All ne and
+ {
+ ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and
+ {
+ ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace
+ [
+ /Separation
+ ColorSpace 1 get
+ /DeviceGray
+ [
+ ColorSpace 3 get/exec cvx
+ 4 AGMCORE_plate_ndx sub -1/roll cvx
+ 4 1/roll cvx
+ 3[/pop cvx]cvx/repeat cvx
+ 1/exch cvx/sub cvx
+ ]cvx
+ ]def
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ currentdict 0 false AGMCORE_separateShading
+ }if
+ }ifelse
+ }{
+ currentdict ColorSpace 1 get AGMCORE_IsCurrentColor
+ 0 exch
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ }ifelse
+ }if
+ currentdict
+ end exch
+ }if
+ dup 0 get/DeviceN eq
+ {
+ exch begin
+ ColorSpace 1 get convert_to_process
+ {
+ ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace
+ [
+ /DeviceN
+ ColorSpace 1 get
+ /DeviceGray
+ [
+ ColorSpace 3 get/exec cvx
+ 4 AGMCORE_plate_ndx sub -1/roll cvx
+ 4 1/roll cvx
+ 3[/pop cvx]cvx/repeat cvx
+ 1/exch cvx/sub cvx
+ ]cvx
+ ]def
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ currentdict 0 false AGMCORE_separateShading
+ /ColorSpace[/DeviceGray]def
+ }if
+ }ifelse
+ }{
+ currentdict
+ false -1 ColorSpace 1 get
+ {
+ AGMCORE_IsCurrentColor
+ {
+ 1 add
+ exch pop true exch exit
+ }if
+ 1 add
+ }forall
+ exch
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ }ifelse
+ currentdict
+ end exch
+ }if
+ dup 0 get dup/DeviceCMYK eq exch dup/Separation eq exch/DeviceN eq or or not
+ {
+ exch begin
+ ColorSpace dup type/arraytype eq
+ {0 get}if
+ /DeviceGray ne
+ {
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ ColorSpace 0 get/CIEBasedA eq
+ {
+ /ColorSpace[/Separation/_ciebaseda_/DeviceGray{}]def
+ }if
+ ColorSpace 0 get dup/CIEBasedABC eq exch dup/CIEBasedDEF eq exch/DeviceRGB eq or or
+ {
+ /ColorSpace[/DeviceN[/_red_/_green_/_blue_]/DeviceRGB{}]def
+ }if
+ ColorSpace 0 get/CIEBasedDEFG eq
+ {
+ /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
+ }if
+ currentdict 0 false AGMCORE_separateShading
+ }if
+ }if
+ currentdict
+ end exch
+ }if
+ pop
+ dup/AGMCORE_ignoreshade known
+ {
+ begin
+ /ColorSpace[/Separation(None)/DeviceGray{}]def
+ currentdict end
+ }if
+ }def
+ /shfill
+ {
+ AGMCORE_separateShadingDict
+ dup/AGMCORE_ignoreshade known
+ {pop}
+ {AGMCORE_&sysshfill}ifelse
+ }def
+ /makepattern
+ {
+ exch
+ dup/PatternType get 2 eq
+ {
+ clonedict
+ begin
+ /Shading Shading AGMCORE_separateShadingDict def
+ Shading/AGMCORE_ignoreshade known
+ currentdict end exch
+ {pop<</PatternType 1/PaintProc{pop}/BBox[0 0 1 1]/XStep 1/YStep 1/PaintType 1/TilingType 3>>}if
+ exch AGMCORE_&sysmakepattern
+ }{
+ exch AGMCORE_&usrmakepattern
+ }ifelse
+ }def
+ }if
+ }if
+ AGMCORE_in_rip_sep{
+ /setcustomcolor
+ {
+ exch aload pop
+ dup 7 1 roll inRip_spot_has_ink not {
+ 4{4 index mul 4 1 roll}
+ repeat
+ /DeviceCMYK setcolorspace
+ 6 -2 roll pop pop
+ }{
+ //Adobe_AGM_Core begin
+ /AGMCORE_k xdf/AGMCORE_y xdf/AGMCORE_m xdf/AGMCORE_c xdf
+ end
+ [/Separation 4 -1 roll/DeviceCMYK
+ {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
+ ]
+ setcolorspace
+ }ifelse
+ setcolor
+ }ndf
+ /setseparationgray
+ {
+ [/Separation(All)/DeviceGray{}]setcolorspace_opt
+ 1 exch sub setcolor
+ }ndf
+ }{
+ /setseparationgray
+ {
+ AGMCORE_&setgray
+ }ndf
+ }ifelse
+ /findcmykcustomcolor
+ {
+ 5 makereadonlyarray
+ }ndf
+ /setcustomcolor
+ {
+ exch aload pop pop
+ 4{4 index mul 4 1 roll}repeat
+ setcmykcolor pop
+ }ndf
+ /has_color
+ /colorimage where{
+ AGMCORE_producing_seps{
+ pop true
+ }{
+ systemdict eq
+ }ifelse
+ }{
+ false
+ }ifelse
+ def
+ /map_index
+ {
+ 1 index mul exch getinterval{255 div}forall
+ }bdf
+ /map_indexed_devn
+ {
+ Lookup Names length 3 -1 roll cvi map_index
+ }bdf
+ /n_color_components
+ {
+ base_colorspace_type
+ dup/DeviceGray eq{
+ pop 1
+ }{
+ /DeviceCMYK eq{
+ 4
+ }{
+ 3
+ }ifelse
+ }ifelse
+ }bdf
+ level2{
+ /mo/moveto ldf
+ /li/lineto ldf
+ /cv/curveto ldf
+ /knockout_unitsq
+ {
+ 1 setgray
+ 0 0 1 1 rectfill
+ }def
+ level2/setcolorspace AGMCORE_key_known not and{
+ /AGMCORE_&&&setcolorspace/setcolorspace ldf
+ /AGMCORE_ReplaceMappedColor
+ {
+ dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ /AGMCORE_SpotAliasAry2 where{
+ begin
+ dup 0 get dup/Separation eq
+ {
+ pop
+ dup length array copy
+ dup dup 1 get
+ current_spot_alias
+ {
+ dup map_alias
+ {
+ false set_spot_alias
+ dup 1 exch setsepcolorspace
+ true set_spot_alias
+ begin
+ /sep_colorspace_dict currentdict AGMCORE_gput
+ pop pop pop
+ [
+ /Separation Name
+ CSA map_csa
+ MappedCSA
+ /sep_colorspace_proc load
+ ]
+ dup Name
+ end
+ }if
+ }if
+ map_reserved_ink_name 1 xpt
+ }{
+ /DeviceN eq
+ {
+ dup length array copy
+ dup dup 1 get[
+ exch{
+ current_spot_alias{
+ dup map_alias{
+ /Name get exch pop
+ }if
+ }if
+ map_reserved_ink_name
+ }forall
+ ]1 xpt
+ }if
+ }ifelse
+ end
+ }if
+ }if
+ }def
+ /setcolorspace
+ {
+ dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ dup 0 get/Indexed eq
+ {
+ AGMCORE_distilling
+ {
+ /PhotoshopDuotoneList where
+ {
+ pop false
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+ {
+ aload pop 3 -1 roll
+ AGMCORE_ReplaceMappedColor
+ 3 1 roll 4 array astore
+ }if
+ }{
+ AGMCORE_ReplaceMappedColor
+ }ifelse
+ }if
+ DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if
+ }def
+ }if
+ }{
+ /adj
+ {
+ currentstrokeadjust{
+ transform
+ 0.25 sub round 0.25 add exch
+ 0.25 sub round 0.25 add exch
+ itransform
+ }if
+ }def
+ /mo{
+ adj moveto
+ }def
+ /li{
+ adj lineto
+ }def
+ /cv{
+ 6 2 roll adj
+ 6 2 roll adj
+ 6 2 roll adj curveto
+ }def
+ /knockout_unitsq
+ {
+ 1 setgray
+ 8 8 1[8 0 0 8 0 0]{<ffffffffffffffff>}image
+ }def
+ /currentstrokeadjust{
+ /currentstrokeadjust AGMCORE_gget
+ }def
+ /setstrokeadjust{
+ /currentstrokeadjust exch AGMCORE_gput
+ }def
+ /setcolorspace
+ {
+ /currentcolorspace exch AGMCORE_gput
+ }def
+ /currentcolorspace
+ {
+ /currentcolorspace AGMCORE_gget
+ }def
+ /setcolor_devicecolor
+ {
+ base_colorspace_type
+ dup/DeviceGray eq{
+ pop setgray
+ }{
+ /DeviceCMYK eq{
+ setcmykcolor
+ }{
+ setrgbcolor
+ }ifelse
+ }ifelse
+ }def
+ /setcolor
+ {
+ currentcolorspace 0 get
+ dup/DeviceGray ne{
+ dup/DeviceCMYK ne{
+ dup/DeviceRGB ne{
+ dup/Separation eq{
+ pop
+ currentcolorspace 3 gx
+ currentcolorspace 2 get
+ }{
+ dup/Indexed eq{
+ pop
+ currentcolorspace 3 get dup type/stringtype eq{
+ currentcolorspace 1 get n_color_components
+ 3 -1 roll map_index
+ }{
+ exec
+ }ifelse
+ currentcolorspace 1 get
+ }{
+ /AGMCORE_cur_err/AGMCORE_invalid_color_space def
+ AGMCORE_invalid_color_space
+ }ifelse
+ }ifelse
+ }if
+ }if
+ }if
+ setcolor_devicecolor
+ }def
+ }ifelse
+ /sop/setoverprint ldf
+ /lw/setlinewidth ldf
+ /lc/setlinecap ldf
+ /lj/setlinejoin ldf
+ /ml/setmiterlimit ldf
+ /dsh/setdash ldf
+ /sadj/setstrokeadjust ldf
+ /gry/setgray ldf
+ /rgb/setrgbcolor ldf
+ /cmyk[
+ /currentcolorspace[/DeviceCMYK]/AGMCORE_gput cvx
+ /setcmykcolor load dup type/operatortype ne{/exec cvx}if
+ ]cvx bdf
+ level3 AGMCORE_host_sep not and{
+ /nzopmsc{
+ 6 dict begin
+ /kk exch def
+ /yy exch def
+ /mm exch def
+ /cc exch def
+ /sum 0 def
+ cc 0 ne{/sum sum 2#1000 or def cc}if
+ mm 0 ne{/sum sum 2#0100 or def mm}if
+ yy 0 ne{/sum sum 2#0010 or def yy}if
+ kk 0 ne{/sum sum 2#0001 or def kk}if
+ AGMCORE_CMYKDeviceNColorspaces sum get setcolorspace
+ sum 0 eq{0}if
+ end
+ setcolor
+ }bdf
+ }{
+ /nzopmsc/cmyk ldf
+ }ifelse
+ /sep/setsepcolor ldf
+ /devn/setdevicencolor ldf
+ /idx/setindexedcolor ldf
+ /colr/setcolor ldf
+ /csacrd/set_csa_crd ldf
+ /sepcs/setsepcolorspace ldf
+ /devncs/setdevicencolorspace ldf
+ /idxcs/setindexedcolorspace ldf
+ /cp/closepath ldf
+ /clp/clp_npth ldf
+ /eclp/eoclp_npth ldf
+ /f/fill ldf
+ /ef/eofill ldf
+ /@/stroke ldf
+ /nclp/npth_clp ldf
+ /gset/graphic_setup ldf
+ /gcln/graphic_cleanup ldf
+ /ct/concat ldf
+ /cf/currentfile ldf
+ /fl/filter ldf
+ /rs/readstring ldf
+ /AGMCORE_def_ht currenthalftone def
+ /clonedict Adobe_AGM_Utils begin/clonedict load end def
+ /clonearray Adobe_AGM_Utils begin/clonearray load end def
+ currentdict{
+ dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
+ bind
+ }if
+ def
+ }forall
+ /getrampcolor
+ {
+ /indx exch def
+ 0 1 NumComp 1 sub
+ {
+ dup
+ Samples exch get
+ dup type/stringtype eq{indx get}if
+ exch
+ Scaling exch get aload pop
+ 3 1 roll
+ mul add
+ }for
+ ColorSpaceFamily/Separation eq
+ {sep}
+ {
+ ColorSpaceFamily/DeviceN eq
+ {devn}{setcolor}ifelse
+ }ifelse
+ }bdf
+ /sssetbackground{
+ aload pop
+ ColorSpaceFamily/Separation eq
+ {sep}
+ {
+ ColorSpaceFamily/DeviceN eq
+ {devn}{setcolor}ifelse
+ }ifelse
+ }bdf
+ /RadialShade
+ {
+ 40 dict begin
+ /ColorSpaceFamily xdf
+ /background xdf
+ /ext1 xdf
+ /ext0 xdf
+ /BBox xdf
+ /r2 xdf
+ /c2y xdf
+ /c2x xdf
+ /r1 xdf
+ /c1y xdf
+ /c1x xdf
+ /rampdict xdf
+ /setinkoverprint where{pop/setinkoverprint{pop}def}if
+ gsave
+ BBox length 0 gt
+ {
+ np
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ np
+ }if
+ c1x c2x eq
+ {
+ c1y c2y lt{/theta 90 def}{/theta 270 def}ifelse
+ }{
+ /slope c2y c1y sub c2x c1x sub div def
+ /theta slope 1 atan def
+ c2x c1x lt c2y c1y ge and{/theta theta 180 sub def}if
+ c2x c1x lt c2y c1y lt and{/theta theta 180 add def}if
+ }ifelse
+ gsave
+ clippath
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ {pathbbox}stopped
+ {0 0 0 0}if
+ /yMax xdf
+ /xMax xdf
+ /yMin xdf
+ /xMin xdf
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }{
+ /max{2 copy gt{pop}{exch pop}ifelse}bdf
+ /min{2 copy lt{pop}{exch pop}ifelse}bdf
+ rampdict begin
+ 40 dict begin
+ background length 0 gt{background sssetbackground gsave clippath fill grestore}if
+ gsave
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
+ /c1y 0 def
+ /c1x 0 def
+ /c2x 0 def
+ ext0
+ {
+ 0 getrampcolor
+ c2y r2 add r1 sub 0.0001 lt
+ {
+ c1x c1y r1 360 0 arcn
+ pathbbox
+ /aymax exch def
+ /axmax exch def
+ /aymin exch def
+ /axmin exch def
+ /bxMin xMin axmin min def
+ /byMin yMin aymin min def
+ /bxMax xMax axmax max def
+ /byMax yMax aymax max def
+ bxMin byMin moveto
+ bxMax byMin lineto
+ bxMax byMax lineto
+ bxMin byMax lineto
+ bxMin byMin lineto
+ eofill
+ }{
+ c2y r1 add r2 le
+ {
+ c1x c1y r1 0 360 arc
+ fill
+ }
+ {
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r1 neg def
+ /p1y c1y def
+ /p2x r1 def
+ /p2y c1y def
+ p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
+ fill
+ }{
+ /AA r2 r1 sub c2y div def
+ AA -1 eq
+ {/theta 89.99 def}
+ {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
+ ifelse
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y p1x SS1 div neg def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y p2x SS2 div neg def
+ r1 r2 gt
+ {
+ /L1maxX p1x yMin p1y sub SS1 div add def
+ /L2maxX p2x yMin p2y sub SS2 div add def
+ }{
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+ c1x c2x sub dup mul
+ c1y c2y sub dup mul
+ add 0.5 exp
+ 0 dtransform
+ dup mul exch dup mul add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt{exch}if pop
+ /hires xdf
+ hires mul
+ /numpix xdf
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ }if
+ }if
+ /xInc c2x c1x sub numsteps div def
+ /yInc c2y c1y sub numsteps div def
+ /rInc r2 r1 sub numsteps div def
+ /cx c1x def
+ /cy c1y def
+ /radius r1 def
+ np
+ xInc 0 eq yInc 0 eq rInc 0 eq and and
+ {
+ 0 getrampcolor
+ cx cy radius 0 360 arc
+ stroke
+ NumSamples 1 sub getrampcolor
+ cx cy radius 72 hires div add 0 360 arc
+ 0 setlinewidth
+ stroke
+ }{
+ 0
+ numsteps
+ {
+ dup
+ subsampling{round cvi}if
+ getrampcolor
+ cx cy radius 0 360 arc
+ /cx cx xInc add def
+ /cy cy yInc add def
+ /radius radius rInc add def
+ cx cy radius 360 0 arcn
+ eofill
+ rampIndxInc add
+ }repeat
+ pop
+ }ifelse
+ ext1
+ {
+ c2y r2 add r1 lt
+ {
+ c2x c2y r2 0 360 arc
+ fill
+ }{
+ c2y r1 add r2 sub 0.0001 le
+ {
+ c2x c2y r2 360 0 arcn
+ pathbbox
+ /aymax exch def
+ /axmax exch def
+ /aymin exch def
+ /axmin exch def
+ /bxMin xMin axmin min def
+ /byMin yMin aymin min def
+ /bxMax xMax axmax max def
+ /byMax yMax aymax max def
+ bxMin byMin moveto
+ bxMax byMin lineto
+ bxMax byMax lineto
+ bxMin byMax lineto
+ bxMin byMin lineto
+ eofill
+ }{
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r2 neg def
+ /p1y c2y def
+ /p2x r2 def
+ /p2y c2y def
+ p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
+ fill
+ }{
+ /AA r2 r1 sub c2y div def
+ AA -1 eq
+ {/theta 89.99 def}
+ {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
+ ifelse
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y c2y p1x SS1 div sub def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y c2y p2x SS2 div sub def
+ r1 r2 lt
+ {
+ /L1maxX p1x yMax p1y sub SS1 div add def
+ /L2maxX p2x yMax p2y sub SS2 div add def
+ }{
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+ grestore
+ grestore
+ end
+ end
+ end
+ }ifelse
+ }bdf
+ /GenStrips
+ {
+ 40 dict begin
+ /ColorSpaceFamily xdf
+ /background xdf
+ /ext1 xdf
+ /ext0 xdf
+ /BBox xdf
+ /y2 xdf
+ /x2 xdf
+ /y1 xdf
+ /x1 xdf
+ /rampdict xdf
+ /setinkoverprint where{pop/setinkoverprint{pop}def}if
+ gsave
+ BBox length 0 gt
+ {
+ np
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ np
+ }if
+ x1 x2 eq
+ {
+ y1 y2 lt{/theta 90 def}{/theta 270 def}ifelse
+ }{
+ /slope y2 y1 sub x2 x1 sub div def
+ /theta slope 1 atan def
+ x2 x1 lt y2 y1 ge and{/theta theta 180 sub def}if
+ x2 x1 lt y2 y1 lt and{/theta theta 180 add def}if
+ }
+ ifelse
+ gsave
+ clippath
+ x1 y1 translate
+ theta rotate
+ {pathbbox}stopped
+ {0 0 0 0}if
+ /yMax exch def
+ /xMax exch def
+ /yMin exch def
+ /xMin exch def
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }{
+ rampdict begin
+ 20 dict begin
+ background length 0 gt{background sssetbackground gsave clippath fill grestore}if
+ gsave
+ x1 y1 translate
+ theta rotate
+ /xStart 0 def
+ /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
+ /ySpan yMax yMin sub def
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ xStart 0 transform
+ xEnd 0 transform
+ 3 -1 roll
+ sub dup mul
+ 3 1 roll
+ sub dup mul
+ add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt{exch}if pop
+ mul
+ /numpix xdf
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ }if
+ }if
+ ext0
+ {
+ 0 getrampcolor
+ xMin xStart lt
+ {
+ xMin yMin xMin neg ySpan rectfill
+ }if
+ }if
+ /xInc xEnd xStart sub numsteps div def
+ /x xStart def
+ 0
+ numsteps
+ {
+ dup
+ subsampling{round cvi}if
+ getrampcolor
+ x yMin xInc ySpan rectfill
+ /x x xInc add def
+ rampIndxInc add
+ }repeat
+ pop
+ ext1{
+ xMax xEnd gt
+ {
+ xEnd yMin xMax xEnd sub ySpan rectfill
+ }if
+ }if
+ grestore
+ grestore
+ end
+ end
+ end
+ }ifelse
+ }bdf
+}def
+/pt
+{
+ end
+}def
+/dt{
+}def
+/pgsv{
+ //Adobe_AGM_Core/AGMCORE_save save put
+}def
+/pgrs{
+ //Adobe_AGM_Core/AGMCORE_save get restore
+}def
+systemdict/findcolorrendering known{
+ /findcolorrendering systemdict/findcolorrendering get def
+}if
+systemdict/setcolorrendering known{
+ /setcolorrendering systemdict/setcolorrendering get def
+}if
+/test_cmyk_color_plate
+{
+ gsave
+ setcmykcolor currentgray 1 ne
+ grestore
+}def
+/inRip_spot_has_ink
+{
+ dup//Adobe_AGM_Core/AGMCORE_name xddf
+ convert_spot_to_process not
+}def
+/map255_to_range
+{
+ 1 index sub
+ 3 -1 roll 255 div mul add
+}def
+/set_csa_crd
+{
+ /sep_colorspace_dict null AGMCORE_gput
+ begin
+ CSA get_csa_by_name setcolorspace_opt
+ set_crd
+ end
+}
+def
+/map_csa
+{
+ currentdict/MappedCSA known{MappedCSA null ne}{false}ifelse
+ {pop}{get_csa_by_name/MappedCSA xdf}ifelse
+}def
+/setsepcolor
+{
+ /sep_colorspace_dict AGMCORE_gget begin
+ dup/sep_tint exch AGMCORE_gput
+ TintProc
+ end
+}def
+/setdevicencolor
+{
+ /devicen_colorspace_dict AGMCORE_gget begin
+ Names length copy
+ Names length 1 sub -1 0
+ {
+ /devicen_tints AGMCORE_gget 3 1 roll xpt
+ }for
+ TintProc
+ end
+}def
+/sep_colorspace_proc
+{
+ /AGMCORE_tmp exch store
+ /sep_colorspace_dict AGMCORE_gget begin
+ currentdict/Components known{
+ Components aload pop
+ TintMethod/Lab eq{
+ 2{AGMCORE_tmp mul NComponents 1 roll}repeat
+ LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll
+ }{
+ TintMethod/Subtractive eq{
+ NComponents{
+ AGMCORE_tmp mul NComponents 1 roll
+ }repeat
+ }{
+ NComponents{
+ 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll
+ }repeat
+ }ifelse
+ }ifelse
+ }{
+ ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
+ aload pop
+ }ifelse
+ end
+}def
+/sep_colorspace_gray_proc
+{
+ /AGMCORE_tmp exch store
+ /sep_colorspace_dict AGMCORE_gget begin
+ GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
+ end
+}def
+/sep_proc_name
+{
+ dup 0 get
+ dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{
+ pop[/DeviceGray]
+ /sep_colorspace_gray_proc
+ }{
+ /sep_colorspace_proc
+ }ifelse
+}def
+/setsepcolorspace
+{
+ current_spot_alias{
+ dup begin
+ Name map_alias{
+ exch pop
+ }if
+ end
+ }if
+ dup/sep_colorspace_dict exch AGMCORE_gput
+ begin
+ CSA map_csa
+ /AGMCORE_sep_special Name dup()eq exch(All)eq or store
+ AGMCORE_avoid_L2_sep_space{
+ [/Indexed MappedCSA sep_proc_name 255 exch
+ {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx
+ ]setcolorspace_opt
+ /TintProc{
+ 255 mul round cvi setcolor
+ }bdf
+ }{
+ MappedCSA 0 get/DeviceCMYK eq
+ currentdict/Components known and
+ AGMCORE_sep_special not and{
+ /TintProc[
+ Components aload pop Name findcmykcustomcolor
+ /exch cvx/setcustomcolor cvx
+ ]cvx bdf
+ }{
+ AGMCORE_host_sep Name(All)eq and{
+ /TintProc{
+ 1 exch sub setseparationgray
+ }bdf
+ }{
+ AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and
+ AGMCORE_host_sep or
+ Name()eq and{
+ /TintProc[
+ MappedCSA sep_proc_name exch 0 get/DeviceCMYK eq{
+ cvx/setcmykcolor cvx
+ }{
+ cvx/setgray cvx
+ }ifelse
+ ]cvx bdf
+ }{
+ AGMCORE_producing_seps MappedCSA 0 get dup/DeviceCMYK eq exch/DeviceGray eq or and AGMCORE_sep_special not and{
+ /TintProc[
+ /dup cvx
+ MappedCSA sep_proc_name cvx exch
+ 0 get/DeviceGray eq{
+ 1/exch cvx/sub cvx 0 0 0 4 -1/roll cvx
+ }if
+ /Name cvx/findcmykcustomcolor cvx/exch cvx
+ AGMCORE_host_sep{
+ AGMCORE_is_cmyk_sep
+ /Name cvx
+ /AGMCORE_IsSeparationAProcessColor load/exec cvx
+ /not cvx/and cvx
+ }{
+ Name inRip_spot_has_ink not
+ }ifelse
+ [
+ /pop cvx 1
+ ]cvx/if cvx
+ /setcustomcolor cvx
+ ]cvx bdf
+ }{
+ /TintProc{setcolor}bdf
+ [/Separation Name MappedCSA sep_proc_name load]setcolorspace_opt
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ set_crd
+ setsepcolor
+ end
+}def
+/additive_blend
+{
+ 3 dict begin
+ /numarrays xdf
+ /numcolors xdf
+ 0 1 numcolors 1 sub
+ {
+ /c1 xdf
+ 1
+ 0 1 numarrays 1 sub
+ {
+ 1 exch add/index cvx
+ c1/get cvx/mul cvx
+ }for
+ numarrays 1 add 1/roll cvx
+ }for
+ numarrays[/pop cvx]cvx/repeat cvx
+ end
+}def
+/subtractive_blend
+{
+ 3 dict begin
+ /numarrays xdf
+ /numcolors xdf
+ 0 1 numcolors 1 sub
+ {
+ /c1 xdf
+ 1 1
+ 0 1 numarrays 1 sub
+ {
+ 1 3 3 -1 roll add/index cvx
+ c1/get cvx/sub cvx/mul cvx
+ }for
+ /sub cvx
+ numarrays 1 add 1/roll cvx
+ }for
+ numarrays[/pop cvx]cvx/repeat cvx
+ end
+}def
+/exec_tint_transform
+{
+ /TintProc[
+ /TintTransform cvx/setcolor cvx
+ ]cvx bdf
+ MappedCSA setcolorspace_opt
+}bdf
+/devn_makecustomcolor
+{
+ 2 dict begin
+ /names_index xdf
+ /Names xdf
+ 1 1 1 1 Names names_index get findcmykcustomcolor
+ /devicen_tints AGMCORE_gget names_index get setcustomcolor
+ Names length{pop}repeat
+ end
+}bdf
+/setdevicencolorspace
+{
+ dup/AliasedColorants known{false}{true}ifelse
+ current_spot_alias and{
+ 7 dict begin
+ /names_index 0 def
+ dup/names_len exch/Names get length def
+ /new_names names_len array def
+ /new_LookupTables names_len array def
+ /alias_cnt 0 def
+ dup/Names get
+ {
+ dup map_alias{
+ exch pop
+ dup/ColorLookup known{
+ dup begin
+ new_LookupTables names_index ColorLookup put
+ end
+ }{
+ dup/Components known{
+ dup begin
+ new_LookupTables names_index Components put
+ end
+ }{
+ dup begin
+ new_LookupTables names_index[null null null null]put
+ end
+ }ifelse
+ }ifelse
+ new_names names_index 3 -1 roll/Name get put
+ /alias_cnt alias_cnt 1 add def
+ }{
+ /name xdf
+ new_names names_index name put
+ dup/LookupTables known{
+ dup begin
+ new_LookupTables names_index LookupTables names_index get put
+ end
+ }{
+ dup begin
+ new_LookupTables names_index[null null null null]put
+ end
+ }ifelse
+ }ifelse
+ /names_index names_index 1 add def
+ }forall
+ alias_cnt 0 gt{
+ /AliasedColorants true def
+ /lut_entry_len new_LookupTables 0 get dup length 256 ge{0 get length}{length}ifelse def
+ 0 1 names_len 1 sub{
+ /names_index xdf
+ new_LookupTables names_index get dup length 256 ge{0 get length}{length}ifelse lut_entry_len ne{
+ /AliasedColorants false def
+ exit
+ }{
+ new_LookupTables names_index get 0 get null eq{
+ dup/Names get names_index get/name xdf
+ name(Cyan)eq name(Magenta)eq name(Yellow)eq name(Black)eq
+ or or or not{
+ /AliasedColorants false def
+ exit
+ }if
+ }if
+ }ifelse
+ }for
+ lut_entry_len 1 eq{
+ /AliasedColorants false def
+ }if
+ AliasedColorants{
+ dup begin
+ /Names new_names def
+ /LookupTables new_LookupTables def
+ /AliasedColorants true def
+ /NComponents lut_entry_len def
+ /TintMethod NComponents 4 eq{/Subtractive}{/Additive}ifelse def
+ /MappedCSA TintMethod/Additive eq{/DeviceRGB}{/DeviceCMYK}ifelse def
+ currentdict/TTTablesIdx known not{
+ /TTTablesIdx -1 def
+ }if
+ end
+ }if
+ }if
+ end
+ }if
+ dup/devicen_colorspace_dict exch AGMCORE_gput
+ begin
+ currentdict/AliasedColorants known{
+ AliasedColorants
+ }{
+ false
+ }ifelse
+ dup not{
+ CSA map_csa
+ }if
+ /TintTransform load type/nulltype eq or{
+ /TintTransform[
+ 0 1 Names length 1 sub
+ {
+ /TTTablesIdx TTTablesIdx 1 add def
+ dup LookupTables exch get dup 0 get null eq
+ {
+ 1 index
+ Names exch get
+ dup(Cyan)eq
+ {
+ pop exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 0
+ }
+ {
+ dup(Magenta)eq
+ {
+ pop exch
+ LookupTables length exch sub
+ /index cvx
+ 0/exch cvx 0 0
+ }{
+ (Yellow)eq
+ {
+ exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 3 -1/roll cvx 0
+ }{
+ exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 0 4 -1/roll cvx
+ }ifelse
+ }ifelse
+ }ifelse
+ 5 -1/roll cvx/astore cvx
+ }{
+ dup length 1 sub
+ LookupTables length 4 -1 roll sub 1 add
+ /index cvx/mul cvx/round cvx/cvi cvx/get cvx
+ }ifelse
+ Names length TTTablesIdx add 1 add 1/roll cvx
+ }for
+ Names length[/pop cvx]cvx/repeat cvx
+ NComponents Names length
+ TintMethod/Subtractive eq
+ {
+ subtractive_blend
+ }{
+ additive_blend
+ }ifelse
+ ]cvx bdf
+ }if
+ AGMCORE_host_sep{
+ Names convert_to_process{
+ exec_tint_transform
+ }
+ {
+ currentdict/AliasedColorants known{
+ AliasedColorants not
+ }{
+ false
+ }ifelse
+ 5 dict begin
+ /AvoidAliasedColorants xdf
+ /painted? false def
+ /names_index 0 def
+ /names_len Names length def
+ AvoidAliasedColorants{
+ /currentspotalias current_spot_alias def
+ false set_spot_alias
+ }if
+ Names{
+ AGMCORE_is_cmyk_sep{
+ dup(Cyan)eq AGMCORE_cyan_plate and exch
+ dup(Magenta)eq AGMCORE_magenta_plate and exch
+ dup(Yellow)eq AGMCORE_yellow_plate and exch
+ (Black)eq AGMCORE_black_plate and or or or{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ Names names_index/devn_makecustomcolor cvx
+ ]cvx ddf
+ /painted? true def
+ }if
+ painted?{exit}if
+ }{
+ 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ Names names_index/devn_makecustomcolor cvx
+ ]cvx ddf
+ /painted? true def
+ exit
+ }if
+ }ifelse
+ /names_index names_index 1 add def
+ }forall
+ AvoidAliasedColorants{
+ currentspotalias set_spot_alias
+ }if
+ painted?{
+ /devicen_colorspace_dict AGMCORE_gget/names_index names_index put
+ }{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ names_len[/pop cvx]cvx/repeat cvx 1/setseparationgray cvx
+ 0 0 0 0/setcmykcolor cvx
+ ]cvx ddf
+ }ifelse
+ end
+ }ifelse
+ }
+ {
+ AGMCORE_in_rip_sep{
+ Names convert_to_process not
+ }{
+ level3
+ }ifelse
+ {
+ [/DeviceN Names MappedCSA/TintTransform load]setcolorspace_opt
+ /TintProc level3 not AGMCORE_in_rip_sep and{
+ [
+ Names/length cvx[/pop cvx]cvx/repeat cvx
+ ]cvx bdf
+ }{
+ {setcolor}bdf
+ }ifelse
+ }{
+ exec_tint_transform
+ }ifelse
+ }ifelse
+ set_crd
+ /AliasedColorants false def
+ end
+}def
+/setindexedcolorspace
+{
+ dup/indexed_colorspace_dict exch AGMCORE_gput
+ begin
+ currentdict/CSDBase known{
+ CSDBase/CSD get_res begin
+ currentdict/Names known{
+ currentdict devncs
+ }{
+ 1 currentdict sepcs
+ }ifelse
+ AGMCORE_host_sep{
+ 4 dict begin
+ /compCnt/Names where{pop Names length}{1}ifelse def
+ /NewLookup HiVal 1 add string def
+ 0 1 HiVal{
+ /tableIndex xdf
+ Lookup dup type/stringtype eq{
+ compCnt tableIndex map_index
+ }{
+ exec
+ }ifelse
+ /Names where{
+ pop setdevicencolor
+ }{
+ setsepcolor
+ }ifelse
+ currentgray
+ tableIndex exch
+ 255 mul cvi
+ NewLookup 3 1 roll put
+ }for
+ [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt
+ end
+ }{
+ level3
+ {
+ currentdict/Names known{
+ [/Indexed[/DeviceN Names MappedCSA/TintTransform load]HiVal Lookup]setcolorspace_opt
+ }{
+ [/Indexed[/Separation Name MappedCSA sep_proc_name load]HiVal Lookup]setcolorspace_opt
+ }ifelse
+ }{
+ [/Indexed MappedCSA HiVal
+ [
+ currentdict/Names known{
+ Lookup dup type/stringtype eq
+ {/exch cvx CSDBase/CSD get_res/Names get length dup/mul cvx exch/getinterval cvx{255 div}/forall cvx}
+ {/exec cvx}ifelse
+ /TintTransform load/exec cvx
+ }{
+ Lookup dup type/stringtype eq
+ {/exch cvx/get cvx 255/div cvx}
+ {/exec cvx}ifelse
+ CSDBase/CSD get_res/MappedCSA get sep_proc_name exch pop/load cvx/exec cvx
+ }ifelse
+ ]cvx
+ ]setcolorspace_opt
+ }ifelse
+ }ifelse
+ end
+ set_crd
+ }
+ {
+ CSA map_csa
+ AGMCORE_host_sep level2 not and{
+ 0 0 0 0 setcmykcolor
+ }{
+ [/Indexed MappedCSA
+ level2 not has_color not and{
+ dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{
+ pop[/DeviceGray]
+ }if
+ HiVal GrayLookup
+ }{
+ HiVal
+ currentdict/RangeArray known{
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ Lookup exch
+ dup HiVal gt{
+ pop HiVal
+ }if
+ NComponents mul NComponents getinterval{}forall
+ NComponents 1 sub -1 0{
+ RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
+ NComponents 1 roll
+ }for
+ end
+ }bind
+ }{
+ Lookup
+ }ifelse
+ }ifelse
+ ]setcolorspace_opt
+ set_crd
+ }ifelse
+ }ifelse
+ end
+}def
+/setindexedcolor
+{
+ AGMCORE_host_sep{
+ /indexed_colorspace_dict AGMCORE_gget
+ begin
+ currentdict/CSDBase known{
+ CSDBase/CSD get_res begin
+ currentdict/Names known{
+ map_indexed_devn
+ devn
+ }
+ {
+ Lookup 1 3 -1 roll map_index
+ sep
+ }ifelse
+ end
+ }{
+ Lookup MappedCSA/DeviceCMYK eq{4}{1}ifelse 3 -1 roll
+ map_index
+ MappedCSA/DeviceCMYK eq{setcmykcolor}{setgray}ifelse
+ }ifelse
+ end
+ }{
+ level3 not AGMCORE_in_rip_sep and/indexed_colorspace_dict AGMCORE_gget/CSDBase known and{
+ /indexed_colorspace_dict AGMCORE_gget/CSDBase get/CSD get_res begin
+ map_indexed_devn
+ devn
+ end
+ }
+ {
+ setcolor
+ }ifelse
+ }ifelse
+}def
+/ignoreimagedata
+{
+ currentoverprint not{
+ gsave
+ dup clonedict begin
+ 1 setgray
+ /Decode[0 1]def
+ /DataSource<FF>def
+ /MultipleDataSources false def
+ /BitsPerComponent 8 def
+ currentdict end
+ systemdict/image gx
+ grestore
+ }if
+ consumeimagedata
+}def
+/add_res
+{
+ dup/CSD eq{
+ pop
+ //Adobe_AGM_Core begin
+ /AGMCORE_CSD_cache load 3 1 roll put
+ end
+ }{
+ defineresource pop
+ }ifelse
+}def
+/del_res
+{
+ {
+ aload pop exch
+ dup/CSD eq{
+ pop
+ {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall
+ }{
+ exch
+ {1 index undefineresource}forall
+ pop
+ }ifelse
+ }forall
+}def
+/get_res
+{
+ dup/CSD eq{
+ pop
+ dup type dup/nametype eq exch/stringtype eq or{
+ AGMCORE_CSD_cache exch get
+ }if
+ }{
+ findresource
+ }ifelse
+}def
+/get_csa_by_name
+{
+ dup type dup/nametype eq exch/stringtype eq or{
+ /CSA get_res
+ }if
+}def
+/paintproc_buf_init
+{
+ /count get 0 0 put
+}def
+/paintproc_buf_next
+{
+ dup/count get dup 0 get
+ dup 3 1 roll
+ 1 add 0 xpt
+ get
+}def
+/cachepaintproc_compress
+{
+ 5 dict begin
+ currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
+ /ppdict 20 dict def
+ /string_size 16000 def
+ /readbuffer string_size string def
+ currentglobal true setglobal
+ ppdict 1 array dup 0 1 put/count xpt
+ setglobal
+ /LZWFilter
+ {
+ exch
+ dup length 0 eq{
+ pop
+ }{
+ ppdict dup length 1 sub 3 -1 roll put
+ }ifelse
+ {string_size}{0}ifelse string
+ }/LZWEncode filter def
+ {
+ ReadFilter readbuffer readstring
+ exch LZWFilter exch writestring
+ not{exit}if
+ }loop
+ LZWFilter closefile
+ ppdict
+ end
+}def
+/cachepaintproc
+{
+ 2 dict begin
+ currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
+ /ppdict 20 dict def
+ currentglobal true setglobal
+ ppdict 1 array dup 0 1 put/count xpt
+ setglobal
+ {
+ ReadFilter 16000 string readstring exch
+ ppdict dup length 1 sub 3 -1 roll put
+ not{exit}if
+ }loop
+ ppdict dup dup length 1 sub()put
+ end
+}def
+/make_pattern
+{
+ exch clonedict exch
+ dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
+ exch 3 index/XStep get 1 index exch 2 copy div cvi mul sub sub
+ exch 3 index/YStep get 1 index exch 2 copy div cvi mul sub sub
+ matrix translate exch matrix concatmatrix
+ 1 index begin
+ BBox 0 get XStep div cvi XStep mul/xshift exch neg def
+ BBox 1 get YStep div cvi YStep mul/yshift exch neg def
+ BBox 0 get xshift add
+ BBox 1 get yshift add
+ BBox 2 get xshift add
+ BBox 3 get yshift add
+ 4 array astore
+ /BBox exch def
+ [xshift yshift/translate load null/exec load]dup
+ 3/PaintProc load put cvx/PaintProc exch def
+ end
+ gsave 0 setgray
+ makepattern
+ grestore
+}def
+/set_pattern
+{
+ dup/PatternType get 1 eq{
+ dup/PaintType get 1 eq{
+ currentoverprint sop[/DeviceGray]setcolorspace 0 setgray
+ }if
+ }if
+ setpattern
+}def
+/setcolorspace_opt
+{
+ dup currentcolorspace eq{pop}{setcolorspace}ifelse
+}def
+/updatecolorrendering
+{
+ currentcolorrendering/RenderingIntent known{
+ currentcolorrendering/RenderingIntent get
+ }
+ {
+ Intent/AbsoluteColorimetric eq
+ {
+ /absolute_colorimetric_crd AGMCORE_gget dup null eq
+ }
+ {
+ Intent/RelativeColorimetric eq
+ {
+ /relative_colorimetric_crd AGMCORE_gget dup null eq
+ }
+ {
+ Intent/Saturation eq
+ {
+ /saturation_crd AGMCORE_gget dup null eq
+ }
+ {
+ /perceptual_crd AGMCORE_gget dup null eq
+ }ifelse
+ }ifelse
+ }ifelse
+ {
+ pop null
+ }
+ {
+ /RenderingIntent known{null}{Intent}ifelse
+ }ifelse
+ }ifelse
+ Intent ne{
+ Intent/ColorRendering{findresource}stopped
+ {
+ pop pop systemdict/findcolorrendering known
+ {
+ Intent findcolorrendering
+ {
+ /ColorRendering findresource true exch
+ }
+ {
+ /ColorRendering findresource
+ product(Xerox Phaser 5400)ne
+ exch
+ }ifelse
+ dup Intent/AbsoluteColorimetric eq
+ {
+ /absolute_colorimetric_crd exch AGMCORE_gput
+ }
+ {
+ Intent/RelativeColorimetric eq
+ {
+ /relative_colorimetric_crd exch AGMCORE_gput
+ }
+ {
+ Intent/Saturation eq
+ {
+ /saturation_crd exch AGMCORE_gput
+ }
+ {
+ Intent/Perceptual eq
+ {
+ /perceptual_crd exch AGMCORE_gput
+ }
+ {
+ pop
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ 1 index{exch}{pop}ifelse
+ }
+ {false}ifelse
+ }
+ {true}ifelse
+ {
+ dup begin
+ currentdict/TransformPQR known{
+ currentdict/TransformPQR get aload pop
+ 3{{}eq 3 1 roll}repeat or or
+ }
+ {true}ifelse
+ currentdict/MatrixPQR known{
+ currentdict/MatrixPQR get aload pop
+ 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll
+ 0.0 eq 9 1 roll 1.0 eq 9 1 roll 0.0 eq 9 1 roll
+ 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq
+ and and and and and and and and
+ }
+ {true}ifelse
+ end
+ or
+ {
+ clonedict begin
+ /TransformPQR[
+ {4 -1 roll 3 get dup 3 1 roll sub 5 -1 roll 3 get 3 -1 roll sub div
+ 3 -1 roll 3 get 3 -1 roll 3 get dup 4 1 roll sub mul add}bind
+ {4 -1 roll 4 get dup 3 1 roll sub 5 -1 roll 4 get 3 -1 roll sub div
+ 3 -1 roll 4 get 3 -1 roll 4 get dup 4 1 roll sub mul add}bind
+ {4 -1 roll 5 get dup 3 1 roll sub 5 -1 roll 5 get 3 -1 roll sub div
+ 3 -1 roll 5 get 3 -1 roll 5 get dup 4 1 roll sub mul add}bind
+ ]def
+ /MatrixPQR[0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296]def
+ /RangePQR[-0.3227950745 2.3229645538 -1.5003771057 3.5003465881 -0.1369979095 2.136967392]def
+ currentdict end
+ }if
+ setcolorrendering_opt
+ }if
+ }if
+}def
+/set_crd
+{
+ AGMCORE_host_sep not level2 and{
+ currentdict/ColorRendering known{
+ ColorRendering/ColorRendering{findresource}stopped not{setcolorrendering_opt}if
+ }{
+ currentdict/Intent known{
+ updatecolorrendering
+ }if
+ }ifelse
+ currentcolorspace dup type/arraytype eq
+ {0 get}if
+ /DeviceRGB eq
+ {
+ currentdict/UCR known
+ {/UCR}{/AGMCORE_currentucr}ifelse
+ load setundercolorremoval
+ currentdict/BG known
+ {/BG}{/AGMCORE_currentbg}ifelse
+ load setblackgeneration
+ }if
+ }if
+}def
+/set_ucrbg
+{
+ dup null eq{pop/AGMCORE_currentbg load}{/Procedure get_res}ifelse setblackgeneration
+ dup null eq{pop/AGMCORE_currentucr load}{/Procedure get_res}ifelse setundercolorremoval
+}def
+/setcolorrendering_opt
+{
+ dup currentcolorrendering eq{
+ pop
+ }{
+ product(HP Color LaserJet 2605)anchorsearch{
+ pop pop pop
+ }{
+ pop
+ clonedict
+ begin
+ /Intent Intent def
+ currentdict
+ end
+ setcolorrendering
+ }ifelse
+ }ifelse
+}def
+/cpaint_gcomp
+{
+ convert_to_process//Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
+ //Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
+ {
+ (%end_cpaint_gcomp)flushinput
+ }if
+}def
+/cpaint_gsep
+{
+ //Adobe_AGM_Core/AGMCORE_ConvertToProcess get
+ {
+ (%end_cpaint_gsep)flushinput
+ }if
+}def
+/cpaint_gend
+{np}def
+/T1_path
+{
+ currentfile token pop currentfile token pop mo
+ {
+ currentfile token pop dup type/stringtype eq
+ {pop exit}if
+ 0 exch rlineto
+ currentfile token pop dup type/stringtype eq
+ {pop exit}if
+ 0 rlineto
+ }loop
+}def
+/T1_gsave
+ level3
+ {/clipsave}
+ {/gsave}ifelse
+ load def
+/T1_grestore
+ level3
+ {/cliprestore}
+ {/grestore}ifelse
+ load def
+/set_spot_alias_ary
+{
+ dup inherit_aliases
+ //Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
+}def
+/set_spot_normalization_ary
+{
+ dup inherit_aliases
+ dup length
+ /AGMCORE_SpotAliasAry where{pop AGMCORE_SpotAliasAry length add}if
+ array
+ //Adobe_AGM_Core/AGMCORE_SpotAliasAry2 xddf
+ /AGMCORE_SpotAliasAry where{
+ pop
+ AGMCORE_SpotAliasAry2 0 AGMCORE_SpotAliasAry putinterval
+ AGMCORE_SpotAliasAry length
+ }{0}ifelse
+ AGMCORE_SpotAliasAry2 3 1 roll exch putinterval
+ true set_spot_alias
+}def
+/inherit_aliases
+{
+ {dup/Name get map_alias{/CSD put}{pop}ifelse}forall
+}def
+/set_spot_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ /AGMCORE_current_spot_alias 3 -1 roll put
+ }{
+ pop
+ }ifelse
+}def
+/current_spot_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ /AGMCORE_current_spot_alias get
+ }{
+ false
+ }ifelse
+}def
+/map_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ begin
+ /AGMCORE_name xdf
+ false
+ AGMCORE_SpotAliasAry2{
+ dup/Name get AGMCORE_name eq{
+ /CSD get/CSD get_res
+ exch pop true
+ exit
+ }{
+ pop
+ }ifelse
+ }forall
+ end
+ }{
+ pop false
+ }ifelse
+}bdf
+/spot_alias
+{
+ true set_spot_alias
+ /AGMCORE_&setcustomcolor AGMCORE_key_known not{
+ //Adobe_AGM_Core/AGMCORE_&setcustomcolor/setcustomcolor load put
+ }if
+ /customcolor_tint 1 AGMCORE_gput
+ //Adobe_AGM_Core begin
+ /setcustomcolor
+ {
+ //Adobe_AGM_Core begin
+ dup/customcolor_tint exch AGMCORE_gput
+ 1 index aload pop pop 1 eq exch 1 eq and exch 1 eq and exch 1 eq and not
+ current_spot_alias and{1 index 4 get map_alias}{false}ifelse
+ {
+ false set_spot_alias
+ /sep_colorspace_dict AGMCORE_gget null ne
+ 3 1 roll 2 index{
+ exch pop/sep_tint AGMCORE_gget exch
+ }if
+ mark 3 1 roll
+ setsepcolorspace
+ counttomark 0 ne{
+ setsepcolor
+ }if
+ pop
+ not{/sep_tint 1.0 AGMCORE_gput}if
+ pop
+ true set_spot_alias
+ }{
+ AGMCORE_&setcustomcolor
+ }ifelse
+ end
+ }bdf
+ end
+}def
+/begin_feature
+{
+ Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
+ count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
+ {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
+}def
+/end_feature
+{
+ 2 dict begin
+ /spd/setpagedevice load def
+ /setpagedevice{get_gstate spd set_gstate}def
+ stopped{$error/newerror false put}if
+ end
+ count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
+ countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
+ {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
+}def
+/set_negative
+{
+ //Adobe_AGM_Core begin
+ /AGMCORE_inverting exch def
+ level2{
+ currentpagedevice/NegativePrint known AGMCORE_distilling not and{
+ currentpagedevice/NegativePrint get//Adobe_AGM_Core/AGMCORE_inverting get ne{
+ true begin_feature true{
+ <</NegativePrint//Adobe_AGM_Core/AGMCORE_inverting get>>setpagedevice
+ }end_feature
+ }if
+ /AGMCORE_inverting false def
+ }if
+ }if
+ AGMCORE_inverting{
+ [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
+ AGMCORE_distilling{
+ erasepage
+ }{
+ gsave np clippath 1/setseparationgray where{pop setseparationgray}{setgray}ifelse
+ /AGMIRS_&fill where{pop AGMIRS_&fill}{fill}ifelse grestore
+ }ifelse
+ }if
+ end
+}def
+/lw_save_restore_override{
+ /md where{
+ pop
+ md begin
+ initializepage
+ /initializepage{}def
+ /pmSVsetup{}def
+ /endp{}def
+ /pse{}def
+ /psb{}def
+ /orig_showpage where
+ {pop}
+ {/orig_showpage/showpage load def}
+ ifelse
+ /showpage{orig_showpage gR}def
+ end
+ }if
+}def
+/pscript_showpage_override{
+ /NTPSOct95 where
+ {
+ begin
+ showpage
+ save
+ /showpage/restore load def
+ /restore{exch pop}def
+ end
+ }if
+}def
+/driver_media_override
+{
+ /md where{
+ pop
+ md/initializepage known{
+ md/initializepage{}put
+ }if
+ md/rC known{
+ md/rC{4{pop}repeat}put
+ }if
+ }if
+ /mysetup where{
+ /mysetup[1 0 0 1 0 0]put
+ }if
+ Adobe_AGM_Core/AGMCORE_Default_CTM matrix currentmatrix put
+ level2
+ {Adobe_AGM_Core/AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if
+}def
+/capture_mysetup
+{
+ /Pscript_Win_Data where{
+ pop
+ Pscript_Win_Data/mysetup known{
+ Adobe_AGM_Core/save_mysetup Pscript_Win_Data/mysetup get put
+ }if
+ }if
+}def
+/restore_mysetup
+{
+ /Pscript_Win_Data where{
+ pop
+ Pscript_Win_Data/mysetup known{
+ Adobe_AGM_Core/save_mysetup known{
+ Pscript_Win_Data/mysetup Adobe_AGM_Core/save_mysetup get put
+ Adobe_AGM_Core/save_mysetup undef
+ }if
+ }if
+ }if
+}def
+/driver_check_media_override
+{
+ /PrepsDict where
+ {pop}
+ {
+ Adobe_AGM_Core/AGMCORE_Default_CTM get matrix currentmatrix ne
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get type/arraytype eq
+ {
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and
+ }if
+ {
+ Adobe_AGM_Core/AGMCORE_Default_CTM get setmatrix
+ }if
+ }ifelse
+}def
+AGMCORE_err_strings begin
+ /AGMCORE_bad_environ(Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. )def
+ /AGMCORE_color_space_onhost_seps(This job contains colors that will not separate with on-host methods. )def
+ /AGMCORE_invalid_color_space(This job contains an invalid color space. )def
+end
+/set_def_ht
+{AGMCORE_def_ht sethalftone}def
+/set_def_flat
+{AGMCORE_Default_flatness setflat}def
+end
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+%%BeginResource: procset Adobe_CoolType_Core 2.31 0
+%%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved.
+%%Version: 2.31 0
+10 dict begin
+/Adobe_CoolType_Passthru currentdict def
+/Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def
+Adobe_CoolType_Core_Defined
+ {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def}
+if
+userdict/Adobe_CoolType_Core 70 dict dup begin put
+/Adobe_CoolType_Version 2.31 def
+/Level2?
+ systemdict/languagelevel known dup
+ {pop systemdict/languagelevel get 2 ge}
+ if def
+Level2? not
+ {
+ /currentglobal false def
+ /setglobal/pop load def
+ /gcheck{pop false}bind def
+ /currentpacking false def
+ /setpacking/pop load def
+ /SharedFontDirectory 0 dict def
+ }
+if
+currentpacking
+true setpacking
+currentglobal false setglobal
+userdict/Adobe_CoolType_Data 2 copy known not
+ {2 copy 10 dict put}
+if
+get
+ begin
+ /@opStackCountByLevel 32 dict def
+ /@opStackLevel 0 def
+ /@dictStackCountByLevel 32 dict def
+ /@dictStackLevel 0 def
+ end
+setglobal
+currentglobal true setglobal
+userdict/Adobe_CoolType_GVMFonts known not
+ {userdict/Adobe_CoolType_GVMFonts 10 dict put}
+if
+setglobal
+currentglobal false setglobal
+userdict/Adobe_CoolType_LVMFonts known not
+ {userdict/Adobe_CoolType_LVMFonts 10 dict put}
+if
+setglobal
+/ct_VMDictPut
+ {
+ dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse
+ 3 1 roll put
+ }bind def
+/ct_VMDictUndef
+ {
+ dup Adobe_CoolType_GVMFonts exch known
+ {Adobe_CoolType_GVMFonts exch undef}
+ {
+ dup Adobe_CoolType_LVMFonts exch known
+ {Adobe_CoolType_LVMFonts exch undef}
+ {pop}
+ ifelse
+ }ifelse
+ }bind def
+/ct_str1 1 string def
+/ct_xshow
+{
+ /_ct_na exch def
+ /_ct_i 0 def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ {
+ pop pop
+ ct_str1 exch 0 exch put
+ ct_str1 show
+ {_ct_na _ct_i get}stopped
+ {pop pop}
+ {
+ _ct_x _ct_y moveto
+ 0
+ rmoveto
+ }
+ ifelse
+ /_ct_i _ct_i 1 add def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ }
+ exch
+ @cshow
+}bind def
+/ct_yshow
+{
+ /_ct_na exch def
+ /_ct_i 0 def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ {
+ pop pop
+ ct_str1 exch 0 exch put
+ ct_str1 show
+ {_ct_na _ct_i get}stopped
+ {pop pop}
+ {
+ _ct_x _ct_y moveto
+ 0 exch
+ rmoveto
+ }
+ ifelse
+ /_ct_i _ct_i 1 add def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ }
+ exch
+ @cshow
+}bind def
+/ct_xyshow
+{
+ /_ct_na exch def
+ /_ct_i 0 def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ {
+ pop pop
+ ct_str1 exch 0 exch put
+ ct_str1 show
+ {_ct_na _ct_i get}stopped
+ {pop pop}
+ {
+ {_ct_na _ct_i 1 add get}stopped
+ {pop pop pop}
+ {
+ _ct_x _ct_y moveto
+ rmoveto
+ }
+ ifelse
+ }
+ ifelse
+ /_ct_i _ct_i 2 add def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ }
+ exch
+ @cshow
+}bind def
+/xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def
+/ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def
+/xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def
+currentglobal true setglobal
+/ct_T3Defs
+{
+/BuildChar
+{
+ 1 index/Encoding get exch get
+ 1 index/BuildGlyph get exec
+}bind def
+/BuildGlyph
+{
+ exch begin
+ GlyphProcs exch get exec
+ end
+}bind def
+}bind def
+setglobal
+/@_SaveStackLevels
+ {
+ Adobe_CoolType_Data
+ begin
+ /@vmState currentglobal def false setglobal
+ @opStackCountByLevel
+ @opStackLevel
+ 2 copy known not
+ {
+ 2 copy
+ 3 dict dup/args
+ 7 index
+ 5 add array put
+ put get
+ }
+ {
+ get dup/args get dup length 3 index lt
+ {
+ dup length 5 add array exch
+ 1 index exch 0 exch putinterval
+ 1 index exch/args exch put
+ }
+ {pop}
+ ifelse
+ }
+ ifelse
+ begin
+ count 1 sub
+ 1 index lt
+ {pop count}
+ if
+ dup/argCount exch def
+ dup 0 gt
+ {
+ args exch 0 exch getinterval
+ astore pop
+ }
+ {pop}
+ ifelse
+ count
+ /restCount exch def
+ end
+ /@opStackLevel @opStackLevel 1 add def
+ countdictstack 1 sub
+ @dictStackCountByLevel exch @dictStackLevel exch put
+ /@dictStackLevel @dictStackLevel 1 add def
+ @vmState setglobal
+ end
+ }bind def
+/@_RestoreStackLevels
+ {
+ Adobe_CoolType_Data
+ begin
+ /@opStackLevel @opStackLevel 1 sub def
+ @opStackCountByLevel @opStackLevel get
+ begin
+ count restCount sub dup 0 gt
+ {{pop}repeat}
+ {pop}
+ ifelse
+ args 0 argCount getinterval{}forall
+ end
+ /@dictStackLevel @dictStackLevel 1 sub def
+ @dictStackCountByLevel @dictStackLevel get
+ end
+ countdictstack exch sub dup 0 gt
+ {{end}repeat}
+ {pop}
+ ifelse
+ }bind def
+/@_PopStackLevels
+ {
+ Adobe_CoolType_Data
+ begin
+ /@opStackLevel @opStackLevel 1 sub def
+ /@dictStackLevel @dictStackLevel 1 sub def
+ end
+ }bind def
+/@Raise
+ {
+ exch cvx exch errordict exch get exec
+ stop
+ }bind def
+/@ReRaise
+ {
+ cvx $error/errorname get errordict exch get exec
+ stop
+ }bind def
+/@Stopped
+ {
+ 0 @#Stopped
+ }bind def
+/@#Stopped
+ {
+ @_SaveStackLevels
+ stopped
+ {@_RestoreStackLevels true}
+ {@_PopStackLevels false}
+ ifelse
+ }bind def
+/@Arg
+ {
+ Adobe_CoolType_Data
+ begin
+ @opStackCountByLevel @opStackLevel 1 sub get
+ begin
+ args exch
+ argCount 1 sub exch sub get
+ end
+ end
+ }bind def
+currentglobal true setglobal
+/CTHasResourceForAllBug
+ Level2?
+ {
+ 1 dict dup
+ /@shouldNotDisappearDictValue true def
+ Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put
+ begin
+ count @_SaveStackLevels
+ {(*){pop stop}128 string/Category resourceforall}
+ stopped pop
+ @_RestoreStackLevels
+ currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll
+ {
+ /@shouldNotDisappearDictValue known
+ {
+ {
+ end
+ currentdict 1 index eq
+ {pop exit}
+ if
+ }
+ loop
+ }
+ if
+ }
+ {
+ pop
+ end
+ }
+ ifelse
+ }
+ {false}
+ ifelse
+ def
+true setglobal
+/CTHasResourceStatusBug
+ Level2?
+ {
+ mark
+ {/steveamerige/Category resourcestatus}
+ stopped
+ {cleartomark true}
+ {cleartomark currentglobal not}
+ ifelse
+ }
+ {false}
+ ifelse
+ def
+setglobal
+/CTResourceStatus
+ {
+ mark 3 1 roll
+ /Category findresource
+ begin
+ ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec
+ {cleartomark false}
+ {{3 2 roll pop true}{cleartomark false}ifelse}
+ ifelse
+ end
+ }bind def
+/CTWorkAroundBugs
+ {
+ Level2?
+ {
+ /cid_PreLoad/ProcSet resourcestatus
+ {
+ pop pop
+ currentglobal
+ mark
+ {
+ (*)
+ {
+ dup/CMap CTHasResourceStatusBug
+ {CTResourceStatus}
+ {resourcestatus}
+ ifelse
+ {
+ pop dup 0 eq exch 1 eq or
+ {
+ dup/CMap findresource gcheck setglobal
+ /CMap undefineresource
+ }
+ {
+ pop CTHasResourceForAllBug
+ {exit}
+ {stop}
+ ifelse
+ }
+ ifelse
+ }
+ {pop}
+ ifelse
+ }
+ 128 string/CMap resourceforall
+ }
+ stopped
+ {cleartomark}
+ stopped pop
+ setglobal
+ }
+ if
+ }
+ if
+ }bind def
+/ds
+ {
+ Adobe_CoolType_Core
+ begin
+ CTWorkAroundBugs
+ /mo/moveto load def
+ /nf/newencodedfont load def
+ /msf{makefont setfont}bind def
+ /uf{dup undefinefont ct_VMDictUndef}bind def
+ /ur/undefineresource load def
+ /chp/charpath load def
+ /awsh/awidthshow load def
+ /wsh/widthshow load def
+ /ash/ashow load def
+ /@xshow/xshow load def
+ /@yshow/yshow load def
+ /@xyshow/xyshow load def
+ /@cshow/cshow load def
+ /sh/show load def
+ /rp/repeat load def
+ /.n/.notdef def
+ end
+ currentglobal false setglobal
+ userdict/Adobe_CoolType_Data 2 copy known not
+ {2 copy 10 dict put}
+ if
+ get
+ begin
+ /AddWidths? false def
+ /CC 0 def
+ /charcode 2 string def
+ /@opStackCountByLevel 32 dict def
+ /@opStackLevel 0 def
+ /@dictStackCountByLevel 32 dict def
+ /@dictStackLevel 0 def
+ /InVMFontsByCMap 10 dict def
+ /InVMDeepCopiedFonts 10 dict def
+ end
+ setglobal
+ }bind def
+/dt
+ {
+ currentdict Adobe_CoolType_Core eq
+ {end}
+ if
+ }bind def
+/ps
+ {
+ Adobe_CoolType_Core begin
+ Adobe_CoolType_GVMFonts begin
+ Adobe_CoolType_LVMFonts begin
+ SharedFontDirectory begin
+ }bind def
+/pt
+ {
+ end
+ end
+ end
+ end
+ }bind def
+/unload
+ {
+ systemdict/languagelevel known
+ {
+ systemdict/languagelevel get 2 ge
+ {
+ userdict/Adobe_CoolType_Core 2 copy known
+ {undef}
+ {pop pop}
+ ifelse
+ }
+ if
+ }
+ if
+ }bind def
+/ndf
+ {
+ 1 index where
+ {pop pop pop}
+ {dup xcheck{bind}if def}
+ ifelse
+ }def
+/findfont systemdict
+ begin
+ userdict
+ begin
+ /globaldict where{/globaldict get begin}if
+ dup where pop exch get
+ /globaldict where{pop end}if
+ end
+ end
+Adobe_CoolType_Core_Defined
+ {/systemfindfont exch def}
+ {
+ /findfont 1 index def
+ /systemfindfont exch def
+ }
+ifelse
+/undefinefont
+ {pop}ndf
+/copyfont
+ {
+ currentglobal 3 1 roll
+ 1 index gcheck setglobal
+ dup null eq{0}{dup length}ifelse
+ 2 index length add 1 add dict
+ begin
+ exch
+ {
+ 1 index/FID eq
+ {pop pop}
+ {def}
+ ifelse
+ }
+ forall
+ dup null eq
+ {pop}
+ {{def}forall}
+ ifelse
+ currentdict
+ end
+ exch setglobal
+ }bind def
+/copyarray
+ {
+ currentglobal exch
+ dup gcheck setglobal
+ dup length array copy
+ exch setglobal
+ }bind def
+/newencodedfont
+ {
+ currentglobal
+ {
+ SharedFontDirectory 3 index known
+ {SharedFontDirectory 3 index get/FontReferenced known}
+ {false}
+ ifelse
+ }
+ {
+ FontDirectory 3 index known
+ {FontDirectory 3 index get/FontReferenced known}
+ {
+ SharedFontDirectory 3 index known
+ {SharedFontDirectory 3 index get/FontReferenced known}
+ {false}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ dup
+ {
+ 3 index findfont/FontReferenced get
+ 2 index dup type/nametype eq
+ {findfont}
+ if ne
+ {pop false}
+ if
+ }
+ if
+ dup
+ {
+ 1 index dup type/nametype eq
+ {findfont}
+ if
+ dup/CharStrings known
+ {
+ /CharStrings get length
+ 4 index findfont/CharStrings get length
+ ne
+ {
+ pop false
+ }
+ if
+ }
+ {pop}
+ ifelse
+ }
+ if
+ {
+ pop
+ 1 index findfont
+ /Encoding get exch
+ 0 1 255
+ {2 copy get 3 index 3 1 roll put}
+ for
+ pop pop pop
+ }
+ {
+ currentglobal
+ 4 1 roll
+ dup type/nametype eq
+ {findfont}
+ if
+ dup gcheck setglobal
+ dup dup maxlength 2 add dict
+ begin
+ exch
+ {
+ 1 index/FID ne
+ 2 index/Encoding ne and
+ {def}
+ {pop pop}
+ ifelse
+ }
+ forall
+ /FontReferenced exch def
+ /Encoding exch dup length array copy def
+ /FontName 1 index dup type/stringtype eq{cvn}if def dup
+ currentdict
+ end
+ definefont ct_VMDictPut
+ setglobal
+ }
+ ifelse
+ }bind def
+/SetSubstituteStrategy
+ {
+ $SubstituteFont
+ begin
+ dup type/dicttype ne
+ {0 dict}
+ if
+ currentdict/$Strategies known
+ {
+ exch $Strategies exch
+ 2 copy known
+ {
+ get
+ 2 copy maxlength exch maxlength add dict
+ begin
+ {def}forall
+ {def}forall
+ currentdict
+ dup/$Init known
+ {dup/$Init get exec}
+ if
+ end
+ /$Strategy exch def
+ }
+ {pop pop pop}
+ ifelse
+ }
+ {pop pop}
+ ifelse
+ end
+ }bind def
+/scff
+ {
+ $SubstituteFont
+ begin
+ dup type/stringtype eq
+ {dup length exch}
+ {null}
+ ifelse
+ /$sname exch def
+ /$slen exch def
+ /$inVMIndex
+ $sname null eq
+ {
+ 1 index $str cvs
+ dup length $slen sub $slen getinterval cvn
+ }
+ {$sname}
+ ifelse def
+ end
+ {findfont}
+ @Stopped
+ {
+ dup length 8 add string exch
+ 1 index 0(BadFont:)putinterval
+ 1 index exch 8 exch dup length string cvs putinterval cvn
+ {findfont}
+ @Stopped
+ {pop/Courier findfont}
+ if
+ }
+ if
+ $SubstituteFont
+ begin
+ /$sname null def
+ /$slen 0 def
+ /$inVMIndex null def
+ end
+ }bind def
+/isWidthsOnlyFont
+ {
+ dup/WidthsOnly known
+ {pop pop true}
+ {
+ dup/FDepVector known
+ {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall}
+ {
+ dup/FDArray known
+ {/FDArray get{isWidthsOnlyFont dup{exit}if}forall}
+ {pop}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }bind def
+/ct_StyleDicts 4 dict dup begin
+ /Adobe-Japan1 4 dict dup begin
+ Level2?
+ {
+ /Serif
+ /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus
+ {pop pop/HeiseiMin-W3}
+ {
+ /CIDFont/Category resourcestatus
+ {
+ pop pop
+ /HeiseiMin-W3/CIDFont resourcestatus
+ {pop pop/HeiseiMin-W3}
+ {/Ryumin-Light}
+ ifelse
+ }
+ {/Ryumin-Light}
+ ifelse
+ }
+ ifelse
+ def
+ /SansSerif
+ /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus
+ {pop pop/HeiseiKakuGo-W5}
+ {
+ /CIDFont/Category resourcestatus
+ {
+ pop pop
+ /HeiseiKakuGo-W5/CIDFont resourcestatus
+ {pop pop/HeiseiKakuGo-W5}
+ {/GothicBBB-Medium}
+ ifelse
+ }
+ {/GothicBBB-Medium}
+ ifelse
+ }
+ ifelse
+ def
+ /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus
+ {pop pop/HeiseiMaruGo-W4}
+ {
+ /CIDFont/Category resourcestatus
+ {
+ pop pop
+ /HeiseiMaruGo-W4/CIDFont resourcestatus
+ {pop pop/HeiseiMaruGo-W4}
+ {
+ /Jun101-Light-RKSJ-H/Font resourcestatus
+ {pop pop/Jun101-Light}
+ {SansSerif}
+ ifelse
+ }
+ ifelse
+ }
+ {
+ /Jun101-Light-RKSJ-H/Font resourcestatus
+ {pop pop/Jun101-Light}
+ {SansSerif}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ /RoundSansSerif exch def
+ /Default Serif def
+ }
+ {
+ /Serif/Ryumin-Light def
+ /SansSerif/GothicBBB-Medium def
+ {
+ (fonts/Jun101-Light-83pv-RKSJ-H)status
+ }stopped
+ {pop}{
+ {pop pop pop pop/Jun101-Light}
+ {SansSerif}
+ ifelse
+ /RoundSansSerif exch def
+ }ifelse
+ /Default Serif def
+ }
+ ifelse
+ end
+ def
+ /Adobe-Korea1 4 dict dup begin
+ /Serif/HYSMyeongJo-Medium def
+ /SansSerif/HYGoThic-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-GB1 4 dict dup begin
+ /Serif/STSong-Light def
+ /SansSerif/STHeiti-Regular def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-CNS1 4 dict dup begin
+ /Serif/MKai-Medium def
+ /SansSerif/MHei-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+end
+def
+Level2?{currentglobal true setglobal}if
+/ct_BoldRomanWidthProc
+ {
+ stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth
+ 0 0
+ }bind def
+/ct_Type0WidthProc
+ {
+ dup stringwidth 0 0 moveto
+ 2 index true charpath pathbbox
+ 0 -1
+ 7 index 2 div .88
+ setcachedevice2
+ pop
+ 0 0
+ }bind def
+/ct_Type0WMode1WidthProc
+ {
+ dup stringwidth
+ pop 2 div neg -0.88
+ 2 copy
+ moveto
+ 0 -1
+ 5 -1 roll true charpath pathbbox
+ setcachedevice
+ }bind def
+/cHexEncoding
+[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
+/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
+/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
+/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
+/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
+/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
+/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
+/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
+/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
+/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
+/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
+/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
+/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
+/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def
+/ct_BoldBaseFont
+ 11 dict begin
+ /FontType 3 def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /Encoding cHexEncoding def
+ /_setwidthProc/ct_BoldRomanWidthProc load def
+ /_bcstr1 1 string def
+ /BuildChar
+ {
+ exch begin
+ _basefont setfont
+ _bcstr1 dup 0 4 -1 roll put
+ dup
+ _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bind def
+ currentdict
+ end
+def
+systemdict/composefont known
+{
+/ct_DefineIdentity-H
+{
+ /Identity-H/CMap resourcestatus
+ {
+ pop pop
+ }
+ {
+ /CIDInit/ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /CIDSystemInfo 3 dict dup begin
+ /Registry(Adobe)def
+ /Ordering(Identity)def
+ /Supplement 0 def
+ end def
+ /CMapName/Identity-H def
+ /CMapVersion 1.000 def
+ /CMapType 1 def
+ 1 begincodespacerange
+ <0000><FFFF>
+ endcodespacerange
+ 1 begincidrange
+ <0000><FFFF>0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ }
+ ifelse
+}
+def
+/ct_BoldBaseCIDFont
+ 11 dict begin
+ /CIDFontType 1 def
+ /CIDFontName/ct_BoldBaseCIDFont def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /_setwidthProc/ct_Type0WidthProc load def
+ /_bcstr2 2 string def
+ /BuildGlyph
+ {
+ exch begin
+ _basefont setfont
+ _bcstr2 1 2 index 256 mod put
+ _bcstr2 0 3 -1 roll 256 idiv put
+ _bcstr2 dup _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bind def
+ currentdict
+ end
+def
+}if
+Level2?{setglobal}if
+/ct_CopyFont{
+ {
+ 1 index/FID ne 2 index/UniqueID ne and
+ {def}{pop pop}ifelse
+ }forall
+}bind def
+/ct_Type0CopyFont
+{
+ exch
+ dup length dict
+ begin
+ ct_CopyFont
+ [
+ exch
+ FDepVector
+ {
+ dup/FontType get 0 eq
+ {
+ 1 index ct_Type0CopyFont
+ /_ctType0 exch definefont
+ }
+ {
+ /_ctBaseFont exch
+ 2 index exec
+ }
+ ifelse
+ exch
+ }
+ forall
+ pop
+ ]
+ /FDepVector exch def
+ currentdict
+ end
+}bind def
+/ct_MakeBoldFont
+{
+ dup/ct_SyntheticBold known
+ {
+ dup length 3 add dict begin
+ ct_CopyFont
+ /ct_StrokeWidth .03 0 FontMatrix idtransform pop def
+ /ct_SyntheticBold true def
+ currentdict
+ end
+ definefont
+ }
+ {
+ dup dup length 3 add dict
+ begin
+ ct_CopyFont
+ /PaintType 2 def
+ /StrokeWidth .03 0 FontMatrix idtransform pop def
+ /dummybold currentdict
+ end
+ definefont
+ dup/FontType get dup 9 ge exch 11 le and
+ {
+ ct_BoldBaseCIDFont
+ dup length 3 add dict copy begin
+ dup/CIDSystemInfo get/CIDSystemInfo exch def
+ ct_DefineIdentity-H
+ /_Type0Identity/Identity-H 3 -1 roll[exch]composefont
+ /_basefont exch def
+ /_Type0Identity/Identity-H 3 -1 roll[exch]composefont
+ /_basefonto exch def
+ currentdict
+ end
+ /CIDFont defineresource
+ }
+ {
+ ct_BoldBaseFont
+ dup length 3 add dict copy begin
+ /_basefont exch def
+ /_basefonto exch def
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+}bind def
+/ct_MakeBold{
+ 1 index
+ 1 index
+ findfont
+ currentglobal 5 1 roll
+ dup gcheck setglobal
+ dup
+ /FontType get 0 eq
+ {
+ dup/WMode known{dup/WMode get 1 eq}{false}ifelse
+ version length 4 ge
+ and
+ {version 0 4 getinterval cvi 2015 ge}
+ {true}
+ ifelse
+ {/ct_Type0WidthProc}
+ {/ct_Type0WMode1WidthProc}
+ ifelse
+ ct_BoldBaseFont/_setwidthProc 3 -1 roll load put
+ {ct_MakeBoldFont}ct_Type0CopyFont definefont
+ }
+ {
+ dup/_fauxfont known not 1 index/SubstMaster known not and
+ {
+ ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put
+ ct_MakeBoldFont
+ }
+ {
+ 2 index 2 index eq
+ {exch pop }
+ {
+ dup length dict begin
+ ct_CopyFont
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ pop pop pop
+ setglobal
+}bind def
+/?str1 256 string def
+/?set
+ {
+ $SubstituteFont
+ begin
+ /$substituteFound false def
+ /$fontname 1 index def
+ /$doSmartSub false def
+ end
+ dup
+ findfont
+ $SubstituteFont
+ begin
+ $substituteFound
+ {false}
+ {
+ dup/FontName known
+ {
+ dup/FontName get $fontname eq
+ 1 index/DistillerFauxFont known not and
+ /currentdistillerparams where
+ {pop false 2 index isWidthsOnlyFont not and}
+ if
+ }
+ {false}
+ ifelse
+ }
+ ifelse
+ exch pop
+ /$doSmartSub true def
+ end
+ {
+ 5 1 roll pop pop pop pop
+ findfont
+ }
+ {
+ 1 index
+ findfont
+ dup/FontType get 3 eq
+ {
+ 6 1 roll pop pop pop pop pop false
+ }
+ {pop true}
+ ifelse
+ {
+ $SubstituteFont
+ begin
+ pop pop
+ /$styleArray 1 index def
+ /$regOrdering 2 index def
+ pop pop
+ 0 1 $styleArray length 1 sub
+ {
+ $styleArray exch get
+ ct_StyleDicts $regOrdering
+ 2 copy known
+ {
+ get
+ exch 2 copy known not
+ {pop/Default}
+ if
+ get
+ dup type/nametype eq
+ {
+ ?str1 cvs length dup 1 add exch
+ ?str1 exch(-)putinterval
+ exch dup length exch ?str1 exch 3 index exch putinterval
+ add ?str1 exch 0 exch getinterval cvn
+ }
+ {
+ pop pop/Unknown
+ }
+ ifelse
+ }
+ {
+ pop pop pop pop/Unknown
+ }
+ ifelse
+ }
+ for
+ end
+ findfont
+ }if
+ }
+ ifelse
+ currentglobal false setglobal 3 1 roll
+ null copyfont definefont pop
+ setglobal
+ }bind def
+setpacking
+userdict/$SubstituteFont 25 dict put
+1 dict
+ begin
+ /SubstituteFont
+ dup $error exch 2 copy known
+ {get}
+ {pop pop{pop/Courier}bind}
+ ifelse def
+ /currentdistillerparams where dup
+ {
+ pop pop
+ currentdistillerparams/CannotEmbedFontPolicy 2 copy known
+ {get/Error eq}
+ {pop pop false}
+ ifelse
+ }
+ if not
+ {
+ countdictstack array dictstack 0 get
+ begin
+ userdict
+ begin
+ $SubstituteFont
+ begin
+ /$str 128 string def
+ /$fontpat 128 string def
+ /$slen 0 def
+ /$sname null def
+ /$match false def
+ /$fontname null def
+ /$substituteFound false def
+ /$inVMIndex null def
+ /$doSmartSub true def
+ /$depth 0 def
+ /$fontname null def
+ /$italicangle 26.5 def
+ /$dstack null def
+ /$Strategies 10 dict dup
+ begin
+ /$Type3Underprint
+ {
+ currentglobal exch false setglobal
+ 11 dict
+ begin
+ /UseFont exch
+ $WMode 0 ne
+ {
+ dup length dict copy
+ dup/WMode $WMode put
+ /UseFont exch definefont
+ }
+ if def
+ /FontName $fontname dup type/stringtype eq{cvn}if def
+ /FontType 3 def
+ /FontMatrix[.001 0 0 .001 0 0]def
+ /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def
+ /FontBBox[0 0 0 0]def
+ /CCInfo 7 dict dup
+ begin
+ /cc null def
+ /x 0 def
+ /y 0 def
+ end def
+ /BuildChar
+ {
+ exch
+ begin
+ CCInfo
+ begin
+ 1 string dup 0 3 index put exch pop
+ /cc exch def
+ UseFont 1000 scalefont setfont
+ cc stringwidth/y exch def/x exch def
+ x y setcharwidth
+ $SubstituteFont/$Strategy get/$Underprint get exec
+ 0 0 moveto cc show
+ x y moveto
+ end
+ end
+ }bind def
+ currentdict
+ end
+ exch setglobal
+ }bind def
+ /$GetaTint
+ 2 dict dup
+ begin
+ /$BuildFont
+ {
+ dup/WMode known
+ {dup/WMode get}
+ {0}
+ ifelse
+ /$WMode exch def
+ $fontname exch
+ dup/FontName known
+ {
+ dup/FontName get
+ dup type/stringtype eq{cvn}if
+ }
+ {/unnamedfont}
+ ifelse
+ exch
+ Adobe_CoolType_Data/InVMDeepCopiedFonts get
+ 1 index/FontName get known
+ {
+ pop
+ Adobe_CoolType_Data/InVMDeepCopiedFonts get
+ 1 index get
+ null copyfont
+ }
+ {$deepcopyfont}
+ ifelse
+ exch 1 index exch/FontBasedOn exch put
+ dup/FontName $fontname dup type/stringtype eq{cvn}if put
+ definefont
+ Adobe_CoolType_Data/InVMDeepCopiedFonts get
+ begin
+ dup/FontBasedOn get 1 index def
+ end
+ }bind def
+ /$Underprint
+ {
+ gsave
+ x abs y abs gt
+ {/y 1000 def}
+ {/x -1000 def 500 120 translate}
+ ifelse
+ Level2?
+ {
+ [/Separation(All)/DeviceCMYK{0 0 0 1 pop}]
+ setcolorspace
+ }
+ {0 setgray}
+ ifelse
+ 10 setlinewidth
+ x .8 mul
+ [7 3]
+ {
+ y mul 8 div 120 sub x 10 div exch moveto
+ 0 y 4 div neg rlineto
+ dup 0 rlineto
+ 0 y 4 div rlineto
+ closepath
+ gsave
+ Level2?
+ {.2 setcolor}
+ {.8 setgray}
+ ifelse
+ fill grestore
+ stroke
+ }
+ forall
+ pop
+ grestore
+ }bind def
+ end def
+ /$Oblique
+ 1 dict dup
+ begin
+ /$BuildFont
+ {
+ currentglobal exch dup gcheck setglobal
+ null copyfont
+ begin
+ /FontBasedOn
+ currentdict/FontName known
+ {
+ FontName
+ dup type/stringtype eq{cvn}if
+ }
+ {/unnamedfont}
+ ifelse
+ def
+ /FontName $fontname dup type/stringtype eq{cvn}if def
+ /currentdistillerparams where
+ {pop}
+ {
+ /FontInfo currentdict/FontInfo known
+ {FontInfo null copyfont}
+ {2 dict}
+ ifelse
+ dup
+ begin
+ /ItalicAngle $italicangle def
+ /FontMatrix FontMatrix
+ [1 0 ItalicAngle dup sin exch cos div 1 0 0]
+ matrix concatmatrix readonly
+ end
+ 4 2 roll def
+ def
+ }
+ ifelse
+ FontName currentdict
+ end
+ definefont
+ exch setglobal
+ }bind def
+ end def
+ /$None
+ 1 dict dup
+ begin
+ /$BuildFont{}bind def
+ end def
+ end def
+ /$Oblique SetSubstituteStrategy
+ /$findfontByEnum
+ {
+ dup type/stringtype eq{cvn}if
+ dup/$fontname exch def
+ $sname null eq
+ {$str cvs dup length $slen sub $slen getinterval}
+ {pop $sname}
+ ifelse
+ $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval
+ /$match false def
+ $SubstituteFont/$dstack countdictstack array dictstack put
+ mark
+ {
+ $fontpat 0 $slen 7 add getinterval
+ {/$match exch def exit}
+ $str filenameforall
+ }
+ stopped
+ {
+ cleardictstack
+ currentdict
+ true
+ $SubstituteFont/$dstack get
+ {
+ exch
+ {
+ 1 index eq
+ {pop false}
+ {true}
+ ifelse
+ }
+ {begin false}
+ ifelse
+ }
+ forall
+ pop
+ }
+ if
+ cleartomark
+ /$slen 0 def
+ $match false ne
+ {$match(fonts/)anchorsearch pop pop cvn}
+ {/Courier}
+ ifelse
+ }bind def
+ /$ROS 1 dict dup
+ begin
+ /Adobe 4 dict dup
+ begin
+ /Japan1 [/Ryumin-Light/HeiseiMin-W3
+ /GothicBBB-Medium/HeiseiKakuGo-W5
+ /HeiseiMaruGo-W4/Jun101-Light]def
+ /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def
+ /GB1 [/STSong-Light/STHeiti-Regular]def
+ /CNS1 [/MKai-Medium/MHei-Medium]def
+ end def
+ end def
+ /$cmapname null def
+ /$deepcopyfont
+ {
+ dup/FontType get 0 eq
+ {
+ 1 dict dup/FontName/copied put copyfont
+ begin
+ /FDepVector FDepVector copyarray
+ 0 1 2 index length 1 sub
+ {
+ 2 copy get $deepcopyfont
+ dup/FontName/copied put
+ /copied exch definefont
+ 3 copy put pop pop
+ }
+ for
+ def
+ currentdict
+ end
+ }
+ {$Strategies/$Type3Underprint get exec}
+ ifelse
+ }bind def
+ /$buildfontname
+ {
+ dup/CIDFont findresource/CIDSystemInfo get
+ begin
+ Registry length Ordering length Supplement 8 string cvs
+ 3 copy length 2 add add add string
+ dup 5 1 roll dup 0 Registry putinterval
+ dup 4 index(-)putinterval
+ dup 4 index 1 add Ordering putinterval
+ 4 2 roll add 1 add 2 copy(-)putinterval
+ end
+ 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch
+ anchorsearch
+ {pop pop 3 2 roll putinterval cvn/$cmapname exch def}
+ {pop pop pop pop pop}
+ ifelse
+ length
+ $str 1 index(-)putinterval 1 add
+ $str 1 index $cmapname $fontpat cvs putinterval
+ $cmapname length add
+ $str exch 0 exch getinterval cvn
+ }bind def
+ /$findfontByROS
+ {
+ /$fontname exch def
+ $ROS Registry 2 copy known
+ {
+ get Ordering 2 copy known
+ {get}
+ {pop pop[]}
+ ifelse
+ }
+ {pop pop[]}
+ ifelse
+ false exch
+ {
+ dup/CIDFont resourcestatus
+ {
+ pop pop
+ save
+ 1 index/CIDFont findresource
+ dup/WidthsOnly known
+ {dup/WidthsOnly get}
+ {false}
+ ifelse
+ exch pop
+ exch restore
+ {pop}
+ {exch pop true exit}
+ ifelse
+ }
+ {pop}
+ ifelse
+ }
+ forall
+ {$str cvs $buildfontname}
+ {
+ false(*)
+ {
+ save exch
+ dup/CIDFont findresource
+ dup/WidthsOnly known
+ {dup/WidthsOnly get not}
+ {true}
+ ifelse
+ exch/CIDSystemInfo get
+ dup/Registry get Registry eq
+ exch/Ordering get Ordering eq and and
+ {exch restore exch pop true exit}
+ {pop restore}
+ ifelse
+ }
+ $str/CIDFont resourceforall
+ {$buildfontname}
+ {$fontname $findfontByEnum}
+ ifelse
+ }
+ ifelse
+ }bind def
+ end
+ end
+ currentdict/$error known currentdict/languagelevel known and dup
+ {pop $error/SubstituteFont known}
+ if
+ dup
+ {$error}
+ {Adobe_CoolType_Core}
+ ifelse
+ begin
+ {
+ /SubstituteFont
+ /CMap/Category resourcestatus
+ {
+ pop pop
+ {
+ $SubstituteFont
+ begin
+ /$substituteFound true def
+ dup length $slen gt
+ $sname null ne or
+ $slen 0 gt and
+ {
+ $sname null eq
+ {dup $str cvs dup length $slen sub $slen getinterval cvn}
+ {$sname}
+ ifelse
+ Adobe_CoolType_Data/InVMFontsByCMap get
+ 1 index 2 copy known
+ {
+ get
+ false exch
+ {
+ pop
+ currentglobal
+ {
+ GlobalFontDirectory 1 index known
+ {exch pop true exit}
+ {pop}
+ ifelse
+ }
+ {
+ FontDirectory 1 index known
+ {exch pop true exit}
+ {
+ GlobalFontDirectory 1 index known
+ {exch pop true exit}
+ {pop}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }
+ forall
+ }
+ {pop pop false}
+ ifelse
+ {
+ exch pop exch pop
+ }
+ {
+ dup/CMap resourcestatus
+ {
+ pop pop
+ dup/$cmapname exch def
+ /CMap findresource/CIDSystemInfo get{def}forall
+ $findfontByROS
+ }
+ {
+ 128 string cvs
+ dup(-)search
+ {
+ 3 1 roll search
+ {
+ 3 1 roll pop
+ {dup cvi}
+ stopped
+ {pop pop pop pop pop $findfontByEnum}
+ {
+ 4 2 roll pop pop
+ exch length
+ exch
+ 2 index length
+ 2 index
+ sub
+ exch 1 sub -1 0
+ {
+ $str cvs dup length
+ 4 index
+ 0
+ 4 index
+ 4 3 roll add
+ getinterval
+ exch 1 index exch 3 index exch
+ putinterval
+ dup/CMap resourcestatus
+ {
+ pop pop
+ 4 1 roll pop pop pop
+ dup/$cmapname exch def
+ /CMap findresource/CIDSystemInfo get{def}forall
+ $findfontByROS
+ true exit
+ }
+ {pop}
+ ifelse
+ }
+ for
+ dup type/booleantype eq
+ {pop}
+ {pop pop pop $findfontByEnum}
+ ifelse
+ }
+ ifelse
+ }
+ {pop pop pop $findfontByEnum}
+ ifelse
+ }
+ {pop pop $findfontByEnum}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }
+ {//SubstituteFont exec}
+ ifelse
+ /$slen 0 def
+ end
+ }
+ }
+ {
+ {
+ $SubstituteFont
+ begin
+ /$substituteFound true def
+ dup length $slen gt
+ $sname null ne or
+ $slen 0 gt and
+ {$findfontByEnum}
+ {//SubstituteFont exec}
+ ifelse
+ end
+ }
+ }
+ ifelse
+ bind readonly def
+ Adobe_CoolType_Core/scfindfont/systemfindfont load put
+ }
+ {
+ /scfindfont
+ {
+ $SubstituteFont
+ begin
+ dup systemfindfont
+ dup/FontName known
+ {dup/FontName get dup 3 index ne}
+ {/noname true}
+ ifelse
+ dup
+ {
+ /$origfontnamefound 2 index def
+ /$origfontname 4 index def/$substituteFound true def
+ }
+ if
+ exch pop
+ {
+ $slen 0 gt
+ $sname null ne
+ 3 index length $slen gt or and
+ {
+ pop dup $findfontByEnum findfont
+ dup maxlength 1 add dict
+ begin
+ {1 index/FID eq{pop pop}{def}ifelse}
+ forall
+ currentdict
+ end
+ definefont
+ dup/FontName known{dup/FontName get}{null}ifelse
+ $origfontnamefound ne
+ {
+ $origfontname $str cvs print
+ ( substitution revised, using )print
+ dup/FontName known
+ {dup/FontName get}{(unspecified font)}
+ ifelse
+ $str cvs print(.\n)print
+ }
+ if
+ }
+ {exch pop}
+ ifelse
+ }
+ {exch pop}
+ ifelse
+ end
+ }bind def
+ }
+ ifelse
+ end
+ end
+ Adobe_CoolType_Core_Defined not
+ {
+ Adobe_CoolType_Core/findfont
+ {
+ $SubstituteFont
+ begin
+ $depth 0 eq
+ {
+ /$fontname 1 index dup type/stringtype ne{$str cvs}if def
+ /$substituteFound false def
+ }
+ if
+ /$depth $depth 1 add def
+ end
+ scfindfont
+ $SubstituteFont
+ begin
+ /$depth $depth 1 sub def
+ $substituteFound $depth 0 eq and
+ {
+ $inVMIndex null ne
+ {dup $inVMIndex $AddInVMFont}
+ if
+ $doSmartSub
+ {
+ currentdict/$Strategy known
+ {$Strategy/$BuildFont get exec}
+ if
+ }
+ if
+ }
+ if
+ end
+ }bind put
+ }
+ if
+ }
+ if
+ end
+/$AddInVMFont
+ {
+ exch/FontName 2 copy known
+ {
+ get
+ 1 dict dup begin exch 1 index gcheck def end exch
+ Adobe_CoolType_Data/InVMFontsByCMap get exch
+ $DictAdd
+ }
+ {pop pop pop}
+ ifelse
+ }bind def
+/$DictAdd
+ {
+ 2 copy known not
+ {2 copy 4 index length dict put}
+ if
+ Level2? not
+ {
+ 2 copy get dup maxlength exch length 4 index length add lt
+ 2 copy get dup length 4 index length add exch maxlength 1 index lt
+ {
+ 2 mul dict
+ begin
+ 2 copy get{forall}def
+ 2 copy currentdict put
+ end
+ }
+ {pop}
+ ifelse
+ }
+ if
+ get
+ begin
+ {def}
+ forall
+ end
+ }bind def
+end
+end
+%%EndResource
+currentglobal true setglobal
+%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0
+%%Copyright: Copyright 1987-2006 Adobe Systems Incorporated.
+%%Version: 1.23 0
+systemdict/languagelevel known dup
+ {currentglobal false setglobal}
+ {false}
+ifelse
+exch
+userdict/Adobe_CoolType_Utility 2 copy known
+ {2 copy get dup maxlength 27 add dict copy}
+ {27 dict}
+ifelse put
+Adobe_CoolType_Utility
+ begin
+ /@eexecStartData
+ <BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E
+ 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C
+ 4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A>def
+ /@recognizeCIDFont null def
+ /ct_Level2? exch def
+ /ct_Clone? 1183615869 internaldict dup
+ /CCRun known not
+ exch/eCCRun known not
+ ct_Level2? and or def
+ct_Level2?
+ {globaldict begin currentglobal true setglobal}
+if
+ /ct_AddStdCIDMap
+ ct_Level2?
+ {{
+ mark
+ Adobe_CoolType_Utility/@recognizeCIDFont currentdict put
+ {
+ ((Hex)57 StartData
+ 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0
+ 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60
+ d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8
+ cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec
+ }
+ stopped
+ {
+ cleartomark
+ Adobe_CoolType_Utility/@recognizeCIDFont get
+ countdictstack dup array dictstack
+ exch 1 sub -1 0
+ {
+ 2 copy get 3 index eq
+ {1 index length exch sub 1 sub{end}repeat exit}
+ {pop}
+ ifelse
+ }
+ for
+ pop pop
+ Adobe_CoolType_Utility/@eexecStartData get eexec
+ }
+ {cleartomark}
+ ifelse
+ }}
+ {{
+ Adobe_CoolType_Utility/@eexecStartData get eexec
+ }}
+ ifelse bind def
+userdict/cid_extensions known
+dup{cid_extensions/cid_UpdateDB known and}if
+ {
+ cid_extensions
+ begin
+ /cid_GetCIDSystemInfo
+ {
+ 1 index type/stringtype eq
+ {exch cvn exch}
+ if
+ cid_extensions
+ begin
+ dup load 2 index known
+ {
+ 2 copy
+ cid_GetStatusInfo
+ dup null ne
+ {
+ 1 index load
+ 3 index get
+ dup null eq
+ {pop pop cid_UpdateDB}
+ {
+ exch
+ 1 index/Created get eq
+ {exch pop exch pop}
+ {pop cid_UpdateDB}
+ ifelse
+ }
+ ifelse
+ }
+ {pop cid_UpdateDB}
+ ifelse
+ }
+ {cid_UpdateDB}
+ ifelse
+ end
+ }bind def
+ end
+ }
+if
+ct_Level2?
+ {end setglobal}
+if
+ /ct_UseNativeCapability? systemdict/composefont known def
+ /ct_MakeOCF 35 dict def
+ /ct_Vars 25 dict def
+ /ct_GlyphDirProcs 6 dict def
+ /ct_BuildCharDict 15 dict dup
+ begin
+ /charcode 2 string def
+ /dst_string 1500 string def
+ /nullstring()def
+ /usewidths? true def
+ end def
+ ct_Level2?{setglobal}{pop}ifelse
+ ct_GlyphDirProcs
+ begin
+ /GetGlyphDirectory
+ {
+ systemdict/languagelevel known
+ {pop/CIDFont findresource/GlyphDirectory get}
+ {
+ 1 index/CIDFont findresource/GlyphDirectory
+ get dup type/dicttype eq
+ {
+ dup dup maxlength exch length sub 2 index lt
+ {
+ dup length 2 index add dict copy 2 index
+ /CIDFont findresource/GlyphDirectory 2 index put
+ }
+ if
+ }
+ if
+ exch pop exch pop
+ }
+ ifelse
+ +
+ }def
+ /+
+ {
+ systemdict/languagelevel known
+ {
+ currentglobal false setglobal
+ 3 dict begin
+ /vm exch def
+ }
+ {1 dict begin}
+ ifelse
+ /$ exch def
+ systemdict/languagelevel known
+ {
+ vm setglobal
+ /gvm currentglobal def
+ $ gcheck setglobal
+ }
+ if
+ ?{$ begin}if
+ }def
+ /?{$ type/dicttype eq}def
+ /|{
+ userdict/Adobe_CoolType_Data known
+ {
+ Adobe_CoolType_Data/AddWidths? known
+ {
+ currentdict Adobe_CoolType_Data
+ begin
+ begin
+ AddWidths?
+ {
+ Adobe_CoolType_Data/CC 3 index put
+ ?{def}{$ 3 1 roll put}ifelse
+ CC charcode exch 1 index 0 2 index 256 idiv put
+ 1 index exch 1 exch 256 mod put
+ stringwidth 2 array astore
+ currentfont/Widths get exch CC exch put
+ }
+ {?{def}{$ 3 1 roll put}ifelse}
+ ifelse
+ end
+ end
+ }
+ {?{def}{$ 3 1 roll put}ifelse} ifelse
+ }
+ {?{def}{$ 3 1 roll put}ifelse}
+ ifelse
+ }def
+ /!
+ {
+ ?{end}if
+ systemdict/languagelevel known
+ {gvm setglobal}
+ if
+ end
+ }def
+ /:{string currentfile exch readstring pop}executeonly def
+ end
+ ct_MakeOCF
+ begin
+ /ct_cHexEncoding
+ [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
+ /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
+ /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
+ /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
+ /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
+ /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
+ /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
+ /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
+ /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
+ /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
+ /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
+ /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
+ /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
+ /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def
+ /ct_CID_STR_SIZE 8000 def
+ /ct_mkocfStr100 100 string def
+ /ct_defaultFontMtx[.001 0 0 .001 0 0]def
+ /ct_1000Mtx[1000 0 0 1000 0 0]def
+ /ct_raise{exch cvx exch errordict exch get exec stop}bind def
+ /ct_reraise
+ {cvx $error/errorname get(Error: )print dup( )cvs print
+ errordict exch get exec stop
+ }bind def
+ /ct_cvnsi
+ {
+ 1 index add 1 sub 1 exch 0 4 1 roll
+ {
+ 2 index exch get
+ exch 8 bitshift
+ add
+ }
+ for
+ exch pop
+ }bind def
+ /ct_GetInterval
+ {
+ Adobe_CoolType_Utility/ct_BuildCharDict get
+ begin
+ /dst_index 0 def
+ dup dst_string length gt
+ {dup string/dst_string exch def}
+ if
+ 1 index ct_CID_STR_SIZE idiv
+ /arrayIndex exch def
+ 2 index arrayIndex get
+ 2 index
+ arrayIndex ct_CID_STR_SIZE mul
+ sub
+ {
+ dup 3 index add 2 index length le
+ {
+ 2 index getinterval
+ dst_string dst_index 2 index putinterval
+ length dst_index add/dst_index exch def
+ exit
+ }
+ {
+ 1 index length 1 index sub
+ dup 4 1 roll
+ getinterval
+ dst_string dst_index 2 index putinterval
+ pop dup dst_index add/dst_index exch def
+ sub
+ /arrayIndex arrayIndex 1 add def
+ 2 index dup length arrayIndex gt
+ {arrayIndex get}
+ {
+ pop
+ exit
+ }
+ ifelse
+ 0
+ }
+ ifelse
+ }
+ loop
+ pop pop pop
+ dst_string 0 dst_index getinterval
+ end
+ }bind def
+ ct_Level2?
+ {
+ /ct_resourcestatus
+ currentglobal mark true setglobal
+ {/unknowninstancename/Category resourcestatus}
+ stopped
+ {cleartomark setglobal true}
+ {cleartomark currentglobal not exch setglobal}
+ ifelse
+ {
+ {
+ mark 3 1 roll/Category findresource
+ begin
+ ct_Vars/vm currentglobal put
+ ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec
+ {cleartomark false}
+ {{3 2 roll pop true}{cleartomark false}ifelse}
+ ifelse
+ ct_Vars/vm get setglobal
+ end
+ }
+ }
+ {{resourcestatus}}
+ ifelse bind def
+ /CIDFont/Category ct_resourcestatus
+ {pop pop}
+ {
+ currentglobal true setglobal
+ /Generic/Category findresource
+ dup length dict copy
+ dup/InstanceType/dicttype put
+ /CIDFont exch/Category defineresource pop
+ setglobal
+ }
+ ifelse
+ ct_UseNativeCapability?
+ {
+ /CIDInit/ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /CIDSystemInfo 3 dict dup begin
+ /Registry(Adobe)def
+ /Ordering(Identity)def
+ /Supplement 0 def
+ end def
+ /CMapName/Identity-H def
+ /CMapVersion 1.000 def
+ /CMapType 1 def
+ 1 begincodespacerange
+ <0000><FFFF>
+ endcodespacerange
+ 1 begincidrange
+ <0000><FFFF>0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ }
+ if
+ }
+ {
+ /ct_Category 2 dict begin
+ /CIDFont 10 dict def
+ /ProcSet 2 dict def
+ currentdict
+ end
+ def
+ /defineresource
+ {
+ ct_Category 1 index 2 copy known
+ {
+ get
+ dup dup maxlength exch length eq
+ {
+ dup length 10 add dict copy
+ ct_Category 2 index 2 index put
+ }
+ if
+ 3 index 3 index put
+ pop exch pop
+ }
+ {pop pop/defineresource/undefined ct_raise}
+ ifelse
+ }bind def
+ /findresource
+ {
+ ct_Category 1 index 2 copy known
+ {
+ get
+ 2 index 2 copy known
+ {get 3 1 roll pop pop}
+ {pop pop/findresource/undefinedresource ct_raise}
+ ifelse
+ }
+ {pop pop/findresource/undefined ct_raise}
+ ifelse
+ }bind def
+ /resourcestatus
+ {
+ ct_Category 1 index 2 copy known
+ {
+ get
+ 2 index known
+ exch pop exch pop
+ {
+ 0 -1 true
+ }
+ {
+ false
+ }
+ ifelse
+ }
+ {pop pop/findresource/undefined ct_raise}
+ ifelse
+ }bind def
+ /ct_resourcestatus/resourcestatus load def
+ }
+ ifelse
+ /ct_CIDInit 2 dict
+ begin
+ /ct_cidfont_stream_init
+ {
+ {
+ dup(Binary)eq
+ {
+ pop
+ null
+ currentfile
+ ct_Level2?
+ {
+ {cid_BYTE_COUNT()/SubFileDecode filter}
+ stopped
+ {pop pop pop}
+ if
+ }
+ if
+ /readstring load
+ exit
+ }
+ if
+ dup(Hex)eq
+ {
+ pop
+ currentfile
+ ct_Level2?
+ {
+ {null exch/ASCIIHexDecode filter/readstring}
+ stopped
+ {pop exch pop(>)exch/readhexstring}
+ if
+ }
+ {(>)exch/readhexstring}
+ ifelse
+ load
+ exit
+ }
+ if
+ /StartData/typecheck ct_raise
+ }
+ loop
+ cid_BYTE_COUNT ct_CID_STR_SIZE le
+ {
+ 2 copy cid_BYTE_COUNT string exch exec
+ pop
+ 1 array dup
+ 3 -1 roll
+ 0 exch put
+ }
+ {
+ cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi
+ dup array exch 2 sub 0 exch 1 exch
+ {
+ 2 copy
+ 5 index
+ ct_CID_STR_SIZE
+ string
+ 6 index exec
+ pop
+ put
+ pop
+ }
+ for
+ 2 index
+ cid_BYTE_COUNT ct_CID_STR_SIZE mod string
+ 3 index exec
+ pop
+ 1 index exch
+ 1 index length 1 sub
+ exch put
+ }
+ ifelse
+ cid_CIDFONT exch/GlyphData exch put
+ 2 index null eq
+ {
+ pop pop pop
+ }
+ {
+ pop/readstring load
+ 1 string exch
+ {
+ 3 copy exec
+ pop
+ dup length 0 eq
+ {
+ pop pop pop pop pop
+ true exit
+ }
+ if
+ 4 index
+ eq
+ {
+ pop pop pop pop
+ false exit
+ }
+ if
+ }
+ loop
+ pop
+ }
+ ifelse
+ }bind def
+ /StartData
+ {
+ mark
+ {
+ currentdict
+ dup/FDArray get 0 get/FontMatrix get
+ 0 get 0.001 eq
+ {
+ dup/CDevProc known not
+ {
+ /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known
+ {get}
+ {
+ pop pop
+ {pop pop pop pop pop 0 -1000 7 index 2 div 880}
+ }
+ ifelse
+ def
+ }
+ if
+ }
+ {
+ /CDevProc
+ {
+ pop pop pop pop pop
+ 0
+ 1 cid_temp/cid_CIDFONT get
+ /FDArray get 0 get
+ /FontMatrix get 0 get div
+ 7 index 2 div
+ 1 index 0.88 mul
+ }def
+ }
+ ifelse
+ /cid_temp 15 dict def
+ cid_temp
+ begin
+ /cid_CIDFONT exch def
+ 3 copy pop
+ dup/cid_BYTE_COUNT exch def 0 gt
+ {
+ ct_cidfont_stream_init
+ FDArray
+ {
+ /Private get
+ dup/SubrMapOffset known
+ {
+ begin
+ /Subrs SubrCount array def
+ Subrs
+ SubrMapOffset
+ SubrCount
+ SDBytes
+ ct_Level2?
+ {
+ currentdict dup/SubrMapOffset undef
+ dup/SubrCount undef
+ /SDBytes undef
+ }
+ if
+ end
+ /cid_SD_BYTES exch def
+ /cid_SUBR_COUNT exch def
+ /cid_SUBR_MAP_OFFSET exch def
+ /cid_SUBRS exch def
+ cid_SUBR_COUNT 0 gt
+ {
+ GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval
+ 0 cid_SD_BYTES ct_cvnsi
+ 0 1 cid_SUBR_COUNT 1 sub
+ {
+ exch 1 index
+ 1 add
+ cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add
+ GlyphData exch cid_SD_BYTES ct_GetInterval
+ 0 cid_SD_BYTES ct_cvnsi
+ cid_SUBRS 4 2 roll
+ GlyphData exch
+ 4 index
+ 1 index
+ sub
+ ct_GetInterval
+ dup length string copy put
+ }
+ for
+ pop
+ }
+ if
+ }
+ {pop}
+ ifelse
+ }
+ forall
+ }
+ if
+ cleartomark pop pop
+ end
+ CIDFontName currentdict/CIDFont defineresource pop
+ end end
+ }
+ stopped
+ {cleartomark/StartData ct_reraise}
+ if
+ }bind def
+ currentdict
+ end def
+ /ct_saveCIDInit
+ {
+ /CIDInit/ProcSet ct_resourcestatus
+ {true}
+ {/CIDInitC/ProcSet ct_resourcestatus}
+ ifelse
+ {
+ pop pop
+ /CIDInit/ProcSet findresource
+ ct_UseNativeCapability?
+ {pop null}
+ {/CIDInit ct_CIDInit/ProcSet defineresource pop}
+ ifelse
+ }
+ {/CIDInit ct_CIDInit/ProcSet defineresource pop null}
+ ifelse
+ ct_Vars exch/ct_oldCIDInit exch put
+ }bind def
+ /ct_restoreCIDInit
+ {
+ ct_Vars/ct_oldCIDInit get dup null ne
+ {/CIDInit exch/ProcSet defineresource pop}
+ {pop}
+ ifelse
+ }bind def
+ /ct_BuildCharSetUp
+ {
+ 1 index
+ begin
+ CIDFont
+ begin
+ Adobe_CoolType_Utility/ct_BuildCharDict get
+ begin
+ /ct_dfCharCode exch def
+ /ct_dfDict exch def
+ CIDFirstByte ct_dfCharCode add
+ dup CIDCount ge
+ {pop 0}
+ if
+ /cid exch def
+ {
+ GlyphDirectory cid 2 copy known
+ {get}
+ {pop pop nullstring}
+ ifelse
+ dup length FDBytes sub 0 gt
+ {
+ dup
+ FDBytes 0 ne
+ {0 FDBytes ct_cvnsi}
+ {pop 0}
+ ifelse
+ /fdIndex exch def
+ dup length FDBytes sub FDBytes exch getinterval
+ /charstring exch def
+ exit
+ }
+ {
+ pop
+ cid 0 eq
+ {/charstring nullstring def exit}
+ if
+ /cid 0 def
+ }
+ ifelse
+ }
+ loop
+ }def
+ /ct_SetCacheDevice
+ {
+ 0 0 moveto
+ dup stringwidth
+ 3 -1 roll
+ true charpath
+ pathbbox
+ 0 -1000
+ 7 index 2 div 880
+ setcachedevice2
+ 0 0 moveto
+ }def
+ /ct_CloneSetCacheProc
+ {
+ 1 eq
+ {
+ stringwidth
+ pop -2 div -880
+ 0 -1000 setcharwidth
+ moveto
+ }
+ {
+ usewidths?
+ {
+ currentfont/Widths get cid
+ 2 copy known
+ {get exch pop aload pop}
+ {pop pop stringwidth}
+ ifelse
+ }
+ {stringwidth}
+ ifelse
+ setcharwidth
+ 0 0 moveto
+ }
+ ifelse
+ }def
+ /ct_Type3ShowCharString
+ {
+ ct_FDDict fdIndex 2 copy known
+ {get}
+ {
+ currentglobal 3 1 roll
+ 1 index gcheck setglobal
+ ct_Type1FontTemplate dup maxlength dict copy
+ begin
+ FDArray fdIndex get
+ dup/FontMatrix 2 copy known
+ {get}
+ {pop pop ct_defaultFontMtx}
+ ifelse
+ /FontMatrix exch dup length array copy def
+ /Private get
+ /Private exch def
+ /Widths rootfont/Widths get def
+ /CharStrings 1 dict dup/.notdef
+ <d841272cf18f54fc13>dup length string copy put def
+ currentdict
+ end
+ /ct_Type1Font exch definefont
+ dup 5 1 roll put
+ setglobal
+ }
+ ifelse
+ dup/CharStrings get 1 index/Encoding get
+ ct_dfCharCode get charstring put
+ rootfont/WMode 2 copy known
+ {get}
+ {pop pop 0}
+ ifelse
+ exch
+ 1000 scalefont setfont
+ ct_str1 0 ct_dfCharCode put
+ ct_str1 exch ct_dfSetCacheProc
+ ct_SyntheticBold
+ {
+ currentpoint
+ ct_str1 show
+ newpath
+ moveto
+ ct_str1 true charpath
+ ct_StrokeWidth setlinewidth
+ stroke
+ }
+ {ct_str1 show}
+ ifelse
+ }def
+ /ct_Type4ShowCharString
+ {
+ ct_dfDict ct_dfCharCode charstring
+ FDArray fdIndex get
+ dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not
+ {ct_1000Mtx matrix concatmatrix concat}
+ {pop}
+ ifelse
+ /Private get
+ Adobe_CoolType_Utility/ct_Level2? get not
+ {
+ ct_dfDict/Private
+ 3 -1 roll
+ {put}
+ 1183615869 internaldict/superexec get exec
+ }
+ if
+ 1183615869 internaldict
+ Adobe_CoolType_Utility/ct_Level2? get
+ {1 index}
+ {3 index/Private get mark 6 1 roll}
+ ifelse
+ dup/RunInt known
+ {/RunInt get}
+ {pop/CCRun}
+ ifelse
+ get exec
+ Adobe_CoolType_Utility/ct_Level2? get not
+ {cleartomark}
+ if
+ }bind def
+ /ct_BuildCharIncremental
+ {
+ {
+ Adobe_CoolType_Utility/ct_MakeOCF get begin
+ ct_BuildCharSetUp
+ ct_ShowCharString
+ }
+ stopped
+ {stop}
+ if
+ end
+ end
+ end
+ end
+ }bind def
+ /BaseFontNameStr(BF00)def
+ /ct_Type1FontTemplate 14 dict
+ begin
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0]def
+ /FontBBox [-250 -250 1250 1250]def
+ /Encoding ct_cHexEncoding def
+ /PaintType 0 def
+ currentdict
+ end def
+ /BaseFontTemplate 11 dict
+ begin
+ /FontMatrix [0.001 0 0 0.001 0 0]def
+ /FontBBox [-250 -250 1250 1250]def
+ /Encoding ct_cHexEncoding def
+ /BuildChar/ct_BuildCharIncremental load def
+ ct_Clone?
+ {
+ /FontType 3 def
+ /ct_ShowCharString/ct_Type3ShowCharString load def
+ /ct_dfSetCacheProc/ct_CloneSetCacheProc load def
+ /ct_SyntheticBold false def
+ /ct_StrokeWidth 1 def
+ }
+ {
+ /FontType 4 def
+ /Private 1 dict dup/lenIV 4 put def
+ /CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def
+ /PaintType 0 def
+ /ct_ShowCharString/ct_Type4ShowCharString load def
+ }
+ ifelse
+ /ct_str1 1 string def
+ currentdict
+ end def
+ /BaseFontDictSize BaseFontTemplate length 5 add def
+ /ct_matrixeq
+ {
+ true 0 1 5
+ {
+ dup 4 index exch get exch 3 index exch get eq and
+ dup not
+ {exit}
+ if
+ }
+ for
+ exch pop exch pop
+ }bind def
+ /ct_makeocf
+ {
+ 15 dict
+ begin
+ exch/WMode exch def
+ exch/FontName exch def
+ /FontType 0 def
+ /FMapType 2 def
+ dup/FontMatrix known
+ {dup/FontMatrix get/FontMatrix exch def}
+ {/FontMatrix matrix def}
+ ifelse
+ /bfCount 1 index/CIDCount get 256 idiv 1 add
+ dup 256 gt{pop 256}if def
+ /Encoding
+ 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for
+ bfCount 1 255{2 copy bfCount put pop}for
+ def
+ /FDepVector bfCount dup 256 lt{1 add}if array def
+ BaseFontTemplate BaseFontDictSize dict copy
+ begin
+ /CIDFont exch def
+ CIDFont/FontBBox known
+ {CIDFont/FontBBox get/FontBBox exch def}
+ if
+ CIDFont/CDevProc known
+ {CIDFont/CDevProc get/CDevProc exch def}
+ if
+ currentdict
+ end
+ BaseFontNameStr 3(0)putinterval
+ 0 1 bfCount dup 256 eq{1 sub}if
+ {
+ FDepVector exch
+ 2 index BaseFontDictSize dict copy
+ begin
+ dup/CIDFirstByte exch 256 mul def
+ FontType 3 eq
+ {/ct_FDDict 2 dict def}
+ if
+ currentdict
+ end
+ 1 index 16
+ BaseFontNameStr 2 2 getinterval cvrs pop
+ BaseFontNameStr exch definefont
+ put
+ }
+ for
+ ct_Clone?
+ {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def}
+ if
+ FontName
+ currentdict
+ end
+ definefont
+ ct_Clone?
+ {
+ gsave
+ dup 1000 scalefont setfont
+ ct_BuildCharDict
+ begin
+ /usewidths? false def
+ currentfont/Widths get
+ begin
+ exch/CIDFont get/GlyphDirectory get
+ {
+ pop
+ dup charcode exch 1 index 0 2 index 256 idiv put
+ 1 index exch 1 exch 256 mod put
+ stringwidth 2 array astore def
+ }
+ forall
+ end
+ /usewidths? true def
+ end
+ grestore
+ }
+ {exch pop}
+ ifelse
+ }bind def
+ currentglobal true setglobal
+ /ct_ComposeFont
+ {
+ ct_UseNativeCapability?
+ {
+ 2 index/CMap ct_resourcestatus
+ {pop pop exch pop}
+ {
+ /CIDInit/ProcSet findresource
+ begin
+ 12 dict
+ begin
+ begincmap
+ /CMapName 3 index def
+ /CMapVersion 1.000 def
+ /CMapType 1 def
+ exch/WMode exch def
+ /CIDSystemInfo 3 dict dup
+ begin
+ /Registry(Adobe)def
+ /Ordering
+ CMapName ct_mkocfStr100 cvs
+ (Adobe-)search
+ {
+ pop pop
+ (-)search
+ {
+ dup length string copy
+ exch pop exch pop
+ }
+ {pop(Identity)}
+ ifelse
+ }
+ {pop (Identity)}
+ ifelse
+ def
+ /Supplement 0 def
+ end def
+ 1 begincodespacerange
+ <0000><FFFF>
+ endcodespacerange
+ 1 begincidrange
+ <0000><FFFF>0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ }
+ ifelse
+ composefont
+ }
+ {
+ 3 2 roll pop
+ 0 get/CIDFont findresource
+ ct_makeocf
+ }
+ ifelse
+ }bind def
+ setglobal
+ /ct_MakeIdentity
+ {
+ ct_UseNativeCapability?
+ {
+ 1 index/CMap ct_resourcestatus
+ {pop pop}
+ {
+ /CIDInit/ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /CMapName 2 index def
+ /CMapVersion 1.000 def
+ /CMapType 1 def
+ /CIDSystemInfo 3 dict dup
+ begin
+ /Registry(Adobe)def
+ /Ordering
+ CMapName ct_mkocfStr100 cvs
+ (Adobe-)search
+ {
+ pop pop
+ (-)search
+ {dup length string copy exch pop exch pop}
+ {pop(Identity)}
+ ifelse
+ }
+ {pop(Identity)}
+ ifelse
+ def
+ /Supplement 0 def
+ end def
+ 1 begincodespacerange
+ <0000><FFFF>
+ endcodespacerange
+ 1 begincidrange
+ <0000><FFFF>0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ }
+ ifelse
+ composefont
+ }
+ {
+ exch pop
+ 0 get/CIDFont findresource
+ ct_makeocf
+ }
+ ifelse
+ }bind def
+ currentdict readonly pop
+ end
+ end
+%%EndResource
+setglobal
+%%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0
+%%Copyright: Copyright 1987-2004 Adobe Systems Incorporated.
+%%Version: 1.0 0
+userdict/ct_T42Dict 15 dict put
+ct_T42Dict begin
+/Is2015?
+{
+ version
+ cvi
+ 2015
+ ge
+}bind def
+/AllocGlyphStorage
+{
+ Is2015?
+ {
+ pop
+ }
+ {
+ {string}forall
+ }ifelse
+}bind def
+/Type42DictBegin
+{
+25 dict begin
+ /FontName exch def
+ /CharStrings 256 dict
+begin
+ /.notdef 0 def
+ currentdict
+end def
+ /Encoding exch def
+ /PaintType 0 def
+ /FontType 42 def
+ /FontMatrix[1 0 0 1 0 0]def
+ 4 array astore cvx/FontBBox exch def
+ /sfnts
+}bind def
+/Type42DictEnd
+{
+ currentdict dup/FontName get exch definefont end
+ct_T42Dict exch
+dup/FontName get exch put
+}bind def
+/RD{string currentfile exch readstring pop}executeonly def
+/PrepFor2015
+{
+Is2015?
+{
+ /GlyphDirectory
+ 16
+ dict def
+ sfnts 0 get
+ dup
+ 2 index
+ (glyx)
+ putinterval
+ 2 index
+ (locx)
+ putinterval
+ pop
+ pop
+}
+{
+ pop
+ pop
+}ifelse
+}bind def
+/AddT42Char
+{
+Is2015?
+{
+ /GlyphDirectory get
+ begin
+ def
+ end
+ pop
+ pop
+}
+{
+ /sfnts get
+ 4 index
+ get
+ 3 index
+ 2 index
+ putinterval
+ pop
+ pop
+ pop
+ pop
+}ifelse
+}bind def
+/T0AddT42Mtx2
+{
+/CIDFont findresource/Metrics2 get begin def end
+}bind def
+end
+%%EndResource
+currentglobal true setglobal
+%%BeginFile: MMFauxFont.prc
+%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated.
+%%All Rights Reserved.
+userdict /ct_EuroDict 10 dict put
+ct_EuroDict begin
+/ct_CopyFont
+{
+ { 1 index /FID ne {def} {pop pop} ifelse} forall
+} def
+/ct_GetGlyphOutline
+{
+ gsave
+ initmatrix newpath
+ exch findfont dup
+ length 1 add dict
+ begin
+ ct_CopyFont
+ /Encoding Encoding dup length array copy
+ dup
+ 4 -1 roll
+ 0 exch put
+ def
+ currentdict
+ end
+ /ct_EuroFont exch definefont
+ 1000 scalefont setfont
+ 0 0 moveto
+ [
+ <00> stringwidth
+ <00> false charpath
+ pathbbox
+ [
+ {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall
+ grestore
+ counttomark 8 add
+}
+def
+/ct_MakeGlyphProc
+{
+ ] cvx
+ /ct_PSBuildGlyph cvx
+ ] cvx
+} def
+/ct_PSBuildGlyph
+{
+ gsave
+ 8 -1 roll pop
+ 7 1 roll
+ 6 -2 roll ct_FontMatrix transform 6 2 roll
+ 4 -2 roll ct_FontMatrix transform 4 2 roll
+ ct_FontMatrix transform
+ currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
+ dup 9 1 roll
+ {
+ currentdict /StrokeWidth 2 copy known
+ {
+ get 2 div
+ 0 ct_FontMatrix dtransform pop
+ 5 1 roll
+ 4 -1 roll 4 index sub
+ 4 1 roll
+ 3 -1 roll 4 index sub
+ 3 1 roll
+ exch 4 index add exch
+ 4 index add
+ 5 -1 roll pop
+ }
+ {
+ pop pop
+ }
+ ifelse
+ }
+ if
+ setcachedevice
+ ct_FontMatrix concat
+ ct_PSPathOps begin
+ exec
+ end
+ {
+ currentdict /StrokeWidth 2 copy known
+ { get }
+ { pop pop 0 }
+ ifelse
+ setlinewidth stroke
+ }
+ {
+ fill
+ }
+ ifelse
+ grestore
+} def
+/ct_PSPathOps 4 dict dup begin
+ /m {moveto} def
+ /l {lineto} def
+ /c {curveto} def
+ /cp {closepath} def
+end
+def
+/ct_matrix1000 [1000 0 0 1000 0 0] def
+/ct_AddGlyphProc
+{
+ 2 index findfont dup length 4 add dict
+ begin
+ ct_CopyFont
+ /CharStrings CharStrings dup length 1 add dict copy
+ begin
+ 3 1 roll def
+ currentdict
+ end
+ def
+ /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def
+ /ct_PSBuildGlyph /ct_PSBuildGlyph load def
+ /ct_PSPathOps /ct_PSPathOps load def
+ currentdict
+ end
+ definefont pop
+}
+def
+systemdict /languagelevel known
+{
+ /ct_AddGlyphToPrinterFont {
+ 2 copy
+ ct_GetGlyphOutline 3 add -1 roll restore
+ ct_MakeGlyphProc
+ ct_AddGlyphProc
+ } def
+}
+{
+ /ct_AddGlyphToPrinterFont {
+ pop pop restore
+ Adobe_CTFauxDict /$$$FONTNAME get
+ /Euro
+ Adobe_CTFauxDict /$$$SUBSTITUTEBASE get
+ ct_EuroDict exch get
+ ct_AddGlyphProc
+ } def
+} ifelse
+/AdobeSansMM
+{
+556 0 24 -19 541 703
+ {
+ 541 628 m
+ 510 669 442 703 354 703 c
+ 201 703 117 607 101 444 c
+ 50 444 l
+ 25 372 l
+ 97 372 l
+ 97 301 l
+ 49 301 l
+ 24 229 l
+ 103 229 l
+ 124 67 209 -19 350 -19 c
+ 435 -19 501 25 509 32 c
+ 509 131 l
+ 492 105 417 60 343 60 c
+ 267 60 204 127 197 229 c
+ 406 229 l
+ 430 301 l
+ 191 301 l
+ 191 372 l
+ 455 372 l
+ 479 444 l
+ 194 444 l
+ 201 531 245 624 348 624 c
+ 433 624 484 583 509 534 c
+ cp
+ 556 0 m
+ }
+ct_PSBuildGlyph
+} def
+/AdobeSerifMM
+{
+500 0 10 -12 484 692
+ {
+ 347 298 m
+ 171 298 l
+ 170 310 170 322 170 335 c
+ 170 362 l
+ 362 362 l
+ 374 403 l
+ 172 403 l
+ 184 580 244 642 308 642 c
+ 380 642 434 574 457 457 c
+ 481 462 l
+ 474 691 l
+ 449 691 l
+ 433 670 429 657 410 657 c
+ 394 657 360 692 299 692 c
+ 204 692 94 604 73 403 c
+ 22 403 l
+ 10 362 l
+ 70 362 l
+ 69 352 69 341 69 330 c
+ 69 319 69 308 70 298 c
+ 22 298 l
+ 10 257 l
+ 73 257 l
+ 97 57 216 -12 295 -12 c
+ 364 -12 427 25 484 123 c
+ 458 142 l
+ 425 101 384 37 316 37 c
+ 256 37 189 84 173 257 c
+ 335 257 l
+ cp
+ 500 0 m
+ }
+ct_PSBuildGlyph
+} def
+end
+%%EndFile
+setglobal
+Adobe_CoolType_Core begin /$None SetSubstituteStrategy end
+%%BeginResource: procset Adobe_AGM_Image 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{
+ currentpacking
+ true setpacking
+}if
+userdict/Adobe_AGM_Image 71 dict dup begin put
+/Adobe_AGM_Image_Id/Adobe_AGM_Image_1.0_0 def
+/nd{
+ null def
+}bind def
+/AGMIMG_&image nd
+/AGMIMG_&colorimage nd
+/AGMIMG_&imagemask nd
+/AGMIMG_mbuf()def
+/AGMIMG_ybuf()def
+/AGMIMG_kbuf()def
+/AGMIMG_c 0 def
+/AGMIMG_m 0 def
+/AGMIMG_y 0 def
+/AGMIMG_k 0 def
+/AGMIMG_tmp nd
+/AGMIMG_imagestring0 nd
+/AGMIMG_imagestring1 nd
+/AGMIMG_imagestring2 nd
+/AGMIMG_imagestring3 nd
+/AGMIMG_imagestring4 nd
+/AGMIMG_imagestring5 nd
+/AGMIMG_cnt nd
+/AGMIMG_fsave nd
+/AGMIMG_colorAry nd
+/AGMIMG_override nd
+/AGMIMG_name nd
+/AGMIMG_maskSource nd
+/AGMIMG_flushfilters nd
+/invert_image_samples nd
+/knockout_image_samples nd
+/img nd
+/sepimg nd
+/devnimg nd
+/idximg nd
+/ds
+{
+ Adobe_AGM_Core begin
+ Adobe_AGM_Image begin
+ /AGMIMG_&image systemdict/image get def
+ /AGMIMG_&imagemask systemdict/imagemask get def
+ /colorimage where{
+ pop
+ /AGMIMG_&colorimage/colorimage ldf
+ }if
+ end
+ end
+}def
+/ps
+{
+ Adobe_AGM_Image begin
+ /AGMIMG_ccimage_exists{/customcolorimage where
+ {
+ pop
+ /Adobe_AGM_OnHost_Seps where
+ {
+ pop false
+ }{
+ /Adobe_AGM_InRip_Seps where
+ {
+ pop false
+ }{
+ true
+ }ifelse
+ }ifelse
+ }{
+ false
+ }ifelse
+ }bdf
+ level2{
+ /invert_image_samples
+ {
+ Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
+ /Decode[Decode 1 get Decode 0 get]def
+ }def
+ /knockout_image_samples
+ {
+ Operator/imagemask ne{
+ /Decode[1 1]def
+ }if
+ }def
+ }{
+ /invert_image_samples
+ {
+ {1 exch sub}currenttransfer addprocs settransfer
+ }def
+ /knockout_image_samples
+ {
+ {pop 1}currenttransfer addprocs settransfer
+ }def
+ }ifelse
+ /img/imageormask ldf
+ /sepimg/sep_imageormask ldf
+ /devnimg/devn_imageormask ldf
+ /idximg/indexed_imageormask ldf
+ /_ctype 7 def
+ currentdict{
+ dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
+ bind
+ }if
+ def
+ }forall
+}def
+/pt
+{
+ end
+}def
+/dt
+{
+}def
+/AGMIMG_flushfilters
+{
+ dup type/arraytype ne
+ {1 array astore}if
+ dup 0 get currentfile ne
+ {dup 0 get flushfile}if
+ {
+ dup type/filetype eq
+ {
+ dup status 1 index currentfile ne and
+ {closefile}
+ {pop}
+ ifelse
+ }{pop}ifelse
+ }forall
+}def
+/AGMIMG_init_common
+{
+ currentdict/T known{/ImageType/T ldf currentdict/T undef}if
+ currentdict/W known{/Width/W ldf currentdict/W undef}if
+ currentdict/H known{/Height/H ldf currentdict/H undef}if
+ currentdict/M known{/ImageMatrix/M ldf currentdict/M undef}if
+ currentdict/BC known{/BitsPerComponent/BC ldf currentdict/BC undef}if
+ currentdict/D known{/Decode/D ldf currentdict/D undef}if
+ currentdict/DS known{/DataSource/DS ldf currentdict/DS undef}if
+ currentdict/O known{
+ /Operator/O load 1 eq{
+ /imagemask
+ }{
+ /O load 2 eq{
+ /image
+ }{
+ /colorimage
+ }ifelse
+ }ifelse
+ def
+ currentdict/O undef
+ }if
+ currentdict/HSCI known{/HostSepColorImage/HSCI ldf currentdict/HSCI undef}if
+ currentdict/MD known{/MultipleDataSources/MD ldf currentdict/MD undef}if
+ currentdict/I known{/Interpolate/I ldf currentdict/I undef}if
+ currentdict/SI known{/SkipImageProc/SI ldf currentdict/SI undef}if
+ /DataSource load xcheck not{
+ DataSource type/arraytype eq{
+ DataSource 0 get type/filetype eq{
+ /_Filters DataSource def
+ currentdict/MultipleDataSources known not{
+ /DataSource DataSource dup length 1 sub get def
+ }if
+ }if
+ }if
+ currentdict/MultipleDataSources known not{
+ /MultipleDataSources DataSource type/arraytype eq{
+ DataSource length 1 gt
+ }
+ {false}ifelse def
+ }if
+ }if
+ /NComponents Decode length 2 div def
+ currentdict/SkipImageProc known not{/SkipImageProc{false}def}if
+}bdf
+/imageormask_sys
+{
+ begin
+ AGMIMG_init_common
+ save mark
+ level2{
+ currentdict
+ Operator/imagemask eq{
+ AGMIMG_&imagemask
+ }{
+ use_mask{
+ process_mask AGMIMG_&image
+ }{
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ }{
+ Width Height
+ Operator/imagemask eq{
+ Decode 0 get 1 eq Decode 1 get 0 eq and
+ ImageMatrix/DataSource load
+ AGMIMG_&imagemask
+ }{
+ BitsPerComponent ImageMatrix/DataSource load
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ cleartomark restore
+ end
+}def
+/overprint_plate
+{
+ currentoverprint{
+ 0 get dup type/nametype eq{
+ dup/DeviceGray eq{
+ pop AGMCORE_black_plate not
+ }{
+ /DeviceCMYK eq{
+ AGMCORE_is_cmyk_sep not
+ }if
+ }ifelse
+ }{
+ false exch
+ {
+ AGMOHS_sepink eq or
+ }forall
+ not
+ }ifelse
+ }{
+ pop false
+ }ifelse
+}def
+/process_mask
+{
+ level3{
+ dup begin
+ /ImageType 1 def
+ end
+ 4 dict begin
+ /DataDict exch def
+ /ImageType 3 def
+ /InterleaveType 3 def
+ /MaskDict 9 dict begin
+ /ImageType 1 def
+ /Width DataDict dup/MaskWidth known{/MaskWidth}{/Width}ifelse get def
+ /Height DataDict dup/MaskHeight known{/MaskHeight}{/Height}ifelse get def
+ /ImageMatrix[Width 0 0 Height neg 0 Height]def
+ /NComponents 1 def
+ /BitsPerComponent 1 def
+ /Decode DataDict dup/MaskD known{/MaskD}{[1 0]}ifelse get def
+ /DataSource Adobe_AGM_Core/AGMIMG_maskSource get def
+ currentdict end def
+ currentdict end
+ }if
+}def
+/use_mask
+{
+ dup/Mask known {dup/Mask get}{false}ifelse
+}def
+/imageormask
+{
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }
+ {
+ save mark
+ level2 AGMCORE_host_sep not and{
+ currentdict
+ Operator/imagemask eq DeviceN_PS2 not and{
+ imagemask
+ }{
+ AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get/DeviceGray eq and{
+ [/Separation/Black/DeviceGray{}]setcolorspace
+ /Decode[Decode 1 get Decode 0 get]def
+ }if
+ use_mask{
+ process_mask image
+ }{
+ DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and
+ {
+ Names convert_to_process not{
+ 2 dict begin
+ /imageDict xdf
+ /names_index 0 def
+ gsave
+ imageDict write_image_file{
+ Names{
+ dup(None)ne{
+ [/Separation 3 -1 roll/DeviceGray{1 exch sub}]setcolorspace
+ Operator imageDict read_image_file
+ names_index 0 eq{true setoverprint}if
+ /names_index names_index 1 add def
+ }{
+ pop
+ }ifelse
+ }forall
+ close_image_file
+ }if
+ grestore
+ end
+ }{
+ Operator/imagemask eq{
+ imagemask
+ }{
+ image
+ }ifelse
+ }ifelse
+ }{
+ Operator/imagemask eq{
+ imagemask
+ }{
+ image
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ Width Height
+ Operator/imagemask eq{
+ Decode 0 get 1 eq Decode 1 get 0 eq and
+ ImageMatrix/DataSource load
+ /Adobe_AGM_OnHost_Seps where{
+ pop imagemask
+ }{
+ currentgray 1 ne{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not{
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentdict ignoreimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ BitsPerComponent ImageMatrix
+ MultipleDataSources{
+ 0 1 NComponents 1 sub{
+ DataSource exch get
+ }for
+ }{
+ /DataSource load
+ }ifelse
+ Operator/colorimage eq{
+ AGMCORE_host_sep{
+ MultipleDataSources level2 or NComponents 4 eq and{
+ AGMCORE_is_cmyk_sep{
+ MultipleDataSources{
+ /DataSource DataSource 0 get xcheck
+ {
+ [
+ DataSource 0 get/exec cvx
+ DataSource 1 get/exec cvx
+ DataSource 2 get/exec cvx
+ DataSource 3 get/exec cvx
+ /AGMCORE_get_ink_data cvx
+ ]cvx
+ }{
+ DataSource aload pop AGMCORE_get_ink_data
+ }ifelse def
+ }{
+ /DataSource
+ Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
+ /DataSource load
+ filter_cmyk 0()/SubFileDecode filter def
+ }ifelse
+ /Decode[Decode 0 get Decode 1 get]def
+ /MultipleDataSources false def
+ /NComponents 1 def
+ /Operator/image def
+ invert_image_samples
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentoverprint not Operator/imagemask eq and{
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentdict ignoreimagedata
+ }ifelse
+ }ifelse
+ }{
+ MultipleDataSources NComponents AGMIMG_&colorimage
+ }ifelse
+ }{
+ true NComponents colorimage
+ }ifelse
+ }{
+ Operator/image eq{
+ AGMCORE_host_sep{
+ /DoImage true def
+ currentdict/HostSepColorImage known{HostSepColorImage not}{false}ifelse
+ {
+ AGMCORE_black_plate not Operator/imagemask ne and{
+ /DoImage false def
+ currentdict ignoreimagedata
+ }if
+ }if
+ 1 AGMCORE_&setgray
+ DoImage
+ {currentdict imageormask_sys}if
+ }{
+ use_mask{
+ process_mask image
+ }{
+ image
+ }ifelse
+ }ifelse
+ }{
+ Operator/knockout eq{
+ pop pop pop pop pop
+ currentcolorspace overprint_plate not{
+ knockout_unitsq
+ }if
+ }if
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+}def
+/sep_imageormask
+{
+ /sep_colorspace_dict AGMCORE_gget begin
+ CSA map_csa
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }{
+ save mark
+ AGMCORE_avoid_L2_sep_space{
+ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
+ }if
+ AGMIMG_ccimage_exists
+ MappedCSA 0 get/DeviceCMYK eq and
+ currentdict/Components known and
+ Name()ne and
+ Name(All)ne and
+ Operator/image eq and
+ AGMCORE_producing_seps not and
+ level2 not and
+ {
+ Width Height BitsPerComponent ImageMatrix
+ [
+ /DataSource load/exec cvx
+ {
+ 0 1 2 index length 1 sub{
+ 1 index exch
+ 2 copy get 255 xor put
+ }for
+ }/exec cvx
+ ]cvx bind
+ MappedCSA 0 get/DeviceCMYK eq{
+ Components aload pop
+ }{
+ 0 0 0 Components aload pop 1 exch sub
+ }ifelse
+ Name findcmykcustomcolor
+ customcolorimage
+ }{
+ AGMCORE_producing_seps not{
+ level2{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne AGMCORE_avoid_L2_sep_space not and currentcolorspace 0 get/Separation ne and{
+ [/Separation Name MappedCSA sep_proc_name exch dup 0 get 15 string cvs(/Device)anchorsearch{pop pop 0 get}{pop}ifelse exch load]setcolorspace_opt
+ /sep_tint AGMCORE_gget setcolor
+ }if
+ currentdict imageormask
+ }{
+ currentdict
+ Operator/imagemask eq{
+ imageormask
+ }{
+ sep_imageormask_lev1
+ }ifelse
+ }ifelse
+ }{
+ AGMCORE_host_sep{
+ Operator/knockout eq{
+ currentdict/ImageMatrix get concat
+ knockout_unitsq
+ }{
+ currentgray 1 ne{
+ AGMCORE_is_cmyk_sep Name(All)ne and{
+ level2{
+ Name AGMCORE_IsSeparationAProcessColor
+ {
+ Operator/imagemask eq{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ /sep_tint AGMCORE_gget 1 exch sub AGMCORE_&setcolor
+ }if
+ }{
+ invert_image_samples
+ }ifelse
+ }{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ [/Separation Name[/DeviceGray]
+ {
+ sep_colorspace_proc AGMCORE_get_ink_data
+ 1 exch sub
+ }bind
+ ]AGMCORE_&setcolorspace
+ /sep_tint AGMCORE_gget AGMCORE_&setcolor
+ }if
+ }ifelse
+ currentdict imageormask_sys
+ }{
+ currentdict
+ Operator/imagemask eq{
+ imageormask_sys
+ }{
+ sep_image_lev1_sep
+ }ifelse
+ }ifelse
+ }{
+ Operator/imagemask ne{
+ invert_image_samples
+ }if
+ currentdict imageormask_sys
+ }ifelse
+ }{
+ currentoverprint not Name(All)eq or Operator/imagemask eq and{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not
+ {
+ gsave
+ knockout_unitsq
+ grestore
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ currentcolorspace 0 get/Separation ne{
+ [/Separation Name MappedCSA sep_proc_name exch 0 get exch load]setcolorspace_opt
+ /sep_tint AGMCORE_gget setcolor
+ }if
+ }if
+ currentoverprint
+ MappedCSA 0 get/DeviceCMYK eq and
+ Name AGMCORE_IsSeparationAProcessColor not and
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse
+ Name(All)ne and{
+ imageormask_l2_overprint
+ }{
+ currentdict imageormask
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+ end
+}def
+/colorSpaceElemCnt
+{
+ mark currentcolor counttomark dup 2 add 1 roll cleartomark
+}bdf
+/devn_sep_datasource
+{
+ 1 dict begin
+ /dataSource xdf
+ [
+ 0 1 dataSource length 1 sub{
+ dup currentdict/dataSource get/exch cvx/get cvx/exec cvx
+ /exch cvx names_index/ne cvx[/pop cvx]cvx/if cvx
+ }for
+ ]cvx bind
+ end
+}bdf
+/devn_alt_datasource
+{
+ 11 dict begin
+ /convProc xdf
+ /origcolorSpaceElemCnt xdf
+ /origMultipleDataSources xdf
+ /origBitsPerComponent xdf
+ /origDecode xdf
+ /origDataSource xdf
+ /dsCnt origMultipleDataSources{origDataSource length}{1}ifelse def
+ /DataSource origMultipleDataSources
+ {
+ [
+ BitsPerComponent 8 idiv origDecode length 2 idiv mul string
+ 0 1 origDecode length 2 idiv 1 sub
+ {
+ dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch
+ origDataSource exch get 0()/SubFileDecode filter
+ BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx
+ }for
+ ]bind cvx
+ }{origDataSource}ifelse 0()/SubFileDecode filter def
+ [
+ origcolorSpaceElemCnt string
+ 0 2 origDecode length 2 sub
+ {
+ dup origDecode exch get dup 3 -1 roll 1 add origDecode exch get exch sub 2 BitsPerComponent exp 1 sub div
+ 1 BitsPerComponent 8 idiv{DataSource/read cvx/not cvx{0}/if cvx/mul cvx}repeat/mul cvx/add cvx
+ }for
+ /convProc load/exec cvx
+ origcolorSpaceElemCnt 1 sub -1 0
+ {
+ /dup cvx 2/add cvx/index cvx
+ 3 1/roll cvx/exch cvx 255/mul cvx/cvi cvx/put cvx
+ }for
+ ]bind cvx 0()/SubFileDecode filter
+ end
+}bdf
+/devn_imageormask
+{
+ /devicen_colorspace_dict AGMCORE_gget begin
+ CSA map_csa
+ 2 dict begin
+ dup
+ /srcDataStrs[3 -1 roll begin
+ AGMIMG_init_common
+ currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
+ {
+ Width Decode length 2 div mul cvi
+ {
+ dup 65535 gt{1 add 2 div cvi}{exit}ifelse
+ }loop
+ string
+ }repeat
+ end]def
+ /dstDataStr srcDataStrs 0 get length string def
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }{
+ save mark
+ AGMCORE_producing_seps not{
+ level3 not{
+ Operator/imagemask ne{
+ /DataSource[[
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def
+ /MultipleDataSources true def
+ /Decode colorSpaceElemCnt[exch{0 1}repeat]def
+ }if
+ }if
+ currentdict imageormask
+ }{
+ AGMCORE_host_sep{
+ Names convert_to_process{
+ CSA get_csa_by_name 0 get/DeviceCMYK eq{
+ /DataSource
+ Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource
+ filter_cmyk 0()/SubFileDecode filter def
+ /MultipleDataSources false def
+ /Decode[1 0]def
+ /DeviceGray setcolorspace
+ currentdict imageormask_sys
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate{
+ /DataSource
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ CSA get_csa_by_name 0 get/DeviceRGB eq{3}{1}ifelse/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource
+ /MultipleDataSources false def
+ /Decode colorSpaceElemCnt[exch{0 1}repeat]def
+ currentdict imageormask_sys
+ }{
+ gsave
+ knockout_unitsq
+ grestore
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }
+ {
+ /devicen_colorspace_dict AGMCORE_gget/names_index known{
+ Operator/imagemask ne{
+ MultipleDataSources{
+ /DataSource[DataSource devn_sep_datasource/exec cvx]cvx def
+ /MultipleDataSources false def
+ }{
+ /DataSource/DataSource load dstDataStr srcDataStrs 0 get filter_devn def
+ }ifelse
+ invert_image_samples
+ }if
+ currentdict imageormask_sys
+ }{
+ currentoverprint not Operator/imagemask eq and{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not
+ {
+ gsave
+ knockout_unitsq
+ grestore
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ currentdict imageormask
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+ end
+ end
+}def
+/imageormask_l2_overprint
+{
+ currentdict
+ currentcmykcolor add add add 0 eq{
+ currentdict consumeimagedata
+ }{
+ level3{
+ currentcmykcolor
+ /AGMIMG_k xdf
+ /AGMIMG_y xdf
+ /AGMIMG_m xdf
+ /AGMIMG_c xdf
+ Operator/imagemask eq{
+ [/DeviceN[
+ AGMIMG_c 0 ne{/Cyan}if
+ AGMIMG_m 0 ne{/Magenta}if
+ AGMIMG_y 0 ne{/Yellow}if
+ AGMIMG_k 0 ne{/Black}if
+ ]/DeviceCMYK{}]setcolorspace
+ AGMIMG_c 0 ne{AGMIMG_c}if
+ AGMIMG_m 0 ne{AGMIMG_m}if
+ AGMIMG_y 0 ne{AGMIMG_y}if
+ AGMIMG_k 0 ne{AGMIMG_k}if
+ setcolor
+ }{
+ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
+ [/Indexed
+ [
+ /DeviceN[
+ AGMIMG_c 0 ne{/Cyan}if
+ AGMIMG_m 0 ne{/Magenta}if
+ AGMIMG_y 0 ne{/Yellow}if
+ AGMIMG_k 0 ne{/Black}if
+ ]
+ /DeviceCMYK{
+ AGMIMG_k 0 eq{0}if
+ AGMIMG_y 0 eq{0 exch}if
+ AGMIMG_m 0 eq{0 3 1 roll}if
+ AGMIMG_c 0 eq{0 4 1 roll}if
+ }
+ ]
+ 255
+ {
+ 255 div
+ mark exch
+ dup dup dup
+ AGMIMG_k 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_y 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_m 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_c 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ counttomark 1 add -1 roll pop
+ }
+ ]setcolorspace
+ }ifelse
+ imageormask_sys
+ }{
+ write_image_file{
+ currentcmykcolor
+ 0 ne{
+ [/Separation/Black/DeviceGray{}]setcolorspace
+ gsave
+ /Black
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 1 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Yellow/DeviceGray{}]setcolorspace
+ gsave
+ /Yellow
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 2 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Magenta/DeviceGray{}]setcolorspace
+ gsave
+ /Magenta
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 3 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Cyan/DeviceGray{}]setcolorspace
+ gsave
+ /Cyan
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ close_image_file
+ }{
+ imageormask
+ }ifelse
+ }ifelse
+ }ifelse
+}def
+/indexed_imageormask
+{
+ begin
+ AGMIMG_init_common
+ save mark
+ currentdict
+ AGMCORE_host_sep{
+ Operator/knockout eq{
+ /indexed_colorspace_dict AGMCORE_gget dup/CSA known{
+ /CSA get get_csa_by_name
+ }{
+ /Names get
+ }ifelse
+ overprint_plate not{
+ knockout_unitsq
+ }if
+ }{
+ Indexed_DeviceN{
+ /devicen_colorspace_dict AGMCORE_gget dup/names_index known exch/Names get convert_to_process or{
+ indexed_image_lev2_sep
+ }{
+ currentoverprint not{
+ knockout_unitsq
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }{
+ AGMCORE_is_cmyk_sep{
+ Operator/imagemask eq{
+ imageormask_sys
+ }{
+ level2{
+ indexed_image_lev2_sep
+ }{
+ indexed_image_lev1_sep
+ }ifelse
+ }ifelse
+ }{
+ currentoverprint not{
+ knockout_unitsq
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ level2{
+ Indexed_DeviceN{
+ /indexed_colorspace_dict AGMCORE_gget begin
+ }{
+ /indexed_colorspace_dict AGMCORE_gget dup null ne
+ {
+ begin
+ currentdict/CSDBase known{CSDBase/CSD get_res/MappedCSA get}{CSA}ifelse
+ get_csa_by_name 0 get/DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and
+ AGMCORE_in_rip_sep and{
+ [/Indexed[/DeviceN[/Cyan/Magenta/Yellow/Black]/DeviceCMYK{}]HiVal Lookup]
+ setcolorspace
+ }if
+ end
+ }
+ {pop}ifelse
+ }ifelse
+ imageormask
+ Indexed_DeviceN{
+ end
+ }if
+ }{
+ Operator/imagemask eq{
+ imageormask
+ }{
+ indexed_imageormask_lev1
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+}def
+/indexed_image_lev2_sep
+{
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ Indexed_DeviceN not{
+ currentcolorspace
+ dup 1/DeviceGray put
+ dup 3
+ currentcolorspace 2 get 1 add string
+ 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub
+ {
+ dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put
+ }for
+ put setcolorspace
+ }if
+ currentdict
+ Operator/imagemask eq{
+ AGMIMG_&imagemask
+ }{
+ use_mask{
+ process_mask AGMIMG_&image
+ }{
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ end end
+}def
+ /OPIimage
+ {
+ dup type/dicttype ne{
+ 10 dict begin
+ /DataSource xdf
+ /ImageMatrix xdf
+ /BitsPerComponent xdf
+ /Height xdf
+ /Width xdf
+ /ImageType 1 def
+ /Decode[0 1 def]
+ currentdict
+ end
+ }if
+ dup begin
+ /NComponents 1 cdndf
+ /MultipleDataSources false cdndf
+ /SkipImageProc{false}cdndf
+ /Decode[
+ 0
+ currentcolorspace 0 get/Indexed eq{
+ 2 BitsPerComponent exp 1 sub
+ }{
+ 1
+ }ifelse
+ ]cdndf
+ /Operator/image cdndf
+ end
+ /sep_colorspace_dict AGMCORE_gget null eq{
+ imageormask
+ }{
+ gsave
+ dup begin invert_image_samples end
+ sep_imageormask
+ grestore
+ }ifelse
+ }def
+/cachemask_level2
+{
+ 3 dict begin
+ /LZWEncode filter/WriteFilter xdf
+ /readBuffer 256 string def
+ /ReadFilter
+ currentfile
+ 0(%EndMask)/SubFileDecode filter
+ /ASCII85Decode filter
+ /RunLengthDecode filter
+ def
+ {
+ ReadFilter readBuffer readstring exch
+ WriteFilter exch writestring
+ not{exit}if
+ }loop
+ WriteFilter closefile
+ end
+}def
+/spot_alias
+{
+ /mapto_sep_imageormask
+ {
+ dup type/dicttype ne{
+ 12 dict begin
+ /ImageType 1 def
+ /DataSource xdf
+ /ImageMatrix xdf
+ /BitsPerComponent xdf
+ /Height xdf
+ /Width xdf
+ /MultipleDataSources false def
+ }{
+ begin
+ }ifelse
+ /Decode[/customcolor_tint AGMCORE_gget 0]def
+ /Operator/image def
+ /SkipImageProc{false}def
+ currentdict
+ end
+ sep_imageormask
+ }bdf
+ /customcolorimage
+ {
+ Adobe_AGM_Image/AGMIMG_colorAry xddf
+ /customcolor_tint AGMCORE_gget
+ <<
+ /Name AGMIMG_colorAry 4 get
+ /CSA[/DeviceCMYK]
+ /TintMethod/Subtractive
+ /TintProc null
+ /MappedCSA null
+ /NComponents 4
+ /Components[AGMIMG_colorAry aload pop pop]
+ >>
+ setsepcolorspace
+ mapto_sep_imageormask
+ }ndf
+ Adobe_AGM_Image/AGMIMG_&customcolorimage/customcolorimage load put
+ /customcolorimage
+ {
+ Adobe_AGM_Image/AGMIMG_override false put
+ current_spot_alias{dup 4 get map_alias}{false}ifelse
+ {
+ false set_spot_alias
+ /customcolor_tint AGMCORE_gget exch setsepcolorspace
+ pop
+ mapto_sep_imageormask
+ true set_spot_alias
+ }{
+ //Adobe_AGM_Image/AGMIMG_&customcolorimage get exec
+ }ifelse
+ }bdf
+}def
+/snap_to_device
+{
+ 6 dict begin
+ matrix currentmatrix
+ dup 0 get 0 eq 1 index 3 get 0 eq and
+ 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop
+ {
+ 1 1 dtransform 0 gt exch 0 gt/AGMIMG_xSign? exch def/AGMIMG_ySign? exch def
+ 0 0 transform
+ AGMIMG_ySign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
+ AGMIMG_xSign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
+ itransform/AGMIMG_llY exch def/AGMIMG_llX exch def
+ 1 1 transform
+ AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
+ AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
+ itransform/AGMIMG_urY exch def/AGMIMG_urX exch def
+ [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat
+ }{
+ }ifelse
+ end
+}def
+level2 not{
+ /colorbuf
+ {
+ 0 1 2 index length 1 sub{
+ dup 2 index exch get
+ 255 exch sub
+ 2 index
+ 3 1 roll
+ put
+ }for
+ }def
+ /tint_image_to_color
+ {
+ begin
+ Width Height BitsPerComponent ImageMatrix
+ /DataSource load
+ end
+ Adobe_AGM_Image begin
+ /AGMIMG_mbuf 0 string def
+ /AGMIMG_ybuf 0 string def
+ /AGMIMG_kbuf 0 string def
+ {
+ colorbuf dup length AGMIMG_mbuf length ne
+ {
+ dup length dup dup
+ /AGMIMG_mbuf exch string def
+ /AGMIMG_ybuf exch string def
+ /AGMIMG_kbuf exch string def
+ }if
+ dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
+ }
+ addprocs
+ {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage
+ end
+ }def
+ /sep_imageormask_lev1
+ {
+ begin
+ MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
+ {
+ 255 mul round cvi GrayLookup exch get
+ }currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ /sep_colorspace_dict AGMCORE_gget/Components known{
+ MappedCSA 0 get/DeviceCMYK eq{
+ Components aload pop
+ }{
+ 0 0 0 Components aload pop 1 exch sub
+ }ifelse
+ Adobe_AGM_Image/AGMIMG_k xddf
+ Adobe_AGM_Image/AGMIMG_y xddf
+ Adobe_AGM_Image/AGMIMG_m xddf
+ Adobe_AGM_Image/AGMIMG_c xddf
+ AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
+ {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ currentcolortransfer
+ {AGMIMG_k mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_y mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_m mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_c mul 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }ifelse
+ }{
+ MappedCSA 0 get/DeviceGray eq{
+ {255 mul round cvi ColorLookup exch get 0 get}currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ MappedCSA 0 get/DeviceCMYK eq{
+ currentcolortransfer
+ {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }{
+ currentcolortransfer
+ {pop 1}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ end
+ }def
+ /sep_image_lev1_sep
+ {
+ begin
+ /sep_colorspace_dict AGMCORE_gget/Components known{
+ Components aload pop
+ Adobe_AGM_Image/AGMIMG_k xddf
+ Adobe_AGM_Image/AGMIMG_y xddf
+ Adobe_AGM_Image/AGMIMG_m xddf
+ Adobe_AGM_Image/AGMIMG_c xddf
+ {AGMIMG_c mul 1 exch sub}
+ {AGMIMG_m mul 1 exch sub}
+ {AGMIMG_y mul 1 exch sub}
+ {AGMIMG_k mul 1 exch sub}
+ }{
+ {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
+ }ifelse
+ AGMCORE_get_ink_data currenttransfer addprocs settransfer
+ currentdict imageormask_sys
+ end
+ }def
+ /indexed_imageormask_lev1
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ currentdict
+ MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
+ {HiVal mul round cvi GrayLookup exch get HiVal div}currenttransfer addprocs settransfer
+ imageormask
+ }{
+ MappedCSA 0 get/DeviceGray eq{
+ {HiVal mul round cvi Lookup exch get HiVal div}currenttransfer addprocs settransfer
+ imageormask
+ }{
+ MappedCSA 0 get/DeviceCMYK eq{
+ currentcolortransfer
+ {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ tint_image_to_color
+ }{
+ currentcolortransfer
+ {pop 1}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll
+ setcolortransfer
+ tint_image_to_color
+ }ifelse
+ }ifelse
+ }ifelse
+ end end
+ }def
+ /indexed_image_lev1_sep
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
+ AGMCORE_get_ink_data currenttransfer addprocs settransfer
+ currentdict imageormask_sys
+ end end
+ }def
+}if
+end
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndProlog
+%%BeginSetup
+Adobe_AGM_Utils begin
+2 2010 Adobe_AGM_Core/ds gx
+Adobe_CoolType_Core/ds get exec
+Adobe_AGM_Image/ds gx
+[/NamespacePush pdfmark_5
+[/_objdef {Doc_Metadata} /type /stream /OBJ pdfmark_5
+[{Doc_Metadata} 1012 (% &end XMP packet& %) ReadBypdfmark_5_string
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.1-c041 52.342996, 2008/05/07-20:48:00 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmp:CreateDate="2008-06-09T10:46:35Z"
+ xmp:CreatorTool="The AcroTeX eDucation Bundle"
+ xmp:ModifyDate="2008-06-09T10:46:37-05:00"
+ pdf:Producer="Acrobat Distiller 9.0.0 (Windows)"
+ pdf:Keywords=""
+ dc:format="application/pdf"
+ xmpMM:DocumentID="uuid:dcf7acdd-9b4c-4257-b0a5-49739103152f"
+ xmpMM:InstanceID="uuid:6e082312-9873-4e36-88d5-0fa980573a08">
+ <dc:creator>
+ <rdf:Seq>
+ <rdf:li/>
+ </rdf:Seq>
+ </dc:creator>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default"/>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end='w'?>
+
+
+% &end XMP packet& %
+
+[{Doc_Metadata} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT pdfmark_5
+[/Document 1 dict begin /Metadata {Doc_Metadata} def currentdict end /BDC pdfmark_5
+[/NamespacePop pdfmark_5
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndSetup
+%%Page: 1 1
+%%EndPageComments
+%%BeginPageSetup
+Adobe_AGM_Utils begin
+Adobe_AGM_Core/ps gx
+Adobe_AGM_Core/capture_mysetup gx
+Adobe_AGM_Utils/capture_cpd gx
+Adobe_CoolType_Core/ps get exec
+Adobe_AGM_Image/ps gx
+Adobe_AGM_Core/ps gx
+gsave
+/0
+[/DeviceRGB] /CSA add_res
+grestore
+Adobe_AGM_Core/pt gx
+%%EndPageSetup
+1 -1 scale 0 -150 translate
+pgsv
+[1 0 0 1 0 0 ]ct
+gsave
+np
+gsave
+0 0 mo
+0 150 li
+186 150 li
+186 0 li
+cp
+clp
+[1 0 0 1 0 0 ]ct
+150 lw
+0 lc
+0 lj
+10 ml
+[] 0 dsh
+false sadj
+8e-6 75 mo
+186 75 li
+false sop
+.98039 .92157 .72941 rgb
+@
+1 0 0 rgb
+%ADOBeginSubsetFont: PBAAAA+AGaramond-Bold Initial
+%ADOt1write: (1.0.24)
+13 dict dup begin
+/FontType 1 def
+/FontName /PBAAAA+AGaramond-Bold def
+/FontInfo 8 dict dup begin
+/Notice (Copyright (c) 1989, 1992, 1996 Adobe Systems Incorporated. All Rights Reserved.Adobe Garamond is a trademark of Adobe Systems Incorporated.) def
+/Weight (Bold) def
+/ItalicAngle 0 def
+/BaseFontName (AGaramond-Bold) def
+/WasEmbedded true def
+end def
+/PaintType 0 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 65 /A put
+dup 70 /F put
+dup 76 /L put
+dup 88 /X put
+dup 99 /c put
+dup 101 /e put
+dup 111 /o put
+dup 114 /r put
+def
+/UniqueID 42792 def
+/FontBBox {-158 -269 1147 862} def
+end
+systemdict begin
+dup /Private
+14 dict dup begin
+/|- {def} def
+/| {put} def
+/BlueValues [-16 -0 660 676 400 414 626 640 715 715] def
+/OtherBlues [240 247 -269 -255] def
+/FamilyBlues [-16 -0 660 676 394 408 626 640 715 715] def
+/BlueScale 0.0479583 def
+/StdHW [53] def
+/StdVW [130] def
+/StemSnapV [130 143] def
+/ForceBold true def
+/password 5839 def
+/MinFeature {16 16} def
+/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
+systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
+/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
+/Subrs 5 array
+dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
+dup 1 <1C60D8A8C9C3D06D9E> |
+dup 2 <1C60D8A8C9C202D79A> |
+dup 3 <1C60D8A849> |
+dup 4 <1C60D8A8CC3674F41144B13B77> |
+def
+put
+dup /CharStrings
+9 dict dup begin
+/A <1C60D8A8C9B6655377F55DD3C734EE632665B298A6B78FF364EB5A19E433
+08A23641367E58C1ED142CFAD28A8B24C3FAB860388EDF4D1D6AA7F74C5DE3A0
+888018D277BEE8A9EAD59CCC84A313F61EE84C049058C0D0F23B177D09CEF16E
+2A16C69D2AEE1C70629AA291E2EC488825097BC72246693EC07CBD9F7A8783A6
+AF25AC6C6E2921803B133E26A26243B799379830A32B100FCB9B5974B13646B5
+223309EF30719C34A914EE7088D846FBE557000602D14CEF3692F404D0A66FA7
+7C0960553B99E6D4F074C95163875A3E9EAEB4EC0B93A0AA9A1BBE8F75A5EC6A
+A1B7BE29A1D0131F9572A486F2E0939334510D5917C43E07017DBB869F097AB9
+0104AE623A1D6E8448698F4EB22B491858147D69FD3BEF97B03A51EBAE37211D
+A62412616035DF21CA79F13C4F> |-
+/F <1C60D8A8C9B797473FFA53E477313E10F50BF5C3C426109D60C5D22BFCA0
+ADB3C03621BF16F9E9A29D0239303826711D714004B6199870489FDB427E0D83
+7236F0A56326E282E7B1D1CCBD3C42F22897732FDD9815B0BC928BA939A27D8F
+BF1E0253A392153CF0CCC8BB041962F4A1BD240195F6BD361C80FC0C124DA8F2
+86A8E1DCB07AEE55F24FBA9B324059B5B881377C2B6694302FA20973D5937A66
+DFDD6E3BCFBEA4D5ED84EB1864C3127E6CCDDDD68C5D2315E194A295ED025924
+665B35C18EF62C2579B7D922AE132C0B4128970BF2EB5FEE17F56B61B26F2D4B
+1F56405E62039168B080E46D08E4D2EABA47B0FA27355DF4E7A8AA90B18BA910
+8067968CC9938ADED760EBFBB723671936E386D2FDEB13953E3865B3B90BF5CA
+56702261BAB3900C600B409B243373F41F345BDFFE69AECE6EBA47BD8E4EC3EE
+9A755F5F0FC51201C65AABAA3D623F249FD1F8EADC055CA7B42C23328BE5B8C8
+A9AA0399AF01CD5B07D54F368924D957CB87A8FD23BC71A7CCDAC9AE23CE9DCE
+1D5B72F1D6D5D24A12D5C9E696F45414297D417FBFA7936B09F695594EBBD608
+E08A9CBAE08D0370> |-
+/L <1C60D8A8C9B7F2A78FB91FEC0AB1E70F60008564059437FB5A80C4C3A1A6
+72D1EED6F19B026C02D2F4590422303378E71150D7C9E5427C28F992D7C27A32
+FA389DCD93B2FD99D81EC2ABF2BD0AC60EC421184679098DCEC5A4AD222EA8ED
+D3607F288DD9A618B7BE19074A2D520A9A5C3ACBCC2FA7B86F916B00201EEBB1
+7911DD5181EFE2A0F81BB72AAB67717D530BD33A2B93A28944C46A376663CC44
+1E8DA79233950D8594FA48667A3AC379766FE39AD438D3FDC9858B678E609AE5
+A41BF446FD80E08BAF7B233E9527E5F4218FAF091146C1F0D8FC3A30A5EFFC4C
+75740C6487C2FF5E66AB94B7530CEA> |-
+/X <1C60D8A8C9B64C38AD99E8223C0B9A93D821D7A7EC037F50529290949BF1
+D40520646BE75AC36DDDE2799793545853190D8B3CF8A886D21E673C29585216
+9853B08D7DE38F77E554BDC1C115E7A7A28A2C3B73B2896283F45F29E54C1936
+8EF2B5153DEC202D0D7A1B3AA0FCC9368FAE5F6340D642623C05DBA81CF96F21
+0350D7AE6976B7B259661BA3224C12E1E041B17E91DBEF6061165FB76A0EF910
+BCAA01839CF96B4DAA0537B3139F3DCC4E27292979BD393F4AEAD0E87C134175
+95AEB8D77580D2EB9734C1545E3777802E2DD604B644333DFF5E3E45C0E9699A
+28456803232177C4AD32CD74A7C3ED88AF964528A6481A29D747C0A1F0AEF7BD
+6224B61D4998C59B1DAF6CE2F7B0CC11CCAA2CB3F0CBD5C4BDF2C6A7757C32C1
+5ED58490B81133E29403BA1D1A4143E54E1DBB070424226C887811BF763F3029
+0A171F9EC3CC19FF8C726DBED83C8D9F47F876D9609E47DB89F2AC7075F4F452
+E5151235DC29F8C4EFD41C0DF74854AD15FDF0EA46A58AD037FD4DEA6CB0932A
+82E552EEF87777D36C300401D8708F690FB8D413B3BE48D62B94AB90372F367A
+30EBCB47B813314E64E5D0730724DDCA08C83BDD1D7993A1669A5212035C> |-
+/c <1C60D8A8C9B71B403A818C3DF4826E1F45CF4EECE6D7D5AFE3BA0007DE7F
+590734D8CA8997F38C8376C5732929B352E785C51A99B8BA68412FAF281BAB53
+2A18189AEC120AC2F0D76432FB4DA510C10CA9BC537342C3EFED625E4A8313F4
+5AB64917206116EB275D6F> |-
+/e <1C60D8A8C9B7171E0E8A38F06EFB5650A378BD33F88451C83C722AF24588
+2E39BB877C5ED5AAB96BB4371C80A25530DA3017C22D46EE85E79EC4D12711A4
+31A95533FFCA59766087C1ABD510709349A5E354AFC1CB8AF80B14E0953EC9C7
+DAD2D34949C1A71787B530C6EA79398AD4C7C76CB7A2FA6ACA7207AC89> |-
+/o <1C60D8A8C9B7B71AC6E947C0F92A6892BA71854D190FDE2F840A4F9C319C
+61A64E30AEAFF817D1D81C7E802E4C28E67A00727F4B13EFC195011A8A709D78
+5C15ACAB3938932F09CF329C9A687AC2902EB3B126C2C4E27EEA> |-
+/r <1C60D8A8C9B728C5DB8274F71B9523FEA7BE2412DC50C4BC77147040DF6F
+18B5387CC9A3C04A0DC1E33CA81D41BDF8CA9E85570DA0B8D95099E92636EEF5
+F33A867301F8B8627F52D835EA1A457BF5C9E5C19BBE664ECCA543EA5805A1FD
+2368F67B106CF0B2AE65AF7DDB69A845EE8812A9760CFDF2EEF319FE4E1BCCD1
+0337EBEC0AD8229B09BC80D059F20B7E3CC9404B13C454CCC7618F6EF3F49242
+220284FD980A9D77A79D6354D07FD59B656047389F371C1B68C3FC4BE3D172D3
+FD90B9577E2F7241B00EE02DA2CEDDE6D69701377D75CBEF> |-
+/.notdef <1C60D8A8C9B8666C32> |-
+end put
+end
+dup /FontName get exch definefont pop
+end
+%ADOEndSubsetFont
+/DYMKXI+AGaramond-Bold /PBAAAA+AGaramond-Bold findfont ct_VMDictPut
+/DYMKXI+AGaramond-Bold*1
+[65{/.notdef}rp /A 4{/.notdef}rp /F 5{/.notdef}rp /L 11{/.notdef}rp /X
+10{/.notdef}rp /c /.notdef /e 9{/.notdef}rp /o 2{/.notdef}rp /r
+141{/.notdef}rp]
+DYMKXI+AGaramond-Bold nf
+DYMKXI+AGaramond-Bold*1 [20 0 0 -20 0 0 ]msf
+57.5871 51.7676 mo
+(AcroF)
+[12.3599 8.32001 7.30004 10.3201 0 ]xsh
+103.515 55.7976 mo
+(L)sh
+109.215 51.7676 mo
+(eX)
+[5.89996 0 ]xsh
+0 0 1 rgb
+%ADOBeginSubsetFont: PBAAAA+AGaramond-Bold AddGlyphs
+%ADOt1write: (1.0.24)
+systemdict begin
+DYMKXI+AGaramond-Bold dup
+/Private get dup rcheck
+{begin true}{pop false}ifelse exch
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/G <1C60D8A8C9B61332955D57ADE2128E92F5BA25BFC66B9671A7D0C0989F22
+390CE3FA08216182862A271EF35B49C0826C266DFD0A355DB6BA449076E3ED4F
+E3A09EC27F8497792F5495DC538E61CC60B0A728A04839904FD9B14D6EA75300
+829BD12F41BC5B50D0C4311F448AC4B09C112FA931BB71D66CA388BCE25EF7A7
+C285A2B8B9482B55F7BAB7D6E5FAF75724D60DA09342C7C407DC82054FDCC2FE
+749A66E0C44EDC290FCCBE802E9A274AB56738638810DB485ACA35298DB8D3C7
+90B4ED8A551BE76A52F230E00E8C4D5CE50B4B2914F8C2C0ED58437F518D2009
+D74E69A2B99871C1094D9A41C46525B19F783469C54D1AA446A8DA5218734B06
+0CD3D7F9B1656047BABA870A2F40EB61D8AA56DCB64422352EF4E93464063E18
+F56E8B8925DF9B38C3269D34BF> |-
+/a <1C60D8A8C9B760FD31B88B3EBC39647A0287B9946E5CC772F4B9508E6831
+A77E239C1A2AF45082C758F785406B498A09CE1CD8208C090F0EA4503B257559
+B34AADF5AF462A87ED8D65E015C7874CB097222BB9CC725188346AE56253BFAC
+9D02A85A0174872D2D8153D09A0141B285B311E4FFAFC20663C575A094842AC4
+3AB7F5A91489ABDDE684A2A25852100B9E8E36AB428D5A00CBF1DB10026234D8
+5271E1A5E1E0C781A8B64323CFE9BD55A97544DB630E14B25328573EDFEED2C7
+E077E2B97BD60516D5C15496D181D876DECF9673EA8D88E873C17AC415021A27
+8B893A1359134B41669BF6BC4392459E27815A86239C99F4E98AF386187A75E5
+D537DE82780A7095373A2279FF3659> |-
+/g <1C60D8A8C9B75CBB5010E213CE6CB9D65A0E04CF79C5CFCDDD48F782BE1F
+E3612A82BB63E540E6FF8663326AF45B46067A9468D20C0116514D54E954A7C2
+449589D732D47DD8082FDF0C03584C30CF444D32ACF58F0F552EB0C341AB4D97
+1B421587C767F52D9F0C187121AD3506AFEB7D876492DB0E7334E313313AE243
+A3F816555EF4E486F63B272D0BA54070920663B4DEFC06CC175F60309D710433
+FD125D89FAE80DEC6F628BD513112FCF4B3728FB82CEB32EADB9820E3980C814
+035E5D3A8B35ADF35C010D51342985B52B400387E962FBBA082CA5E94663738C
+938EF976EA32A044CB6CCE498ABB3553D77BB7F634811502930492104BD8C874
+3635935631DC93A2F3D2097D77A4DCD4A8271670B3B0E500AD72583E4A7BEFC5
+701BE253B235348F606D75ACD43E79DD437FFC084D0E087CE74703D363E27C44
+686E2B1567732D9B98B6A4D0894F8E184EA5CDD92550669CBC8C4F050100053B
+1D10D8755DC7DEDAABEEDDC26AB3A3D119D77D27> |-
+/h <1C60D8A8C9B79815885BCF3A1C586BB8D743FF3D8932B19A53E73B274B8B
+AEE3D8DC6DB5ADE289A21ECD9A00EDC30540DF7E5804E50C841D1F1882535A32
+DD609E70F2817CE3FC9CBEF669E0CD62BBCD235A3080E381D8301CF26296C871
+C24EBC5AB59D43748CA1E5C465277271F41466DA67AC7F996A48C219680E7F02
+2F4ED846D7A75B94FBA1D98C2E8E600DC37825CA500AC5F48CB35151E5BF236A
+229CF1BFD85EA1E2A67EFA9268574275F1BB989C2FF8F09BA10E642BFAF13AC7
+E264A521BB0A7786A4106BF3D4AE3572601F27CE6D8CC8296145808A97A29A56
+BF440B51F1407CF75E85BCF488FF80A8C013EC4F9642F91DE82C16B53B4DCBF5
+D868776E1C8EF06C93C370B4E71B1AEE6781EA11081FB5FE9624DEBDEDE8FC78
+72689D539483DE41266646C339270B7337BA571BE0DB164011E9F39296> |-
+/i <1C60D8A8C9B84C670D1B82727EF32637044703D1099AB39E10C336B4FB6B
+AE6E6C86CFA77FEA15789E8ABE1323397171E81B9AFE910942F8BEC5B9AD77C2
+B4F4AC6E6D5E59A5E71BAC69620C645C28351A65D4626FF9CF83007A77192826
+7D04A528F682478B3394442D67F1FB0F4BD4D8A10DF45D96156A19EC352A7EFF
+0C127890596C94B718F54D67B3C2527EE581F606C8A974A1338F97880BBF3456
+087F6DD698DE01FB2899732F09AB79370618C9E9A4431028FA8012F1ACB4ECFD
+68FD09947B97730C8862E65C2E9F2B796E16FF6F112A180855EFD698164A45BF
+F6> |-
+/n <1C60D8A8C9B795A0CE292F17261D112E0E3D715AD602AFC3F68C4B4501DD
+082CC52463961AFB980C0BF581166729BCF61B90905F566F01025BC78C18C806
+14B967CE96AD7C11F4CD97FC2B4357B9BE6374DA7B7ADA7B13E8014295BE856A
+39DBBC85EFBCF83D3547F5C415D75143813E0471BC15C0644B762EEC68C30B7C
+1A3BB5659EA4E022D94E7CEDA28F5AEA3CBD9065D2112ACE68B7312F3DC40C20
+D906290820BF61B880491D204189A1E7E7561FA2361D538C87E20229AA34C2D2
+786000774B1707398BAB32C26EB53452669A37751331547B82079B604134B168
+AB731B13D6BD22E212896D8CC3771F67E604361988F51E7723EE04F8F47964C3
+B801192B838D73CF0C5E34E97DB6A49E2B14CE0ECF00B0B2275B5AE4597BE6F2
+408F2C5B12D81DEFE986CA593C66BA61A482> |-
+/p <1C60D8A8C9B79C5FED6C0F0DDDA6319F1AAF52DAF53F728156D3EC8CAF36
+1A29D17ECC16ADC2E6AB315E1FDCB815C360844596AE1D41E27CBB3A25D8BB57
+FE09DEC308863553A977413877330B42637E4E528556009AE15CDDDB67C6F877
+519D4919BA009EC3C64D54E07E78270FA9536F54709A76E963E287A2CFE9595A
+8793E3EB17B9583E37D6402AECBC25F03BBB365E3CE3D68BE6429BC7301F6B5B
+B8EAA7E989068D4C9F66124F22CD4012A5A342E3CA82C820766E68899FF2BB02
+B7BDAFACB1254F308965DE871249B70A2925900D31854421D9B5160BB9851F1F
+3C02B9DCA502919799BD9CC1E5496A05374B1465AFE67EABA621BD7CD3499784
+67179D3001F4BDFEC6855A3338543EF96BEC6FAC319096657E953B81ED6A76CC
+37CD307C352A9860852D6B51F7B9AA9E> |-
+systemdict /gcheck known {setglobal} if end {end} if
+end
+DYMKXI+AGaramond-Bold /Encoding get
+dup 71 /G put
+dup 97 /a put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 110 /n put
+dup 112 /p put
+pop
+%ADOEndSubsetFont
+/DYMKXI+AGaramond-Bold*1
+[65{/.notdef}rp /A 4{/.notdef}rp /F /G 4{/.notdef}rp /L 11{/.notdef}rp
+/X 8{/.notdef}rp /a /.notdef /c /.notdef /e /.notdef
+/g /h /i 4{/.notdef}rp /n /o /p /.notdef
+/r 141{/.notdef}rp]
+DYMKXI+AGaramond-Bold nf
+DYMKXI+AGaramond-Bold*1 [20 0 0 -20 0 0 ]msf
+53.7111 83.0496 mo
+(Graphing)
+[14.1999 7.42004 8.85986 10.86 10.9399 5.71991 11.0001 0 ]xsh
+.137422 .122799 .126081 rgb
+%ADOBeginSubsetFont: PBAAAA+AGaramond-Bold AddGlyphs
+%ADOt1write: (1.0.24)
+systemdict begin
+DYMKXI+AGaramond-Bold dup
+/Private get dup rcheck
+{begin true}{pop false}ifelse exch
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/period <1C60D8A8C9B8666C4126EF39EAAD870163BC6E0A685D8DFB65EC8E1
+4751696A1FA1256DD2B28A8D4B11B> |-
+/D <1C60D8A8C9B6CC61ECFA600FD7EAC88B684706E11436B4F56500C772BF7D
+B6E5DA7D261672C80EC451495133D15DB5ED65DB077EF24A257F68C944D48E62
+05CDF6A4EBB3CC0BFB661CC960477F5973544BB9DA066EAA4703C8060D715472
+1F19CB93FF81726E1E797FC341ECD27E70BADF10A8E3E1D161091C04C08FCDA3
+D4C0FB7789D6BC4743587ED10033C808B48148707A6366E2B903557C92042E80
+E78C3550ECA75896A49868F19B4D244695974AA8D7D4CFBAEEAE973276A3F939
+6C908F34376C3FD2A2A0C8BC5083A7DDEE9CA69251C65636F1FA399348432945
+EE0431DBAE748D505732207F2A2995AE193606F03ACC829B7E56BD51E00F62> |-
+/P <1C60D8A8C9B7C2FB443727177F0B040011071E8BE2EF927647B2219C190D
+5C19CACC673C693F4C41C347BFC1CEC04647E5B5731BF15EE115DB8B58185D77
+EC501ABE71C0952ABB68B5604C3AAA01BEDD3421ABDC547FD8F7D633A0DDE399
+5AA04D999D01E52045ADE3FE7415F39D784308A23F6BFB1A2709584C8C15943D
+B8B7FB4305694C2B50A54C1C794DD0F2294BF454B4A0AB2F5CCC517DF5D75D76
+CBDAE949D802C0B204D2FBAF538B31E8CCC2B915817D01206A1BA9476FD0F72E> |-
+/S <1C60D8A8C9B7A157DDD65E2D6E12EC4D29CCC558B9108AFEF527FF151C11
+542D754791DEC089770797EA43AA0A17389D01F94E62265ED32A176828C3AD24
+39C25706F52598126A3BC30823B311DF27B862E870829EF46A3FFB0ABA414799
+0D10096650D3EA773866ECD8F321BD1427A8CD97D24C672F5F92AD13BAEAAD86
+68326C737AFBBFE93FA770F72DA1BC158949F9BB71F78143> |-
+/t <1C60D8A8C9B8293CC14C0716D97838C5907536CD72965E4133CE6BF69240
+E0F97FC614D5C145665C1B21D826CD95C7C948414B9413D983721B772AEA451C
+8BA24085FF9D67767DF832359F8123BCC3FC2B63A4D7673B9897192027F472C7
+901F495435D5885A25B1D31CA436A82DA6A13540D8F86D370E344C160A3005EC> |-
+/y <1C60D8A8C9B746F4A78DF719F6FD142DD510DF52F278FDB6983C74AA48BF
+E99EE4434D535143C45FAAB4EEFDD7BAECF96E2CDA41D185914A27256BE3F0AE
+4DE4A18F4F8151460AB6DC22A8D90020EA0D7097F7A95AF9AFCD371CD60808C1
+D91F2B06DF675B1D19ECAEE31DADBA173CFDECD6F13866DF108E9E5962DC0453
+1E7FB0C3A161BBDE108FCCAD1E593EAAEC4132E478657B076732A872E7F674ED
+99109BA6EBEB2532EAF21584084662AA3C0921F21C49F28D10808B0B5D4197A9
+DF6AC2AA5AD7AC1A4EB1F9464D0C631411725A8CC820156C222C2446757EA1B8
+7D3C5A647BA188F49DFC46B9ECB8242AA458AC0397DBA766A5F50F9EB24CB02A
+74A22A692DC5F4FD13B6DD8B4F91DF0836178BBA902268E33800DF340844607A
+ECAF7B78237118> |-
+systemdict /gcheck known {setglobal} if end {end} if
+end
+DYMKXI+AGaramond-Bold /Encoding get
+dup 46 /period put
+dup 68 /D put
+dup 80 /P put
+dup 83 /S put
+dup 116 /t put
+dup 121 /y put
+pop
+%ADOEndSubsetFont
+/DYMKXI+AGaramond-Bold*1
+[46{/.notdef}rp /period 18{/.notdef}rp /A 2{/.notdef}rp /D /.notdef /F
+/G 4{/.notdef}rp /L 3{/.notdef}rp /P 2{/.notdef}rp /S 4{/.notdef}rp
+/X 8{/.notdef}rp /a /.notdef /c /.notdef /e /.notdef
+/g /h /i 4{/.notdef}rp /n /o /p /.notdef
+/r /.notdef /t 4{/.notdef}rp /y 134{/.notdef}rp]
+DYMKXI+AGaramond-Bold nf
+DYMKXI+AGaramond-Bold*1 [9.9626 0 0 -9.9626 0 0 ]msf
+70.9179 135.534 mo
+(D.P.Story)
+[7.90034 5.1805 4.19423 5.1805 4.80194 3.2179 5.14077 3.87547 0 ]xsh
+grestore
+grestore
+pgrs
+%%PageTrailer
+[
+[/CSA [/0 ]]
+] del_res
+/DYMKXI+AGaramond-Bold*1 uf
+/DYMKXI+AGaramond-Bold uf
+/PBAAAA+AGaramond-Bold uf
+Adobe_AGM_Image/pt gx
+Adobe_CoolType_Core/pt get exec
+Adobe_AGM_Core/restore_mysetup gx
+Adobe_AGM_Core/pt gx
+currentdict Adobe_AGM_Utils eq {end} if
+%%Trailer
+Adobe_AGM_Utils begin
+[/EMC pdfmark_5
+currentdict Adobe_AGM_Utils eq {end} if
+Adobe_AGM_Image/dt get exec
+Adobe_CoolType_Core/dt get exec
+Adobe_AGM_Core/dt get exec
+%%Pages: 1
+%%DocumentNeededResources:
+%%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0
+%%+ procset Adobe_CoolType_Utility_T42 1.0 0
+%%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0
+%%+ procset Adobe_CoolType_Core 2.31 0
+%%+ procset Adobe_AGM_Core 2.0 0
+%%+ procset Adobe_AGM_Utils 1.0 0
+%%DocumentNeededFeatures:
+%%DocumentSuppliedFeatures:
+%%DocumentCustomColors:
+%%CMYKCustomColor:
+%%RGBCustomColor:
+%%EOF
diff --git a/macros/latex/contrib/acroflex/examples/aflogo.tex b/macros/latex/contrib/acroflex/examples/aflogo.tex
new file mode 100644
index 0000000000..3adf52c457
--- /dev/null
+++ b/macros/latex/contrib/acroflex/examples/aflogo.tex
@@ -0,0 +1,42 @@
+\documentclass{article}
+\usepackage[usetemplates]{web}
+\usepackage{anyfontsize}
+
+%
+% This is a simple attempt at creating a poster for
+% movies.
+%
+% After creating a PDF document of this source file, bring
+% it up into Acrobat, and do a Save As an EPS file.
+%
+% I don't remember why I chose these dimensions. The
+% aspect ration of this file should approximately match
+% that of the movie, so the text will not get distorted
+% too badly.
+%
+
+\margins{0bp}{0bp}{0bp}{0bp} % left,right,top, bottom
+\screensize{150bp}{186bp} % height, width
+
+\parindent0pt\parskip0pt
+
+\def\fifteenpt{\fontsize{15}{15}\selectfont}
+\def\twentypt{\fontsize{20}{20}\selectfont}
+
+\pagestyle{empty}
+
+\textBgColor{webyellow}
+\def\AcroFLeX{AcroF\kern-.1667em\lower.5ex\hbox{L}\kern-.3eme\kern-.125emX\@}
+
+\begin{document}
+
+\null\vspace{-\baselineskip}\vfill
+\centering{\bfseries\color{red}\twentypt\AcroFLeX\par\medskip}
+\par\medskip
+{\bfseries\color{blue}\twentypt Graphing}
+\par\vfill
+{\bfseries\fifteenpt\color{black}D. P. Story}
+
+\bigskip
+
+\end{document}
diff --git a/macros/latex/contrib/acroflex/examples/transf_grphs.pdf b/macros/latex/contrib/acroflex/examples/transf_grphs.pdf
new file mode 100644
index 0000000000..c6212a84f2
--- /dev/null
+++ b/macros/latex/contrib/acroflex/examples/transf_grphs.pdf
Binary files differ
diff --git a/macros/latex/contrib/acroflex/examples/transf_grphs.tex b/macros/latex/contrib/acroflex/examples/transf_grphs.tex
new file mode 100644
index 0000000000..74dad7dbee
--- /dev/null
+++ b/macros/latex/contrib/acroflex/examples/transf_grphs.tex
@@ -0,0 +1,296 @@
+\documentclass{article}
+\usepackage{amsmath}
+\usepackage[%
+ web={pro,tight,usesf},
+ eforms,exerquiz,dljslib={ImplMulti},
+ graphicxsp={showembeds}
+]{aeb_pro}
+\usepackage{acroflex}
+
+\margins{.25in}{.25in}{24pt}{.25in} % left,right,top, bottom
+\screensize{6.8in}{5.5in} % height, width dimensions
+
+\DeclareDocInfo
+{
+ title=Exploring Graphical Transformations,
+ author=D. P. Story,
+ university=Northwest Florida State College,
+ email=storyd@owc.edu,
+ subject=Demo of the acroflex and the rmannot package,
+ keywords={Adobe Acrobat, JavaScript, Adobe FLEX 3, ActionScript},
+ talksite=\url{http://faculty.owc.edu/math/storyd},
+ talkdate={\today},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) \the\year, D. P. Story},
+ copyrightInfoURL=http://www.acrotex.net
+}
+\talkdateLabel{Published:}
+
+\setWindowOptions{showtitle}
+
+\requiredVersionMsg{%
+ Version 9 required: This document may be viewed, but version 9
+ of Acrobat/Adobe Reader is required to view the rich media
+ annotations present in this document.}
+\requiredVersionMsgRedirect{%
+ Version 9 required: This document may be viewed, but version 9
+ of Acrobat/Adobe Reader is required to view the rich media
+ annotations present in this document.}
+\requiresVersion[warnonly]{9}
+
+\def\AcroTeX{Acro\!\TeX}
+\def\myURL{http://www.math.uakron.edu/\string~dpstory}
+%
+% The following definitions are for the rmannot package.
+% The \saveNamedPath associates the name AcroAd with the
+% path to a Flash animation, Acro_Advertiser.swf.
+% The two \makePoster definitions are for the posters of the
+% rich media annotations. The first for the animation on page 1
+% and the second for all the AcroFlex graphing screens.
+\newcommand{\myRMFiles}{C:/Users/Public/Documents/My TeX Files/%
+ tex/latex/aeb/aebpro/rmannot/RMfiles}
+\saveNamedPath{AcroAd}{\myRMFiles/Acro_Advertiser.swf}
+%
+% See the rmannot documentation. You can create your own
+% poster graphic and declare it in the preamble.
+%
+\makePoster[hiresbb]{aflogo}{aflogo1}
+\makePoster[hiresbb]{AcroAd_poster}{AcroAd_poster}
+
+\parindent=0pt
+\pagestyle{empty} %\previewtrue
+\def\graphAndControls{\kern0pt\noindent
+ \graphScreen[poster=aflogo]{\hScreenGraph}{\vScreenGraph}\\[1ex]
+ \makebox[\hScreenGraph][l]{%
+ \savedelSelBtn[\textSize{7}\CA{S}]{9bp}{11bp}\kern1bp
+ \functionSelect{50bp}{11bp}\hfill
+ \funcInputField{\hScreenGraph-50bp-6bp-9bp}{11bp}%
+ }\\[1ex]
+ \makebox[\hScreenGraph][c]{\scriptsize
+ \graphBtn[\textSize{7}]{}{9bp}\kern1pt
+ \graphClrBtn[\textSize{7}]{}{9bp}\hfill
+ \hShiftL{\raisebox{1bp}{\reflectbox{\ding{220}}}}\,%
+ \vShiftU{\raisebox{1bp}{\rotatebox{90}{\ding{220}}}}\,\,%
+ \amtShift[\textSize{7}]{12bp}{9bp}\,\,%
+ \vShiftD{\raisebox{1bp}{\rotatebox[origin=c]{-90}{\ding{220}}}}
+ \hShiftR{\raisebox{1bp}{\ding{220}}}\enspace
+ \hfill\zoomInOut[\textSize{7}]{}{9bp}%
+ }\\[1pt]%
+ \makebox[\hScreenGraph][l]{\scriptsize
+ $x = $ \strut\domMin[\textSize{7}]{36bp}{9bp}\ldots
+ \domMax[\textSize{7}]{36bp}{9bp}\hfill
+ $n = $\numPoints[\textSize{7}]{16bp}{9bp}
+ }\\[1pt]%
+ \makebox[\hScreenGraph][l]{\scriptsize
+ $y = $ \rngMin[\textSize{7}]{36bp}{9bp}\ldots
+ \rngMax[\textSize{7}]{36bp}{9bp}%
+ }%\\[1pt]%%
+% \makebox[\hScreenGraph][l]{\scriptsize
+% $t = $ \strut\domMinP[\textSize{7}]{36bp}{9bp}\ldots
+% \domMaxP[\textSize{7}]{36bp}{9bp}%
+% }
+\par
+}
+
+%
+% Display an advertisement on the opening page through the
+% \optionalPageMatter command.
+%
+\optionalPageMatter{%
+\begin{center}
+\begin{minipage}{.7\linewidth}
+ \resizebox{\linewidth}{!}{%
+ \rmAnnot[poster=AcroAd_poster,enabled=pageopen]{612bp}{265bp}{AcroAd}}%
+\end{minipage}
+\end{center}
+}
+
+\begin{document}
+
+\maketitle
+
+
+
+% Basic parameters. These are the graphing screen dimensions you wish
+% for the AcroFleX graphing widget, and the \graphName is the base name used by
+% all the supporting components to the graphing screen.
+
+\dimScreenGraph{160bp}{160bp}
+%\dimScreenGraph{186bp}{186bp*3/4}
+\graphName{graph1}
+
+\begin{center}\bfseries\Large\color{blue}
+ Transforming Graphs
+\end{center}
+
+\medskip
+This is a demo of graphical transformations, and is based on my recent work over the summer, 2008,
+on creating a interactive graphing system using a Flash application, written by myself, for PDF.
+Adobe Reader 9.0 or later is required to use this system.
+\medskip
+
+\begin{minipage}[t]{\hScreenGraph + 10bp}
+%
+% Insert the \graphScreen with all possible controls. Plot data entered by the
+% user is interactive mode.
+\graphAndControls
+\end{minipage}\hfill
+\begin{minipage}[t]{\linewidth - \hScreenGraph - 10bp}\small\par
+\textbf{\textcolor{red}{Instructions:}} This graphing system can graph
+a function of $x$.
+\begin{questions}
+ \item For a function of $x$, enter an algebraic expression to be graphed, e.g.,
+ \verb!x^2!, \verb!x^3!, \verb!3x^2-1!, \verb!|x|!, \verb!sqrt(x)!
+ \item Set the graph viewing window: The range of the horizontal
+ axis ($x$-axis) and range of the vertical axis ($y$-axis).
+ For parametric plotting, set the range of the $t$ variable.
+ \item Enter the number of points, $n$, to plot.
+ \item Click the \textsf{Graph It!} button.
+ \item Shift the viewing window horizontally or vertical;
+ or zoom in or out.
+ \item Click \texttt{Clear} to clear the plot; use
+ \textsf{shift-click} to deactivate the graphing screen.
+\end{questions}
+\end{minipage}
+
+\medskip
+
+\noindent\makebox[\linewidth][c]{\rule{.67\linewidth}{.4pt}}
+
+\medskip
+
+\parskip3pt
+
+\defineGraphJS{graph=c2,xInterval={[d_min,d_max]},yInterval={[r_min,r_max]},
+ noquotes,points=n_Pts}{newFunc}{\verticalShift}
+\defineGraphJS{graph=c2,xInterval={[d_min,d_max]},yInterval={[r_min,r_max]},
+ noquotes,points=n_Pts}{newFunc}{\horizontalShift}
+\defineGraphJS{graph=c2,xInterval={[d_min,d_max]},yInterval={[r_min,r_max]},
+ noquotes,points=n_Pts}{newFunc}{\verticalShrink}
+\defineGraphJS{graph=c2,xInterval={[d_min,d_max]},yInterval={[r_min,r_max]},
+ noquotes,points=n_Pts}{newFunc}{\horizontalShrink}
+\def\gatherGraphingData{%
+ var f = this.getField("graph1theFunction").value;\r\t
+ var d_min = this.getField("graph1theDom.min").value;\r\t
+ var d_max = this.getField("graph1theDom.max").value;\r\t
+ var r_min = this.getField("graph1theRng.min").value;\r\t
+ var r_max = this.getField("graph1theRng.max").value;\r\t
+ var n_Pts = this.getField("graph1numNodes").value;\r\t
+}
+
+Explore graphical transformations by entering numbers into the fields below. Put your mouse
+over the fields for additional instructions. Click on the green links to populate the
+graphing screen with suggested examples, then manipulate these examples using the controls below.
+
+\smallskip
+
+\begin{center}
+\begin{tabular}{lll}
+\textbf{Description} & \textbf{Input} & \textbf{Suggested Examples}\\
+
+Vertical Shift & \textField[\textSize{7}\TU{Enter a number (positive
+or negative) to shift the graph vertically up or down.}
+ \AA{\AAKeystroke{%
+ if (event.willCommit) {\r\t
+ \gatherGraphingData
+ var _C = event.value;\r\t
+ if ( isFinite(_C) ) {\r\t\t
+ var newFunc = f+"+"+(_C);\r\t\t
+ \verticalShift\r\t
+ }\r
+ }
+}}]{vShift}{20bp}{9bp}&
+\sgraphLink{populate,xInterval={[-2,2]},yInterval={[-3,3]},points=40}{x}{$x$},
+\sgraphLink{populate,xInterval={[-2,2]},yInterval={[-2,4]},points=40}{x^2}{$x^2$},
+\sgraphLink{populate,xInterval={[-2,2]},yInterval={[-4,4]},points=40}{x^3}{$x^3$},
+\sgraphLink{populate,xInterval={[-2,3]},yInterval={[-3,6]},points=40}{(x-1)^2+1}{$(x-1)^2+1$}\\
+%
+%
+Horizontal Shift & \textField[\textSize{7}\TU{Enter a number
+(positive or negative) to shift the graph horizontally right or
+left.}
+ \AA{\AAKeystroke{%
+ if (event.willCommit) {\r\t
+ \gatherGraphingData
+ var _C = event.value;\r\t
+ if ( isFinite(_C) ) {\r\t\t
+ newFunc = f.replace(/x/g, "(x-("+_C+"))");\r\t\t
+ \horizontalShift\r\t
+ }\r
+ }
+}}]{hShift}{20bp}{9bp}&
+\sgraphLink{populate,xInterval={[-2,4]},yInterval={[-2,2]},points=60}{sqrt(x)}{$\sqrt{x}$},
+\sgraphLink{populate,xInterval={[-3,3]},yInterval={[-3,3]},points=60}{x^{1/3}}{$\sqrt[3]{x}$},
+\sgraphLink{populate,xInterval={[-2,4]},yInterval={[-2,3]},points=60}{sqrt(x-1)+1}{$\sqrt{x-1}+1$}\\
+%
+%
+Vertical Stretch/Shrink& \textField[\textSize{7}\TU{Enter a positive number
+to stretch or shrink the graph vertically.}
+ \AA{\AAKeystroke{%
+ if (event.willCommit) {\r\t
+ var f = this.getField("graph1theFunction").value;\r\t
+ var d_min = this.getField("graph1theDom.min").value;\r\t
+ var d_max = this.getField("graph1theDom.max").value;\r\t
+ var r_min = this.getField("graph1theRng.min").value;\r\t
+ var r_max = this.getField("graph1theRng.max").value;\r\t
+ var n_Pts = this.getField("graph1numNodes").value;\r\t
+ var _C = event.value;\r\t
+ if ( isFinite(_C) && (Number(_C) > 0) ) {\r\t\t
+ newFunc = String("(_C)*("+f+")")\r\t\t
+ \verticalShrink\r\t
+ }\r
+ }
+}}]{vShrink}{20bp}{9bp}&
+\sgraphLink{populate,xInterval={[-2,2]},yInterval={[-2,4]},points=40}{|x-1|}{$|x|$},
+\sgraphLink{populate,xInterval={[-2,3]},yInterval={[-2,2]},points=40}{|x-1|}{$|x-1|$}\\
+%
+%
+Horizontal Stretch/Shrink& \textField[\textSize{7}\TU{Enter a positive number
+to stretch or shrink the graph horizontally.}
+ \AA{\AAKeystroke{%
+ if (event.willCommit) {\r\t
+ var f = this.getField("graph1theFunction").value;\r\t
+ var d_min = this.getField("graph1theDom.min").value;\r\t
+ var d_max = this.getField("graph1theDom.max").value;\r\t
+ var r_min = this.getField("graph1theRng.min").value;\r\t
+ var r_max = this.getField("graph1theRng.max").value;\r\t
+ var n_Pts = this.getField("graph1numNodes").value;\r\t
+ var _C = event.value;\r\t
+ if ( isFinite(_C) && (Number(_C) > 0) ) {\r\t\t
+ newFunc=f.replace(/x/g, "(("+_C+")*x)");\r\t\t
+ \horizontalShrink\r\t
+ }\r
+ }
+}}]{hShrink}{20bp}{9bp}&\\
+%
+%
+Reflect w/resp $y$-axis & \pushButton[\textSize{7}\CA{y-Axis}
+ \TU{Press to reflect current graph with respect to the y-axis.}
+ \A{\JS{%
+ var f = this.getField("graph1theFunction").value;\r\t
+ var d_min = this.getField("graph1theDom.min").value;\r\t
+ var d_max = this.getField("graph1theDom.max").value;\r\t
+ var r_min = this.getField("graph1theRng.min").value;\r\t
+ var r_max = this.getField("graph1theRng.max").value;\r\t
+ var n_Pts = this.getField("graph1numNodes").value;\r\t
+ newFunc=f.replace(/x/g, "((-1)*x)");\r\t\t
+ \horizontalShrink\r\t
+}}]{y_reflect}{}{9bp}&
+Click \graphClrBtn[\textSize{7}]{}{9bp} before clicking on green links\\
+%
+%
+Reflect w/resp $x$-axis & \pushButton[\textSize{7}\CA{x-Axis}
+ \TU{Press to reflect current graph with respect to the x-axis.}
+ \A{\JS{%
+ var f = this.getField("graph1theFunction").value;\r\t
+ var d_min = this.getField("graph1theDom.min").value;\r\t
+ var d_max = this.getField("graph1theDom.max").value;\r\t
+ var r_min = this.getField("graph1theRng.min").value;\r\t
+ var r_max = this.getField("graph1theRng.max").value;\r\t
+ var n_Pts = this.getField("graph1numNodes").value;\r\t
+ newFunc = String("(-1)*("+f+")")\r\t\t
+ \verticalShrink\r\t
+}}]{x_reflect}{}{9bp}&
+\end{tabular}
+\end{center}
+\end{document}
diff --git a/macros/latex/contrib/acroflex/swf/AcroFleX.swf b/macros/latex/contrib/acroflex/swf/AcroFleX.swf
new file mode 100644
index 0000000000..d13cc494b1
--- /dev/null
+++ b/macros/latex/contrib/acroflex/swf/AcroFleX.swf
Binary files differ