summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2017-07-13 09:30:28 +0900
committerNorbert Preining <norbert@preining.info>2017-07-13 09:30:28 +0900
commit32d0671418a3cc6ad0465b06539ed54d96f77784 (patch)
tree83f9ce9f288adee0aa0af0eddfdccf6d5a47bae7
parent30e9cda301125dbde368d7bba3331bfd0f8389a1 (diff)
add artthreads cntdwn ecards fc-arith fldigigal
-rw-r--r--texmf-dist/doc/latex/artthreads/README.md27
-rw-r--r--texmf-dist/doc/latex/artthreads/article_tech.tex109
-rw-r--r--texmf-dist/doc/latex/artthreads/article_tst.tex78
-rw-r--r--texmf-dist/doc/latex/artthreads/artthreads_man.pdfbin0 -> 141045 bytes
-rw-r--r--texmf-dist/doc/latex/artthreads/artthreads_man.tex434
-rw-r--r--texmf-dist/doc/latex/cntdwn/README46
-rw-r--r--texmf-dist/doc/latex/cntdwn/cntdwn_man.pdfbin0 -> 101623 bytes
-rw-r--r--texmf-dist/doc/latex/cntdwn/cntdwn_man.tex743
-rw-r--r--texmf-dist/doc/latex/ecards/README.md29
-rw-r--r--texmf-dist/doc/latex/ecards/ecardsman.pdfbin0 -> 331739 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/ecardstst.tex237
-rw-r--r--texmf-dist/doc/latex/ecards/examples/ecardstst_nohint.tex243
-rw-r--r--texmf-dist/doc/latex/ecards/examples/graphics/uakron.bb5
-rw-r--r--texmf-dist/doc/latex/ecards/examples/graphics/uakron.epsbin0 -> 167526 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/graphics/uakron.jpgbin0 -> 9388 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/graphics/uakron.pdfbin0 -> 12567 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/graphics/uakron.pngbin0 -> 130265 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/gw1.bb5
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/gw1.epsbin0 -> 138380 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/gw1.jpgbin0 -> 16176 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/gw1.pdfbin0 -> 18445 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/gw1.pngbin0 -> 349707 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/ja2.bb5
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/ja2.epsbin0 -> 137216 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/ja2.jpgbin0 -> 63418 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/ja2.pdfbin0 -> 65705 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/ja2.pngbin0 -> 850726 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/ja6.bb5
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/ja6.epsbin0 -> 143504 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/ja6.jpgbin0 -> 12734 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/ja6.pdfbin0 -> 15015 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/ja6.pngbin0 -> 318286 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/jm4.bb5
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/jm4.epsbin0 -> 151136 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/jm4.jpgbin0 -> 8790 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/jm4.pdfbin0 -> 11058 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/jm4.pngbin0 -> 156178 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/jm5.bb5
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/jm5.epsbin0 -> 148208 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/jm5.jpgbin0 -> 10723 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/jm5.pdfbin0 -> 12992 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/jm5.pngbin0 -> 233754 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/tj3.bb5
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/tj3.epsbin0 -> 143599 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/tj3.jpgbin0 -> 10705 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/tj3.pdfbin0 -> 12986 bytes
-rw-r--r--texmf-dist/doc/latex/ecards/examples/presidents/tj3.pngbin0 -> 265139 bytes
-rw-r--r--texmf-dist/doc/latex/fc-arith/README.md32
-rw-r--r--texmf-dist/doc/latex/fc-arith/examples/fc-acrobat.pdfbin0 -> 143465 bytes
-rw-r--r--texmf-dist/doc/latex/fc-arith/examples/fc-acrobat.tex134
-rw-r--r--texmf-dist/doc/latex/fc-arith/examples/fc-noacrobat.tex120
-rw-r--r--texmf-dist/doc/latex/fc-arith/examples/graphics/fc_icons.pdfbin0 -> 13404 bytes
-rw-r--r--texmf-dist/doc/latex/fc-arith/examples/graphics/nwfsc_logo.eps8518
-rw-r--r--texmf-dist/doc/latex/fc-arith/examples/graphics/nwfsc_logo.pdfbin0 -> 15087 bytes
-rw-r--r--texmf-dist/doc/latex/fc-arith/fc_arithman.pdfbin0 -> 1106738 bytes
-rw-r--r--texmf-dist/doc/latex/fldigigal/README24
-rw-r--r--texmf-dist/doc/latex/fldigigal/digis/Chrysanthemum.jpgbin0 -> 879394 bytes
-rw-r--r--texmf-dist/doc/latex/fldigigal/digis/Desert.jpgbin0 -> 845941 bytes
-rw-r--r--texmf-dist/doc/latex/fldigigal/digis/Hydrangeas.jpgbin0 -> 595284 bytes
-rw-r--r--texmf-dist/doc/latex/fldigigal/digis/Jellyfish.jpgbin0 -> 775702 bytes
-rw-r--r--texmf-dist/doc/latex/fldigigal/digis/Koala.jpgbin0 -> 780831 bytes
-rw-r--r--texmf-dist/doc/latex/fldigigal/digis/Lighthouse.jpgbin0 -> 561276 bytes
-rw-r--r--texmf-dist/doc/latex/fldigigal/digis/Penguins.jpgbin0 -> 777835 bytes
-rw-r--r--texmf-dist/doc/latex/fldigigal/digis/Tulips.jpgbin0 -> 620888 bytes
-rw-r--r--texmf-dist/doc/latex/fldigigal/fdg_demo.tex59
-rw-r--r--texmf-dist/doc/latex/fldigigal/fdg_demo_fit.tex60
-rw-r--r--texmf-dist/doc/latex/fldigigal/fdg_man.pdfbin0 -> 205291 bytes
-rw-r--r--texmf-dist/doc/latex/fldigigal/fdg_man.tex407
-rw-r--r--texmf-dist/doc/latex/fldigigal/fldigigal.dvibin0 -> 28376 bytes
-rw-r--r--texmf-dist/source/latex/artthreads/artthreads.dtx390
-rw-r--r--texmf-dist/source/latex/artthreads/artthreads.ins61
-rw-r--r--texmf-dist/source/latex/cntdwn/cntdwn.dtx1306
-rw-r--r--texmf-dist/source/latex/cntdwn/cntdwn.ins65
-rw-r--r--texmf-dist/source/latex/cntdwn/examples/clock_tst.tex56
-rw-r--r--texmf-dist/source/latex/cntdwn/examples/lngcntdwn_tst.tex62
-rw-r--r--texmf-dist/source/latex/cntdwn/examples/shrtcntdwn_tst.tex79
-rw-r--r--texmf-dist/source/latex/ecards/doc/ecardsman.tex726
-rw-r--r--texmf-dist/source/latex/ecards/ecard.cus9
-rw-r--r--texmf-dist/source/latex/ecards/ecards.dtx1331
-rw-r--r--texmf-dist/source/latex/ecards/ecards.ins65
-rw-r--r--texmf-dist/source/latex/fc-arith/docs/fc_arithman.tex1140
-rw-r--r--texmf-dist/source/latex/fc-arith/fc_arith.dtx2186
-rw-r--r--texmf-dist/source/latex/fc-arith/fc_arith.ins62
-rw-r--r--texmf-dist/source/latex/fldigigal/fldigigal.dtx452
-rw-r--r--texmf-dist/source/latex/fldigigal/fldigigal.ins60
-rw-r--r--texmf-dist/tex/latex/artthreads/artthreads.sty200
-rw-r--r--texmf-dist/tex/latex/cntdwn/cntdwn.sty84
-rw-r--r--texmf-dist/tex/latex/cntdwn/lngcnt.def518
-rw-r--r--texmf-dist/tex/latex/cntdwn/shrtcnt.def271
-rw-r--r--texmf-dist/tex/latex/ecards/ecards.sty560
-rw-r--r--texmf-dist/tex/latex/ecards/ecardslist.def91
-rw-r--r--texmf-dist/tex/latex/fc-arith/fc_arith.sty1887
-rw-r--r--texmf-dist/tex/latex/fldigigal/fdg_ht1.swfbin0 -> 78677 bytes
-rw-r--r--texmf-dist/tex/latex/fldigigal/fdg_nt1.swfbin0 -> 123787 bytes
-rw-r--r--texmf-dist/tex/latex/fldigigal/fdg_vt1.swfbin0 -> 138607 bytes
-rw-r--r--texmf-dist/tex/latex/fldigigal/fldigigal.cfg7
-rw-r--r--texmf-dist/tex/latex/fldigigal/fldigigal.sty177
-rw-r--r--tlpkg/tlpsrc/artthreads.tlpsrc0
-rw-r--r--tlpkg/tlpsrc/cntdwn.tlpsrc0
-rw-r--r--tlpkg/tlpsrc/ecards.tlpsrc0
-rw-r--r--tlpkg/tlpsrc/fc-arith.tlpsrc0
-rw-r--r--tlpkg/tlpsrc/fldigigal.tlpsrc0
102 files changed, 23180 insertions, 0 deletions
diff --git a/texmf-dist/doc/latex/artthreads/README.md b/texmf-dist/doc/latex/artthreads/README.md
new file mode 100644
index 00000000..d3cb0470
--- /dev/null
+++ b/texmf-dist/doc/latex/artthreads/README.md
@@ -0,0 +1,27 @@
+The artthreads Package
+Author: D. P. Story
+Version: v1.1
+Dated: 2016/04/09
+
+Through the commands of the artthreads package, create PDF article threads,
+a concept/feature of Adobe Reader/Acrobat that has been around since the
+product's beginning. The use of article threads typically only makes sense in
+a document in which the text is in a multi-column format.
+
+Set the article threads after the composition of the document is completed.
+The method of setting the threads is very visual not automatic as in the
+threadcol package of Scott Patkin (available for pdftex only).
+
+The artthreads package supports all drivers: dvips, pdflatex (which includes
+lualatex), dvipdfm, dvipdfmx, and xelatex.
+
+Unpack the distribution by latexing artthreads.ins.
+
+Enjoy.
+
+D. P. Story
+www.acrotex.net
+dpstory@uakron.edu
+dpstory@acrotex.net
+
+
diff --git a/texmf-dist/doc/latex/artthreads/article_tech.tex b/texmf-dist/doc/latex/artthreads/article_tech.tex
new file mode 100644
index 00000000..10505b3c
--- /dev/null
+++ b/texmf-dist/doc/latex/artthreads/article_tech.tex
@@ -0,0 +1,109 @@
+\documentclass{article}
+\usepackage[forcolorpaper]{web}
+\usepackage[!viewMagWin,!preview]{artthreads}
+\usepackage{fancyvrb}
+\usepackage{multicol}
+
+\useFullWidthForPaper % from web
+\providecommand{\cs}[1]{\texttt{\char`\\#1}}
+
+% A selection of pushbutton actions for articles
+\def\toggleArticlePane{\pushButton[
+ \CA{Article}\A{\Named{ShowHideArticles}}]{TAPBtn}{}{11bp}}
+\def\toggleArticlePaneRead{\pushButton[
+ \CA{Article}\A{\Named{ShowHideArticles}
+ \Next{/S/Thread/D(\threadTitle)}}]{TAPRBtn}{}{11bp}}
+\def\showArticlePane{\pushButton[
+ \CA{Article}\A{\Named{ArticleThreads}}]{SAPBtn}{}{11bp}}
+\def\showArticlePaneRead{\pushButton[
+ \CA{Article}\A{\Named{ArticleThreads}
+ \Next{/S/Thread /D(\threadTitle)}}]{SAPRBtn}{}{11bp}}
+% Links may be used as well, here is only one such, this link below is hard-wired
+% modify as needed.
+%\setLink[\A{/S/Thread/D(Methodology)}]{Read Article}
+
+\setAddToBorder{addtow=4bp,addtoh=4bp}
+
+\begin{document}
+
+%\noindent
+%The two article threads: \setLink[\A{/S/Thread/D(Lipsum)}]{Read Lipsum}
+%and \setLink[\Color{red}\A{/S/Thread/D(more Lipsum)}]{Read more Lipsum}.
+
+
+\noindent
+Below is a description of the \setLink[\linktxtcolor{red}\A{/S/Thread/D(Methodology)}]{methodology}
+for developing article threads. You
+may compile this document using any of the usual drivers (options
+\texttt{dvips}, \texttt{pdftex}, \texttt{xetex}, \texttt{dvipdfm}, \texttt{dvipdfmx}).
+Play around with various combinations of \texttt{preview}, \texttt{!preview},
+\texttt{viewMagWin}, and \texttt{!viewMagWin}.
+
+\setThreadInfo{
+ title=Methodology,
+ author=D. P. Story,
+ subject=Article thread test,
+ keywords={AeB, PDF, LaTeX}
+}
+
+\begin{multicols}{2}
+\noindent\bArticle{lift=\baselineskip,width=\linewidth,height=4in+2\baselineskip}\indent
+There are two places to begin a thread: (1) at the very beginning of a paragraph;
+and (2) from within a paragraph. Method~(1) is preferred. We began this paragraph
+with
+\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small]
+\noindent\bArticle{lift=\baselineskip,
+ width=\linewidth,
+ height=4in+2\baselineskip}\indent
+There are two places...
+\end{Verbatim}
+Place article threads after you've finished composing your document. While
+placing threads, one or both of the options \texttt{preview} or
+\texttt{viewMagWin} should be in effect. In a \textsf{DVI} viewer, we can see
+the bounding rectangles. We can see its too low, too long and so on. For
+users of \textsf{pdflatex}, \textsf{xelatex}, etc., view your documents in
+the \textsf{DVI} previewer first (or view them as a \textsf{PDF}). I've used
+\texttt{lift=\string\baselineskip} to raise up the thread rectangle by that
+mount to enclose the first line. The value of \texttt{width} is usually
+\cs{linewidth}, but the value of \texttt{height} may have to be adjusted, in
+this example, I've ``tweaked'' the \texttt{4in} by
+\texttt{2\string\baselineskip}.
+
+Naturally, after you're satisfied, you then remove \texttt{preview} and
+\texttt{viewMagWin} or change them to \texttt{!preview} and
+\texttt{!viewMagWin}. Method~(2): Another possible location is from within a
+paragraph, here, we continue the current thread using the \cs{cArticle}
+command in conjunction with the \cs{vadjust} {\TeX}
+primitive\vadjust{\noindent
+\cArticle{lift=2\baselineskip,width=\linewidth,height=4in+2\baselineskip}}.
+Between the end of the word `primitive' and the period (.) ending the
+sentence, I've place
+\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small]
+primitive\vadjust{\noindent
+ \cArticle{lift=2\baselineskip,
+ width=\linewidth,
+ height=4in+2\baselineskip}}.
+ Between the ...
+\end{Verbatim}
+The value of \texttt{lift=2\string\baselineskip} we chosen because the
+original positioning of the thread rectangle was too low by about two lines.
+The value of \texttt{height} was chosen to cover the paragraph once the
+complete paragraph was composed.
+
+Of course, in this example, it was unnecessary to insert the \cs{cArticle}
+mid-paragraph, it would have been better placed at the beginning of a
+paragraph and `lifting' more. Placing \cs{cArticle} mid-paragraph is useful
+for multi-column formats. When the paragraph flows from the first column the
+second column, use the \cs{vadjust} technique to cover the portion of the
+text that flows to the right column.
+
+By the way, notice the use of \cs{noindent}, this is
+oftentimes needed to position the article thread in the left margin of the
+text block.
+\end{multicols}
+
+\noindent
+Adding text to the columns will change the positions of the article threads, for
+this reason, the threads need to be inserted after the document is finished.
+
+\end{document}
diff --git a/texmf-dist/doc/latex/artthreads/article_tst.tex b/texmf-dist/doc/latex/artthreads/article_tst.tex
new file mode 100644
index 00000000..6333cf24
--- /dev/null
+++ b/texmf-dist/doc/latex/artthreads/article_tst.tex
@@ -0,0 +1,78 @@
+\documentclass{article}
+\usepackage[dvipsone,!viewMagWin,!preview]{artthreads}
+\usepackage{multicol,lipsum}
+\hypersetup{colorlinks}
+
+% A selection of pushbutton actions for articles
+\def\toggleArticlePane{\pushButton[
+ \CA{Article}\A{\Named{ShowHideArticles}}]{TAPBtn}{}{11bp}}
+\def\toggleArticlePaneRead{\pushButton[
+ \CA{Article}\A{\Named{ShowHideArticles}
+ \Next{/S/Thread/D(\threadTitle)}}]{TAPRBtn}{}{11bp}}
+\def\showArticlePane{\pushButton[
+ \CA{Article}\A{\Named{ArticleThreads}}]{SAPBtn}{}{11bp}}
+\def\showArticlePaneRead{\pushButton[
+ \CA{Article}\A{\Named{ArticleThreads}
+ \Next{/S/Thread /D(\threadTitle)}}]{SAPRBtn}{}{11bp}}
+% Links may be used as well, here is only one such, this link below is hard-wired
+% modify as needed.
+%\setLink[\A{/S/Thread/D(Lipsum)}]{Read Article}
+
+\setAddToBorder{addtow=10bp,addtoh=10bp}
+
+\begin{document}
+
+\noindent
+The two article threads: \setLink[\A{/S/Thread/D(Lipsum)}]{Read Lipsum}
+and \setLink[\A{/S/Thread/D(more Lipsum)}]{Read more Lipsum}.
+
+
+\setThreadInfo{title=Lipsum,author=D. P. Story,subject=Article thread test,keywords={AeB, PDF, LaTeX}}%
+
+\raggedcolumns
+\begin{multicols}{2}
+\noindent\makebox[0pt][r]{\showArticlePaneRead\kern11bp}%
+\bArticle{lift=\baselineskip,width=\linewidth,height=\textheight}%
+This is a series of paragraphs to fill the multi-columns of this document. It is imperative
+that we have a lot of text to fill these columns, but I fear that I don't know what to write.
+
+Well, here goes. \lipsum[2]
+
+That went well, more? \lipsum[4]
+
+Ok, I have the hang of it now. \lipsum[6]
+
+\noindent\cArticle{lift=9\baselineskip,width=\linewidth,height=\textheight}\indent
+Continuing now with \lipsum[8]
+
+I'm on a roll, \lipsum[10]
+
+\end{multicols}
+
+\newpage
+
+\noindent
+Same `article' but broken down into smaller pieces as an exercise.
+
+\setThreadInfo{title=more Lipsum,author=D. P. Story,subject=Article thread test,keywords={AeB, PDF, LaTeX}}%
+\begin{multicols}{2}\previewtrue % locally turn on preview
+\noindent\bArticle{lift=\baselineskip,width=\linewidth,height=3in+3\baselineskip}%
+This is a series of paragraphs to fill the multi-columns of this document. It is imperative
+that we have a lot of text to fill these columns, but I fear that I don't know what to write.
+
+Well, here goes. \lipsum[2]
+
+\noindent\cArticle{lift=\baselineskip,width=\linewidth,height=4in-2\baselineskip}\indent
+That went well, more? \lipsum[4]
+
+Ok, I have the hang of it now. \lipsum[6]
+
+\noindent\cArticle{lift=9\baselineskip,width=\linewidth,height=4in+2\baselineskip}\indent
+Continuing now with \lipsum[8]
+
+\noindent\cArticle{lift=\baselineskip,width=\linewidth,height=3in-\baselineskip}\indent
+I'm on a roll, \lipsum[10]
+
+\end{multicols}
+
+\end{document}
diff --git a/texmf-dist/doc/latex/artthreads/artthreads_man.pdf b/texmf-dist/doc/latex/artthreads/artthreads_man.pdf
new file mode 100644
index 00000000..5420d548
--- /dev/null
+++ b/texmf-dist/doc/latex/artthreads/artthreads_man.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/artthreads/artthreads_man.tex b/texmf-dist/doc/latex/artthreads/artthreads_man.tex
new file mode 100644
index 00000000..93967ebf
--- /dev/null
+++ b/texmf-dist/doc/latex/artthreads/artthreads_man.tex
@@ -0,0 +1,434 @@
+\documentclass{article}
+\usepackage[fleqn]{amsmath}
+\usepackage[
+ web={centertitlepage,designv,forcolorpaper,tight*,latextoc,pro},
+ eforms,aebxmp
+]{aeb_pro}
+\usepackage{graphicx,array,fancyvrb}
+\usepackage{aeb_mlink}
+%\usepackage{myriadpro}
+%\usepackage{calibri}
+\usepackage[altbullet]{lucidbry}
+
+\usepackage[dvipsone,!viewMagWin,!preview]{artthreads}
+\usepackage{lipsum,multicol}
+\raggedcolumns
+
+\makeatletter
+\renewenvironment{quote}[1][]
+ {\def\@rgi{#1}\ifx\@rgi\@empty
+ \let\rghtm\@empty\else\def\rghtm{\rightmargin\leftmargin}\fi
+ \list{}{\rghtm} %{\rightmargin\leftmargin}%
+ \item\relax}
+ {\endlist}
+\makeatother
+\renewcommand{\hproportionwebtitle}{.8}
+
+%\usepackage{makeidx}
+%\makeindex
+\usepackage{acroman}
+
+
+\usepackage[active]{srcltx}
+
+\urlstyle{tt}
+
+%\def\tutpath{doc/tutorial}
+%\def\tutpathi{tutorial}
+%\def\expath{../examples}
+
+\DeclareDocInfo
+{
+ university={\AcroTeX.Net},
+ title={The \textsf{artthreads} Package
+ \texorpdfstring{\\[1ex]\Large}{: }Creating article threads for multi-column documents},
+ author={D. P. Story},
+ email={dpstory@acrotex.net},
+ subject=Documentation for artthreads package,
+ talksite={\url{www.acrotex.net}},
+ version={1.0},
+ Keywords={LaTeX, article threads, multi-column documents, AcroTeX},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) \the\year, D. P. Story},
+ copyrightInfoURL={http://www.acrotex.net}
+}
+
+\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}}
+
+\optionalPageMatter{%
+\begin{center}
+\fcolorbox{blue}{webyellow}{
+\begin{minipage}{.67\linewidth}%
+\textbf{\textcolor{red}{Stop!}} Before you read this documentation, take a moment to change
+your preferences: On your menu system if \app{Adobe Acrobat/Reader}, select \textsf{Edit\,>\,\penalty0Preferences\,>\,\penalty0General}, and \emph{clear
+the checkbox} for the item named \textsf{Make Hand tool select text \&
+images}, as listed under \textsf{Basic Tools} on that dialog box.
+(\textsf{Ctrl+K} or \textsf{Command+K} is the shortcut to the Preferences
+dialog box on \app{Windows} and \app{Mac OS}, respectively.) This makes reading an article thread
+much easier. Look for the hand icon with a down arrow on it.\hfill\dps
+\end{minipage}}
+\end{center}
+}
+
+
+\begin{docassembly}
+\addWatermarkFromFile({
+ bOnTop:false,
+ cDIPath:"C:/Users/Public/Documents/ManualBGs/Manual_BG_Print_AeB.pdf"
+});
+\executeSave();
+\end{docassembly}
+
+\begin{document}
+
+\maketitle
+
+\selectColors{linkColor=black}
+\tableofcontents
+\selectColors{linkColor=webgreen}
+
+\setAddToBorder{addtow=5bp,addtoh=0bp}
+
+\newcommand\showArtPanel[1][Article]{\pushButton[
+ \CA{#1}\A{\Named{ArticleThreads}
+ \Next{/S/Thread /D(\threadTitle)}}]{Btn}{}{11bp}}
+
+
+\section{Introduction}
+
+\setThreadInfo{title=Introduction,author=D. P. Story,
+ subject=Introduction to article threads,keywords={AeB, PDF, LaTeX}}%
+
+
+\begin{multicols}{2}
+\noindent\makebox[0pt][r]{\showArtPanel[Intro]\relax\kern11bp}%
+\bArticle{lift=\baselineskip,width=\linewidth,height=2.5in}%
+\noindent Through the commands of the \pkg{artthreads} package, you can
+create \textit{article threads}, a concept/feature of \app{Adobe
+Reader/Acrobat} that has been around since the product's beginning. The use
+of article threads typically only makes sense in a document in which the text
+is in a multi-column format, or, perhaps, a single narrow column.
+
+When a document uses a multiple column format, it is often difficult, or at
+the very least inconvenient, to read it. When document page is fit into the viewing
+window, the text may be two small to read. This requires the reader, that's
+you, to adjust the magnification (zoom) level of the page to fit a column of
+text comfortably in the application window.\vadjust{\noindent
+\cArticle{lift=2\baselineskip,width=\linewidth,height=2.5in}}
+Once the column is fitted, additional navigation is needed to move the window
+view down one column, then up to the top of the next column. Think of trying
+to read a digital newspaper with many columns. Such navigation is tedious and
+distracts from reading the information begin presented.
+
+Set the article threads after the composition of the document is completed.
+The method of setting the threads is \emph{very visual} not automatic as in
+the \pkg{threadcol} package of Scott Patkin.
+
+\end{multicols}
+
+\section{Navigating an article thread}
+
+\setThreadInfo{title=Navigation,author=D. P. Story,
+ subject=Navigation to article threads,keywords={AeB, PDF, LaTeX}}%
+
+\begin{multicols}{2}
+\noindent\makebox[0pt][r]{\showArtPanel[Navigate]\kern11bp}%
+\bArticle{lift=\baselineskip,width=\linewidth,height=4.2in}%
+\noindent Perhaps you noticed the `Intro' button on exhibit in this previous
+section or the `Navigate' button in this section as well. Clicking these
+buttons reveals the \textsf{Article} panel in the left-hand navigation pane.
+Listed there are all the articles created for this documentation.
+Right-clicking on any of the listed article names brings up a context menu;
+select \textsf{Read Article} to begin reading or choose \textsf{Properties}
+to see the thread info, which (may) include the title, author, subject, and
+keywords.
+
+\paragraph*{Begin an article thread.} There are two of ways to begin
+reading a thread: (1)~first open the \textsf{Article} pane
+(\textsf{View\,\penalty0>\penalty0\,\penalty0Show/Hide\,\penalty0>\,\penalty0Navigation
+Panes\,>\,Articles}), left-click an article title and select \textsf{Read
+Article}, or simple double-click an article title; or (2) place your mouse
+pointer over text, if it changes to a hand with an arrow on it, the text is
+part of an article thread, simply click on it to begin.
+
+\paragraph*{Navigating a thread.} Once you have initiated \textsf{Read
+Article}, you can navigate through the article thread using any of the
+following methods\vadjust{\noindent
+\cArticle{lift=2\baselineskip,width=\linewidth,height=4.2in}}: (1)~click in
+an area when the mouse is a hand icon with an arrow on it to move forward
+(shift-click to move back); (2) press the \textsf{Enter} key to move forward
+(or shift+\textsf{Enter} to move back); or (3) the page down (or page up)
+keys will also move you around within the thread.
+
+There may be problems in getting the hand icon with the arrow on it to
+appear, if this is the case, open the \textsf{Preferences} menu,
+\textsf{Edit\,>\,\penalty0Preferences\,>\,\penalty0General}, and \emph{clear
+the checkbox} for the item named \textsf{Make Hand tool select text \&
+images}, as listed under \textsf{Basic Tools} on that dialog box.
+(\textsf{Ctrl+K} or \textsf{Command+K} is the shortcut to the Preferences
+dialog box on \app{Windows} and \app{Mac OS}, respectively.)
+
+\paragraph*{Exploring threads.} Now that you have explored the operation of
+article threads and see how they work, the next thing to do is to see how
+they are created with the \pkg{artthreads} package.
+\end{multicols}
+
+\section{Creating article threads}
+
+We begin by including the \pkg{artthreads} package in your document.
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\usepackage[!ameta(options)]{artthreads}
+\end{Verbatim}
+The \pkg{artthreads} package brings in the \pkg{fitr} package
+(\url{http://ctan.org/pkg/fitr}), many commands from that package are used.
+In fact, the same set of package options are used.
+
+\setThreadInfo{title=Package options,author=D. P. Story,
+ subject=options of the artthreads package,keywords={AeB, PDF, LaTeX}}%
+
+
+\paragraph*{Package options.}
+The package has ten options: six driver options and four viewing
+options.
+\begin{multicols}{2}\previewtrue\viewMagWintrue
+\setAddToBorder{addtow=10bp,addtoh=10bp}
+\begin{itemize}
+\item \bArticle{lift=\baselineskip,width=\linewidth,height=2.5in}%
+ \textbf{Driver Options:} These are \texttt{dvips} (the default),
+ \texttt{dvipsone}, and \texttt{pdftex} (which includes the use of
+ \textsf{lualatex}), \texttt{dvipdfm}, \texttt{dvipdfmx}, and
+ \texttt{xetex}. If you specify one of the first two, it is assumed that
+ you are using \textsf{Adobe Distiller} as your PDF creator.
+
+ The \textsf{fitr} package checks whether the \textsf{web} package is
+ loaded, if so, its uses the driver used by \textsf{web}; otherwise
+ \textsf{fitr} auto-detects for \textsf{pdftex} and \textsf{xetex}. If
+ no driver is passed, and neither \textsf{pdftex} nor \textsf{xetex} are
+ detected, then \textsf{dvips} is the default driver.
+
+\setAddToBorder{addtow=0bp,addtoh=0bp}
+
+ \item \cArticle{lift=\baselineskip,width=\linewidth,height=2.5in}%
+ \textbf{Viewing Options:} When you specify \texttt{preview}, the
+ bounding boxes for the article threads are shown in the
+ dvi-previewer (or the PDF document); you can turn off this preview
+ by specifying \texttt{!preview} (or removing \texttt{preview}
+ entirely from the option list). The other option type is
+ \texttt{viewMagWin}, when this option the viewing window, a
+ rectangular region, becomes visible in the dvi-previewer (or in the
+ PDF document); specifying \texttt{!viewMagWin} turns off this type
+ of preview.
+
+%\item[] The effects of the viewing options will be illustrated later in this
+%document, see \autoref{previewEx} on page~\pageref*{previewEx}.
+\end{itemize}
+\end{multicols}
+You'll notice the two rectangular regions around the left column. The inner
+one is made visible by the \texttt{preview} option (or locally by
+\cs{previewtrue}), you can see that it covers `precisely' the text of the
+item. The outer rectangle is exposed by the \texttt{viewMagWin} option (or
+locally by \cs{viewMagWintrue}). When you view the thread -- and you do not
+define an `extra' border around the viewing area -- the inner rectangle is
+use. The text in this inner rectangle may not be entirely adequate for
+reading as it is very `tight' around the text. It is for this reason, we
+expand the viewing area by a specified amount. Compare the reading comfort of
+the left column verses the right column. (Try viewing the column thread with
+a narrow application window.)
+
+You may have also that the viewer returns to the same page view the page was
+in prior to reading the thread.
+
+\paragraph*{The article info.} The specifications for an article thread require
+it to have a title, and to optionally have key-values for author, subject, and keywords.
+\bVerb\takeMeasure{\string\setThreadInfo\{title=\ameta{text},author=\ameta{text},}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\setThreadInfo{title=!ameta(text),author=!ameta(text),
+!qquad(subject=!ameta(text),keywords={!ameta(list)})}
+\end{dCmd}
+\endgroup\noindent If no value of \texttt{title} is provided, \pkg{artthreads} uses
+a generated value of \texttt{thread-\ameta{num}}. The \cs{setThreadInfo}
+command must appear prior to the opening the thread (see \cs{bArticle} below)
+to which it applies, if it does not, a {\LaTeX} error occurs. The drivers
+\opt{dvips}, \opt{dvipsone}, \opt{xetex} (\opt{dvipdfm}, \opt{dvipdfmx})
+support all four keys; however, \opt{pdftex} only supports the \texttt{title}
+key.
+
+\paragraph*{The article thread commands.} There is one command
+(\cs{bArticle}) for beginning an article thread, and another (\cs{cArticle})
+to continue that thread.
+\bVerb\takeMeasure{\string\bArticle\darg{\meta{KV-pairs}}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\bArticle{!meta(KV-pairs)}
+\cArticle{!meta(KV-pairs)}
+\end{dCmd}
+\endgroup\noindent Before illustrating \cs{bArticle} and \cs{cArticle}, the
+\meta{KV-pairs} are described first.
+\begin{itemize}
+\item \texttt{width=\ameta{length}}: The value of \opt{width} sets the
+ width of the thread to \ameta{length}; \ameta{length} is usually, but
+ not always, \cs{linewidth}. Dimension arithmetic is supported with the
+ value of \opt{width} (\texttt{width=\cs{linewidth}\,+\,3pt}, for
+ example).
+
+\item \texttt{height=\ameta{length}}: The value of \opt{height} sets the
+ height of the thread to \ameta{length}. As with the \opt{width} key,
+ dimension arithmetic is supported by \opt{height}; for
+ example, \texttt{height=3in\,+\,2\cs{baselineskip}}.
+
+\item \texttt{lift=\ameta{length}}: This key-value lifts (raises) the
+ article thread window up (or down) by an amount of \ameta{length}; for
+ example, \texttt{lift=15pt} (or \texttt{lift=-15pt}). The default is a
+ lift of \texttt{0pt}. Dimension arithmetic is supported.
+
+\item \texttt{shift=\ameta{length}}: The amount of horizontal shift of the
+ article thread; positive to the right, negative to the left. For
+ example, \texttt{shift=-1in} shifts the button/viewing window 1 inch to
+ the left. The default is \texttt{0pt}. Dimension arithmetic is supported.
+\end{itemize}
+One last command before the examples.
+
+\paragraph*{Setting the expanded (add to) border.} It is often convenient to
+set the basic thread dimensions (\texttt{width=\cs{linewidth},height=3in}),
+but is harder to expand and position the thread to a wider or higher thread
+region. Use the \cs{setAddToBorder} command to expand, or add to, the
+dimensions of the thread rectangular dimensions.
+\bVerb\takeMeasure{\string\setAddToBorder\darg{addtow=\ameta{length},addtoh=\ameta{length}}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\setAddToBorder{addtow=!ameta(length),addtoh=!ameta(length)}
+\end{dCmd}
+\endgroup\noindent The \opt{addtow} key adds \ameta{length} to the left and right
+sides of the rectangular boundary of the thread; \opt{addtoh} adds
+\ameta{length} to the top and bottom of the rectangular boundary of the
+thread. The default dimensions for these two keys are \texttt{0pt}.
+\begin{multicols}{2}\setThreadInfo{title=Illustrate \string\\setAddToBorder}%
+\noindent\setAddToBorder{addtow=10bp,addtoh=10bp}\previewtrue\viewMagWintrue
+{\small\verb|\setAddToBorder{addtow=10bp,|\\
+\null\qquad\verb|addtoh=10bp}|}\\\vadjust{\noindent\bArticle{lift=3\baselineskip,width=\linewidth,height=6\baselineskip}}
+In this column we've set a \texttt{10bp} border around the thread. When you click
+on the reading area, the viewer should zoom to the width of the wider rectangle.
+\vfill
+\columnbreak
+\noindent\setAddToBorder{addtow=4bp,addtoh=4bp}\previewtrue\viewMagWintrue
+{\small\verb|\setAddToBorder{addtow=4bp,|\\
+\null\qquad\verb|addtoh=4bp}|}\\\vadjust{\noindent\cArticle{lift=3\baselineskip,width=\linewidth,height=6\baselineskip}}
+In this column, we've set a \texttt{4bp} border. Again, when you click on the
+reading area, the viewer should zoom to the width of the wider rectangle.
+\end{multicols}
+\newtopic\noindent\textbf{Tip:} The values of \opt{addtow} and \opt{addtoh} should be in big
+points (\texttt{bp}) for greater accuracy as these are converted to
+Postscript or PDF dimensions, depending on the driver.
+
+\paragraph*{Methodology with examples.} Now we've come to final part of this
+documentation, a description of the methodology, accompanied by examples. As
+pointed out early in this documentation, the method for applying the article
+threads is very visual. Compose your document content first, and then insert the
+document threads. Page~\arabic{page}
+\begin{center}\previewtrue\viewMagWintrue
+\begin{minipage}{.8\linewidth}\parindent=20pt\relax
+We illustrate the techniques in a single column of goodly width.
+First we declare our add to border dimension and article info
+\begin{Verbatim}[fontsize=\small]
+\setAddToBorder{addtow=4bp,addtoh=4bp}
+\setThreadInfo{title=Methodology,author=D. P. Story}
+\end{Verbatim}
+There are two places to begin a thread: (1) at the very beginning of a paragraph;
+and (2) from within a paragraph. Method~(1) is preferred. We begin the next paragraph
+with
+\begin{Verbatim}[fontsize=\small]
+\noindent\bArticle{lift=\baselineskip,
+ width=\linewidth,height=1in+3\baselineskip}%
+Now we begin our deep thoughts...
+\end{Verbatim}
+\setAddToBorder{addtow=4bp,addtoh=4bp}
+\setThreadInfo{title=Methodology,author=D. P. Story}
+\noindent\bArticle{lift=\baselineskip,width=\linewidth,height=1in+3\baselineskip}%
+Now we begin our deep thoughts. During this development phase, the options
+\opt{preview} and \opt{viewMagWin} should be in effect. In a \EXT{DVI}
+viewer, we can see the bounding rectangles. We can see its too low, too long
+and so on. For users of \app{pdflatex}, \app{xelatex}, etc., view your
+documents in the \EXT{DVI} previewer first (or view them as a \EXT{PDF}).
+I've used \texttt{lift=\string\baselineskip} to raise up the thread rectangle
+by that mount to enclose the first line. The value of \opt{width} is usually
+\cs{linewidth}, but the value of \opt{height} may have to be adjusted, in this
+example, I've ``tweaked'' the \texttt{1in} by \texttt{3\string\baselineskip}.
+
+\newtopic Naturally, after you're satisfied, you then remove
+\opt{preview} and \opt{viewMagWin} or change them to
+\opt{!preview} and \opt{!viewMagWin}. Another possible location is from within
+a paragraph, here, we continue the previous thread using the \cs{cArticle} command
+in conjunction with the \cs{vadjust} {\TeX} primitive\vadjust{\noindent
+\cArticle{lift=5\baselineskip,width=\linewidth,height=2in+\baselineskip}}.
+Between the end of the word `primitive' and the period (.) ending the sentence, I've place
+\begin{Verbatim}[fontsize=\small]
+primitive\vadjust{\noindent\cArticle{lift=5\baselineskip,
+ width=\linewidth,height=2in+\baselineskip}}. Between the
+\end{Verbatim}
+The value of \texttt{lift=5\string\baselineskip} we chosen because the
+original positioning of the thread rectangle was too low by about five lines.
+The value of \texttt{height} was chosen to cover the paragraph once the
+complete paragraph was composed.
+
+\previewfalse\viewMagWinfalse
+We now declare \verb|\previewfalse\viewMagWinfalse|.
+
+\noindent\cArticle{lift=\baselineskip,width=\linewidth,height=.5in+3\baselineskip}\indent
+Of course, in this example, it was entirely unnecessary to insert the
+\cs{cArticle} mid-paragraph, it would have been better placed at the
+beginning of the paragraph. Placing \cs{cArticle} mid-paragraph is useful for
+multi-column formats. When the paragraph flows from the first column the
+second column, use the \cs{vadjust} technique to cover the portion of the
+text that flows to the right column.
+\end{minipage}
+\end{center}
+By the way, notice the use of \cs{noindent}, this is
+oftentimes needed to position the article thread in the left margin of the
+text block.
+
+\paragraph*{The demo file.} The demo file \texttt{article\_tech.tex}
+reproduces the discussion on methods, it is found in the \texttt{examples}
+folder.
+
+
+\setThreadInfo{title=Final Thread,{author=D. P. Story, Ph.D.}}
+
+\newtopic\noindent In this documentation, I've covered the content with many article threads; normally,
+for multi-column content, one thread per column is sufficient.
+\begin{multicols}{2} %\previewtrue
+\noindent\bArticle{lift=\baselineskip,width=\linewidth,height=6.7in}\indent
+\lipsum[2]
+
+\lipsum[4]
+
+\lipsum[6]
+
+\noindent\cArticle{lift=3\baselineskip,width=\linewidth,height=6.7in}\indent
+\lipsum[7]
+
+\lipsum[10]
+
+\lipsum[12]
+
+\noindent\cArticle{lift=10\baselineskip,width=\linewidth,height=4in-\baselineskip}\indent
+\lipsum[14]
+
+\noindent\cArticle{lift=8\baselineskip,width=\linewidth,height=4in-\baselineskip}\indent
+\lipsum[16]
+
+\end{multicols}
+
+\paragraph*{The demo file.} The demo file for this package is \texttt{article\_tst.tex},
+available in the \texttt{examples} folder.
+
+
+\section{My retirement}
+
+Now, I simply must get back to it. \dps
+
+\end{document}
diff --git a/texmf-dist/doc/latex/cntdwn/README b/texmf-dist/doc/latex/cntdwn/README
new file mode 100644
index 00000000..1b7c1eae
--- /dev/null
+++ b/texmf-dist/doc/latex/cntdwn/README
@@ -0,0 +1,46 @@
+The cntdwn package
+Dated: 2014/11/26
+
+Version v.6 fixes a problem brought on by hyperref. The latter package
+removes underscores from field names. We have a workaround for that.
+
+New: The original version, v.3, had a simple way of calculating the number
+of years (based on 365 days to the year) for a long countdown. This was
+not a problem for counts less than one year, or for counts that spanned
+several years that did not include leap years. This version, v.5, takes
+into account the presence of leap years and now gives a correct year, day,
+hour, minute, and second representation of the time difference between the
+current time and the target event. In v.5a, a new key-value
+pair,autorunenabled, is added; for the long countdown,
+autorunenabled=false suppresses the autorun feature and can be
+dynamically turned on or off using JavaScript.
+
+The cntdwn package provides three sets of timers:
+
+1. A short countdown (or count up) to an event. (Short being defined as
+ less than a day.) The short countdown is designed for talks or
+ presentations. There are three notification times, to announce to the
+ speaker and audience that time is running out.
+2. A long countdown to an event in the (distant) future. There are three
+ notifications leading up to the main event (when counter reaches 0 seconds), and
+ three notifications following the main event.
+3. Clock counters. The cntdwn package allows you to create a clocks that
+ display time and date. Clocks can show local time or time in any
+ foreign time zone.
+
+Extensive customizations are possible, either by redefining commands, or
+creating your own JavaScript functions (using the eforms package) to
+handler the various notification time events.
+
+Requirements: The eforms and hyperref packages.
+
+Simple examples of each type accompany the distribution, advanced examples
+have been published on my AeB Blog site
+http://www.math.uakron.edu/~dpstory/aebblog.html
+
+Now, I simply must get back to my retirement.
+
+Dr. D. P. Story
+www.acrotex.net
+dpstory@uakron.edu
+dpstory@acrotex.net
diff --git a/texmf-dist/doc/latex/cntdwn/cntdwn_man.pdf b/texmf-dist/doc/latex/cntdwn/cntdwn_man.pdf
new file mode 100644
index 00000000..67326906
--- /dev/null
+++ b/texmf-dist/doc/latex/cntdwn/cntdwn_man.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/cntdwn/cntdwn_man.tex b/texmf-dist/doc/latex/cntdwn/cntdwn_man.tex
new file mode 100644
index 00000000..4948e6bd
--- /dev/null
+++ b/texmf-dist/doc/latex/cntdwn/cntdwn_man.tex
@@ -0,0 +1,743 @@
+% makeindex < aebpro_man.idx > aebpro_man.ind
+\documentclass{article}
+%\usepackage[fleqn]{amsmath}
+\usepackage[
+ web={centertitlepage,designv,tight,
+ forcolorpaper,latextoc,pro},%usesf,
+ eforms,aebxmp
+]{aeb_pro}
+%\usepackage{multicol}
+\usepackage{array}
+\usepackage[altbullet]{lucidbry}
+\usepackage[shortcount,longcount]{cntdwn}
+%\usepackage[usecmtt]{myriadpro}
+
+%\DeclareInitView
+%{%
+% layoutmag={mag=100},
+%% windowoptions={fit}
+%}
+
+
+\usepackage{makeidx}
+\makeindex
+\usepackage{acroman}
+
+\usepackage[active]{srcltx}
+
+\def\expath{../examples}
+
+\urlstyle{rm}
+
+%\def\tutpath{doc/tutorial}
+%\def\tutpathi{tutorial}
+
+\DeclareDocInfo
+{
+ university={\AcroTeX.Net},
+ title={The \texorpdfstring{\textsf{cntdwn} Package\\[1em]}{: }
+ Creating short and long countdowns},
+ author={D. P. Story},
+ email={dpstory@acrotex.net},
+ subject={Creating short and long countdowns},
+ talksite={\url{www.acrotex.net}},
+ version={1.0},
+ keywords={countdown timer},
+ 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$}}$}
+
+\universityLayout{fontsize=Large}
+\titleLayout{fontsize=LARGE}
+\authorLayout{fontsize=Large}
+\tocLayout{fontsize=Large,color=aeb}
+\sectionLayout{indent=-40pt,fontsize=large,color=aeb,afterskip=1sp}
+\subsectionLayout{indent=-20pt,color=aeb,afterskip=1sp}
+\subsubsectionLayout{indent=0pt,color=aeb,afterskip=1sp}
+\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}}
+
+\newenvironment{eqComments}[1][\strut]{\smallskip\leftskip-\labelwidth
+\item[]\textbf{\textcolor{blue}{#1}}}{\par\smallskip}
+
+%--------------------
+\setShortCntDwn{Timer1}{%
+ length=1*\minutes,
+ notify1=45*\seconds,
+ notify2=30*\seconds,
+ notify3=15*\seconds
+}
+\setLongCntDwn{NewYearsLocal}{%
+ date=2011/01/01,
+ time=00:01:00,
+}
+\setLongCntDwn{NewYearsCET}{%
+ date=2011/01/01,
+ time=00:01:00,
+ tzoffset=+0100
+}
+\setClockTimer{LocalClock}{}
+\setClockTimer{CESTClock}{tzoffset=+0200}
+%--------------------
+
+
+%\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}\label{s:intro}
+
+The \textsf{cntdwn} package provides two types of countdowns, short and
+long.
+\begin{itemize}
+ \item A short countdown, accessed through the \texttt{shortcount}
+ option, is a countdown (or count-up) that is for a relatively short time
+ period (less than a day). Such a countdown is designed for a talk (or
+ presentation).
+ \item A long countdown, accessed through the \texttt{longcount}
+ option, is a countdown to a distant event, perhaps many days or even
+ years in the future.
+ \item As a bonus of long countdown, a clocks can be defined for local
+ or time zones.
+\end{itemize}
+Each type of countdown (clocks excepted) has several events: (1) the main event, which is the
+target of the countdown; (2) pre-events, events that occur \textit{before} the
+occurrence of the main event; and (3) post-events, events that occur \textit{after} the
+occurrence of the main event. Each event occurs at a definable instant in
+time, and may have a (JavaScript) action associated with the event.
+
+\section{Requirements and Sample files}
+
+The \textsf{cntdwn} requires the \textsf{eforms} package, part of AeB (the
+{\AcroTeX} eDucation Bundle), and, of course, the \textsf{hyperref} package.
+
+The PDFs need to be viewed in Adobe Reader (or Acrobat), not some other nonconforming
+PDF viewer that does not support document level JavaScript.
+
+Basic examples are provided in the \texttt{examples} folder; advanced
+examples can be found, in time, on my \href{http://www.math.uakron.edu/~dpstory/aebblog.html}{{\AEB} Blog} site,
+\url{http://www.math.uakron.edu/~dpstory/aebblog.html}.
+
+\section{The short countdown}\label{s:short}
+
+To input the code for the short count, type either\\[6pt]
+\hspace*{20pt}\verb!\usepackage{cntdwn}! or
+\verb!\usepackage[shortcount]{cntdwn}!\\[6pt]
+in the preamble.
+
+We begin with an example of the default behavior of a short countdown:\\[6pt]
+\hspace*{20pt}\cntdwnDisplay{Timer1}{.5in}{11bp}
+\cntdwnStartT{Timer1}{11bp}{11bp}
+\cntdwnPauseT{Timer1}{11bp}{11bp}
+\cntdwnStopT{Timer1}{11bp}{11bp}\\[6pt]
+To start the countdown, press the Start button (the second form field from
+the left). The left-most field is a text field, the others are buttons.
+The original idea behind this behavior was that this seemed a nice way to
+do a count for a talk: (1) at a preselected time (45 seconds in this
+example) the first button would turn green indicating to the speaker that
+time is running out; (2) a little later, the second notification signal
+appears, a yellow button (at 30 seconds); at a third notification time,
+the third button starts blinking red (at 15 seconds), this tells the
+speaker to wrap it up; (4) finally, at the end of the defined length of
+the timer, the third button stops blinking indicating that the speaker's
+time is up.
+
+The buttons also play roles as controls over the counter, the three
+buttons are \textbf{Start}, \textbf{Pause}, and \textbf{Stop}. The user can press the \textbf{Pause} button to
+pause the count (without taking away from his/her time), then restart it
+by pressing the \textbf{Start} button.
+
+The code for the above countdown consisted to two sets of lines. In the
+preamble, we find,
+\begin{verbatim}
+ \setShortCntDwn{Timer1}{%
+ length=1*\minutes,
+ notify1=45*\seconds,
+ notify2=30*\seconds,
+ notify3=15*\seconds
+ }
+\end{verbatim}
+This defines a timer name \texttt{Timer1}, with key-value pairs give
+above. The length of the countdown is 1 minutes, following by the
+defining of three notification times. The mean of these key-values is
+clear in light of the above example.
+
+The second line of code is the laying down of the timers themselves.
+\begin{verbatim}
+ \cntdwnDisplay{Timer1}{.5in}{11bp}
+ \cntdwnStartT{Timer1}{11bp}{11bp}
+ \cntdwnPauseT{Timer1}{11bp}{11bp}
+ \cntdwnStopT{Timer1}{11bp}{11bp}
+\end{verbatim}
+The first argument of each is the name of the timer to use,
+\texttt{Timer1}, in this case. All of these form fields are optional; if
+none is included in the document, the timer ticks away
+silently.\footnote{Why would anyone do this, you might ask?}
+
+\subsection{Using \texorpdfstring{\protect\cs{setShortCntDwn}}{\CMD{setShortCntDwn}}
+in the preamble}
+
+For each short countdown timer, the \cs{setShortCntDwn} must be used to
+define the properties of the timer.
+\begin{dCmd*}{.6\linewidth}
+\setShortCntDwn{<t_name>}{<key-values>}
+\end{dCmd*}
+\CmdDescription The command defines the properties of the countdown.
+Internally, the command defines macros \cs{seconds}, \cs{minutes},
+and \cs{hours}. For key-value pairs that take a time as its value, use
+these commands to define the time value, for example, 20~minutes should be
+denoted \texttt{20*\cs{minutes}} (use \texttt{*} for multiplication); for
+1~minute and 30~seconds, you can type either \texttt{1*\cs{minutes}+\texttt{30*\cs{seconds}}}
+or, alternatively, \texttt{1.5*\cs{minutes}}; and so on.
+
+\PD The first parameter \texttt{<t\_name>} is a name you assign the timer. The
+name must be unique among all timer names defined in the document. The
+second parameter consists of key-value pairs, described below.
+\KVP The second parameter takes several key-value pairs.
+\begin{itemize}
+ \item \texttt{length}: The length of the countdown, the default is 20
+ minutes. (\texttt{20*\cs{minutes}})
+ \item \texttt{stopwatch}: A Boolean, which if \texttt{true}, the counter counts up, like
+ a stopwatch; he default is \texttt{false}, in this case the
+ counter counts down. If stopwatch is not in the list of
+ parameters, the counter counts down.
+ \item \texttt{onfinish}: A choice key that determines the behavior of
+ the counter when it reaches the main time event. Possible values
+ are \texttt{stop} (the default) and \texttt{continue}. If
+ \texttt{onfinish=continue}, the clock continues to count even
+ after the main time has been attained.
+ \item \texttt{endmsg}: When the timer reaches the main time event,
+ the default behavior of the timer is to write a message to a
+ text field created by the \cs{cntdwnEndTarget} command. The
+ default message is ``This ends the Presentation, any
+ questions?'' This message can be changed for this timer using
+ the \texttt{endmsg} key. To globally change the message,
+ redefine the command \cs{cnddwnDefaultEndMsg}. The
+ redefinition of this command must occur before the expansion
+ of any \cs{setShortCntDwn} command.
+\end{itemize}
+The next three keys take time as a value. Use the special macros
+\cs{hours}, \cs{minutes}, and \cs{seconds}, as explained above.
+\begin{itemize}
+ \item \texttt{notify1}: The first notification time; the time
+ before/after the main time event. The time is a prior time if
+ the counter is counting down; and is a post time if the
+ counter is counting up (\texttt{stopwatch=true}). The default is
+ \texttt{5*\cs{minutes}}.
+ \item \texttt{notify2}: The second notification time; the time
+ before/after the main time event. The time is a prior time if
+ the counter is counting down; and is a post time if the
+ counter is counting up (\texttt{stopwatch=true}). The default is
+ \texttt{3*\cs{minutes}}.
+ \item \texttt{notify3}: The third notification time; the time
+ before/after the main time event. The time is a prior time if
+ the counter is counting down; and is a post time if the
+ counter is counting up (\texttt{stopwatch=true}). The default is
+ \texttt{1*\cs{minutes}}.
+\end{itemize}
+If \texttt{stopwatch=false}, the default, the counter is counting down to
+the main time event (at time 0 seconds); in this case \texttt{notify1 >
+notify2 > notify3}. If \texttt{stopwatch=false}, the counter is counting
+up to the main time event (at time \texttt{length}); in this case
+\texttt{notify1 < notify2 < notify3}. If these restrictions are not met,
+the timer and notification may not be as expected.
+
+The next four keys concern the actions that are taken at the four
+notification times (\texttt{notify1}, \texttt{notify2}, \texttt{notify3},
+and the main time event). These actions are in the form of JavaScript
+functions, which may be re-defined by the document author to obtain custom
+behaviors.
+\begin{itemize}
+ \item \texttt{event1}: A JavaScript function (which the document
+ author can create) to handle the first notification event. The default
+ event turns the \textbf{Start} button green and causes a beep to sound.
+ \item \texttt{event2}: A JavaScript function (which the document
+ author can create) to handle the second notification event. The default
+ event turns the \textbf{Pause} button yellow and causes a beep to sound.
+ \item \texttt{event3}: A JavaScript function (which the document
+ author can create) to handle the third notification event. The default
+ event causes the \textbf{Stop} button to blink red and causes a beep to sound.
+ \item \texttt{endEvent}: When main time is reached (time 0 or
+ \texttt{length}), this function turns the \texttt{Stop} button to solid red
+ (non-blinking), and writes a message to the text field created by the
+ command \cs{cntdwnEndTarget}.
+ \item \texttt{startcolor}: The color used by the default \texttt{event1} function
+ to color the \textbf{Start} button. The color is a JavaScript color; the
+ default is \texttt{color.green}.
+ \item \texttt{pausecolor}: The color used by the default \texttt{event2} function
+ to color the \textbf{Pause} button. The color is a JavaScript color; the
+ default is \texttt{color.yellow}.
+ \item \texttt{stopcolor}: The color used by the default \texttt{event3} and
+ \texttt{endEvent} functions to color the \textbf{Stop} button.
+ The color is a JavaScript color; the default is \texttt{color.red}.
+ \item \texttt{autorun}: A Boolean that determines whether the count
+ begins when the page containing the counter is opened. The default is
+ \texttt{false}.
+ \item \texttt{refreshrate}: The refresh rate of the counter, the
+ default is 1000 (milliseconds).
+\end{itemize}
+
+\subsection{Commands that go in the body}
+
+The main field for the counter is \cs{cntdwnDisplay}, and it has three
+supporting fields \cs{cntdwnStartT}, \cs{cntdwnPauseT}, and
+\cs{cntdwnStopT}.
+
+\begin{dCmd*}{\linewidth}
+\cntdwnDisplay[<eforms_options>]{<t_name>}{<width>}{<height>}
+\cntdwnStartT[<eforms_options>]{t_name}{<width>}{<height>}
+\cntdwnPauseT[<eforms_options>]{t_name}{<width>}{<height>}
+\cntdwnStopT[<eforms_options>]{t_name}{<width>}{<height>}
+\end{dCmd*}
+\PD The first optional parameter is used to change the appearance of the
+fields (these fields use the \textsf{eforms} package). The second
+parameter is the name of a timer (\texttt{<t\_name>}) that has already been
+defined by \cs{setShortCntDwn}. The last two parameters sets the width and
+height of the form fields.
+\CmdDescription All four of these fields are optional (no JavaScript
+exceptions are thrown if they do not exist). \cs{cntdwnDisplay} show the
+countdown of the timer; \cs{cntdwnStartT} is the start button,
+\cs{cntdwnPauseT} is the pause button, and \cs{cntdwnStopT} is the stop
+button. The capital letter \texttt{T} indicates that these buttons are the
+\texttt{T}arget of the default event functions. Below, we describe
+non-target start, pause, and stop buttons.
+
+When the timer reaches it main time event (time 0 for a
+countdown clock, and time \texttt{length} for a count-up clock), the default
+endEvent writes message to the multiline text field created by
+\cs{cntdwnEndTarget}.
+
+\begin{dCmd*}{\linewidth}
+\cntdwnEndTarget[<eforms_options>]{t_name}{<width>}{<height>}
+\end{dCmd*}
+\PD The four parameters are the same as described above for the
+\cs{cntdwnDisplay} field, for example. This field is optional, if it does
+not exist, no exception is thrown.\footnote{Actually, an exception is
+thrown, but it is ``caught'' so no harm is done.}
+
+The \textsf{cntdwn} package also provides three form field buttons for
+starting, pausing, and stopping the target count. The parameters are the
+same as those of the `\texttt{T}' counterparts.
+\begin{dCmd*}{\linewidth}
+\cntdwnStart[<eforms_options>]{t_name}{<width>}{<height>}
+\cntdwnPause[<eforms_options>]{t_name}{<width>}{<height>}
+\cntdwnStop[<eforms_options>]{t_name}{<width>}{<height>}
+\end{dCmd*}
+
+\section{The long countdown}\label{s:long}
+
+A long countdown is one where the main countdown event is in the distant
+future. Since a short countdown is designed for less than one day, a long
+countdown is for times greater than a day.
+
+As an example, let us countdown to New Year's Day, which is 1~second after
+midnight.\\[6pt]
+\hspace*{20pt}\lcntdwnDisplay{NewYearsLocal}{3.5in}{11bp}\\[6pt]
+This countdown is in \emph{local time}. No matter where you are in the
+world, in whatever time zone, the countdown reflect the time until your
+New Year's Day.
+
+The time until my friend J\"{u}rgen celebrates New Year's Day is shown
+below:\\[6pt]
+\hspace*{20pt}\lcntdwnDisplay{NewYearsCET}{3.5in}{11bp}\\[6pt]
+Note that there is a difference in the count between the two counters, probably in
+the hour position; this is due difference between his timezone offset, and yours.
+This counter gives the time until my friend celebrates
+the New Year; it should read the same throughout the world, for he
+celebrates at a unique time in the world.
+
+As with the short countdown, to obtain such clocks we must set the
+clocks parameters in the preamble (using the \cs{setLongCntDwn} command),
+and place the countdown clock anywhere we like in the body of the
+document (using \cs{lcntdwnDisplay}).
+
+In the preamble, we have
+
+\begin{verbatim}
+ \setLongCntDwn{NewYearsLocal}{%
+ date=2011/01/01,
+ time=00:01:00,
+ }
+ \setLongCntDwn{NewYearsCEST}{%
+ date=2011/01/01,
+ time=00:01:00,
+ tzoffset=+0100
+ }
+\end{verbatim}
+The first one sets the parameters of the local clock. The \texttt{date} and \texttt{time}
+are specified in the obvious way. We set the counter to run and pause
+automatically. The parameters for the Central European New Year clock are the same,
+with one exception; I've included a value for the \texttt{tzoffset} key
+(time zone offset), this is \texttt{+0100} (in Germany during the Winter).
+
+In the body of the document, we place the countdown clocks,
+\begin{verbatim}
+ \lcntdwnDisplay{NewYearsLocal}{3.5in}{11bp}
+ ...
+ \lcntdwnDisplay{NewYearsCET}{3.5in}{11bp}
+\end{verbatim}
+As with the short count, we reference the counter parameters through the
+name of the counter, as defined using \cs{setLongCntDwn}.
+
+\subsection{Using \texorpdfstring{\protect\cs{setLongCntDwn}}{\CMD{setShortCntDwn}}
+in the preamble}
+
+For each long countdown timer, the \cs{setLongCntDwn} must be used to
+define the properties of the timer.
+\begin{dCmd*}{.6\linewidth}
+\setLongCntDwn{<t_name>}{<key-values>}
+\end{dCmd*}
+\CmdDescription The command defines the properties of the countdown.
+Internally, the command defines macros \cs{seconds}, \cs{minutes},
+\cs{hours}, \cs{weeks}, and \cs{years}. For key-value pairs that take a time as its value, use
+these commands to define the time value, for example, 20 minutes should be
+denoted \texttt{20*\cs{minutes}} (use \texttt{*} for multiplication); for
+2 weeks and 3 days, you can type either \texttt{2*\cs{weeks}+\texttt{3*\cs{days}}}
+or \texttt{13*\cs{days}}; and so on.
+
+\PD The first parameter \texttt{<t\_name>} is a name you assign the timer. The
+name must be unique among all timer names defined in the document. The
+second parameter consists of key-value pairs, described below.
+\KVP The second parameter takes several key-value pairs.
+\begin{itemize}
+ \item \texttt{date}: The date of the event. The value of the \texttt{date} key
+ has the form \texttt{YYYY/MM/DD}. If \texttt{date} key is not specified then
+ the default date of \texttt{1970/01/01} is used and a warning message is
+ written to the log. Valid variations on the \texttt{date} key are
+ \texttt{YYYY} (in which case the default month and day values are
+ used, \texttt{YYYY/01/01}, and \texttt{YYYY/MM} (again, the
+ default day is used \texttt{YYYY/MM/01}). Year must be specified with
+ four numbers, and the month and day with two numbers. (The first month
+ is 01.)
+ \item \texttt{time}: The time of the event on the specified date. The
+ format for the value of time is \texttt{HH:mm:SS} (hours, minutes,
+ seconds). All time components are specified with two digits, if
+ specified at all. The default value of \texttt{00} is taken for any
+ missing component. If no \texttt{time} is specified then
+ \texttt{00:00:00} is used; if \texttt{HH} only is specified, then the
+ value for time is \texttt{HH:00:00}; if \texttt{HH:mm} is specified,
+ then the value of time is \texttt{00:mm:00}.
+ \item \texttt{tzoffset}: The time zone offset of the time of the
+ event. If \texttt{tzoffset} is not specified, then time is interpreted
+ as local time. The format for \texttt{tzoffset} is \texttt{Z|OHHmm},
+ where \texttt{Z} means that local time is equal to UT (Universal
+ Time). For the \texttt{OHHmm} pattern, the \texttt{O} is \texttt{+} (plus) or
+ \texttt{-} (minus); a \texttt{+} (plus) means that local time is later than
+ UT, and a \texttt{-} (minus) means that local time is earlier than UT. For
+ example CST (Central Standard Time) is \texttt{-0600} while CET (Central European Time) is
+ \texttt{+0100}. See \url{http://www.timeanddate.com} for time zone
+ information. \texttt{HH} is the number of hours offset from UT and \texttt{mm} is the
+ number of minutes (some time zones are measured in hours and minutes,
+ for example, Australian Central Standard Time is \texttt{+0930}).
+ \item \texttt{refreshrate}: The refresh rate of the counter, the
+ default is 1000 (milliseconds).
+ \item \texttt{autorun}: A Boolean that determines whether the count
+ begins when the page containing the counter is opened. The default is
+ \texttt{true}.
+ \item \texttt{autopause}: A Boolean that determines whether the count
+ is paused when the page containing the counter is closed. The default is
+ \texttt{true}.
+ \item \texttt{autorunenabled}: A Boolean that enables the \texttt{autorun}
+ feature. The default value of this key is \texttt{true}. The purpose
+ of this key-value is to turn off \texttt{autorun} dynamically (through
+ JavaScript). The timer object that keeps all timer information has a
+ key named \texttt{bAutorunEnabled}. If the name of the timer is
+ \texttt{MyTimer}, and you execute
+ \texttt{\_oMyTimer.bAutorunEnabled=false}, the timer, if already paused,
+ \emph{will not start} (automatically) when the page containing the timer is
+ opened again. For an example of usage, see the file
+ \texttt{armistice\_day.pdf}, titled ``The cntdwn Package: Handling Notification Events for the Long Countdown
+ Timer, Remembrance Day,'' available on the \href{http://www.math.uakron.edu/~dpstory/aebblog.html}{AeB Blog site}.
+ \item \texttt{notify1}, \texttt{notify2}, \texttt{notify3}:
+ Leading up to the main time event are three \emph{pre-events} that
+ occur at times \texttt{notify1 > notify2 > notify3}
+ \emph{before} the main event. These are the first, second, and
+ third notification event times. The times are relative to the main
+ event, so if \texttt{notify1=1*\string\weeks}, then the
+ first notification event occurs 1 week \emph{before} the
+ main event.
+ \item \texttt{notify5}, \texttt{notify6}, \texttt{notify7}:
+ Following the main time event are three \emph{post-events}
+ that occur at times \texttt{notify5 < notify6 > notify7}
+ \emph{after} the main event. These are the fifth, sixth, and
+ seventh notification event times.\footnote{You may ask about
+ the fourth notification event, that event is the main time
+ event, the event that occurs when the countdown reaches 0.}
+ The times are relative to the main event, so if
+ \texttt{notify5=5*\string\hours}, then the fifth notification
+ event (the first after the main event) occurs 5 hours
+ \emph{after} the main event.
+ \item \texttt{eventhandler}: When the timer reaches any of the
+ seven notification times, a event handler function is
+ launched, the default function is \texttt{\_NoOpt}. The
+ \texttt{\_NoOpt} does nothing. The document author ca define
+ his/her own event handler using this key.
+
+ An event handler should take three parameters \texttt{doc},
+ \texttt{cTimer}, and \texttt{nEvent}. Use the \texttt{insDLJS} environment
+ to define your custom handler. A very simple example is
+\begin{verbatim}
+\begin{insDLJS}[myEventHandler]{dps}{My Event Handlers}
+function myEventHandler (doc,cTimer,nEvent) {
+ console.show();
+ console.println("Event number " + nEvent + " just occurred);
+}
+\end{insDLJS}
+\end{verbatim}
+and type \texttt{eventhandler=myEventHandle} as part of the
+key-values of \cs{set\-Long\-Cnt\-Dwn}.
+ \item \texttt{endtimecolor}: When main time event is reached (0
+ seconds), the color of the display is changed to the JavaScript color
+ determined by this key. The default is \texttt{color.red}.
+ \item \texttt{displayfunc}: This JavaScript function displays the
+ count; the default display function is \texttt{\_defaultLDisplayFunc},
+ it takes parameters\vspace{3pt}
+\begin{Verbatim}[fontsize=\small]
+function _defaultLDisplayFunc(f,nYears,nDays,nHours,nMinutes,nSeconds)
+\end{Verbatim}
+where \texttt{f} is the field object of the display field, the meaning of
+the other parameters is obvious.
+
+The default display function uses the strings year, years, day, days,
+hours, hour, minutes, minute, seconds, second. For localization of these
+strings, the document author may redefine the commands
+\begin{dCmd*}{.6\linewidth}
+\newcommand{\cntdwnYear}{year}
+\newcommand{\cntdwnYears}{years}
+\newcommand{\cntdwnDay}{day}
+\newcommand{\cntdwnDays}{day}
+\newcommand{\cntdwnHour}{hour}
+\newcommand{\cntdwnHours}{hours}
+\newcommand{\cntdwnMinute}{minute}
+\newcommand{\cntdwnMinutes}{minutes}
+\newcommand{\cntdwnSecond}{second}
+\newcommand{\cntdwnSeconds}{seconds}
+\end{dCmd*}
+ \item \texttt{onfinish}: A choice key that determines the behavior
+ of the counter when it reaches the main time event. Possible
+ values are \texttt{stop} and \texttt{continue} (the default).
+ If \texttt{onfinish=stop}, the clock stops the count
+ when main event time is attained (when the timer reaches 0
+ seconds).
+ \item \texttt{endmsg}: When the timer reaches the main time event
+ and \texttt{onfinish=stop}, the default behavior
+ is to write a message to a text field created by the
+ \cs{lcntdwnDisplay} command. The default message is ``The time
+ has expired.'' This message can be changed for this timer using
+ the \texttt{endmsg} key. To globally change the message,
+ redefine the command \cs{lcnddwnDefaultEndMsg}. The
+ redefinition of this command must occur before the expansion
+ of any \cs{setLongCntDwn} command.
+\end{itemize}
+
+\subsection{Commands that go in the body}
+
+In the body of the document there are several commands used with the long
+countdown timer.
+
+\begin{dCmd*}{\linewidth}
+\lcntdwnDisplay[<eform_options>]{<t_name>}{<width>}{<height>}
+\end{dCmd*}
+
+\CmdDescription The command creates a text field that holds the current
+countdown.
+
+\PD The first optional parameter is used to change the appearance of the
+field (these field use the \textsf{eforms} package). The second
+parameter is the name of a timer (\texttt{<t\_name>}) that has already been
+defined by \cs{setLongCntDwn}. The last two parameters sets the width and
+height of the form fields.
+
+\begin{dCmd*}{\linewidth}
+\lcntdwnToggle[<eform_options>]{<t_name>}{<width>}{<height>}
+\end{dCmd*}
+
+\CmdDescription The command creates a push button field that is used to
+toggle the count on and off (start and pause). Normally, this button is
+not needed, but there may be situations that it may be useful.
+
+\PD The first optional parameter is used to change the appearance of the
+field (these field use the \textsf{eforms} package). The second
+parameter is the name of a timer (\texttt{<t\_name>}) that has already been
+defined by \cs{setLongCntDwn}. The last two parameters sets the width and
+height of the form fields.
+
+\newtopic For example, the button \kern1bp\lcntdwnToggle{NewYearsLocal}{11bp}{11bp}\kern1bp
+\lcntdwnDisplay{NewYearsLocal}{2.5in}{11bp}\space\kern1bp
+will toggle the New Years Day counter.
+
+The verbatim listing is as follows:
+\begin{Verbatim}[fontsize=\small]
+For example, the button \lcntdwnToggle{NewYearsLocal}{11bp}{11bp}\kern1bp
+\lcntdwnDisplay{NewYearsLocal}{2.5in}{11bp} will toggle the New Years
+Day counter.
+\end{Verbatim}
+
+\subsection{The clock timer}
+
+I was just getting to wrap up this package, when I decided that it
+wouldn't be too much trouble to define clock timers. I include the code in
+as part of the \texttt{longcount} option because the code for the clock is
+derived from the \texttt{longcount} count. Multiple clocks can be
+activated at once, both clocks in the local time zone, as well as other
+time zones, as shown below.
+
+\begin{tabular}{rcc}
+&\textbf{Time}&\textbf{Date}\\[3bp]
+Local Time:&
+\cntdwnclocktime{LocalClock}{1in}{11bp}&
+\cntdwnclockdate{LocalClock}{1in}{11bp}\\[3bp]
+CEST:&
+\cntdwnclocktime{CESTClock}{1in}{11bp}&
+\cntdwnclockdate{CESTClock}{1in}{11bp}%
+\end{tabular}
+
+\newtopic\textbf{Note:}
+You can specify the time zone you want your clock to function in, there
+is, however, no way to automatically adjust time zone when there is a
+change from standard to/from summer time.\footnote{The statement has
+limited truth to it. If the dates are known when a given time zone changes
+UT offsets (between standard and summer/daylight savings time), you can
+write some JavaScript to make this adjustment dynamically. The problem is
+the dates/times may change from year to year. The ultimate solution is
+have access to a time/date database/server.}
+
+For these two clocks, we need to execute the command \cs{setClockTimer} in
+the preamble.
+\begin{verbatim}
+ \setClockTimer{LocalClock}{}
+ \setClockTimer{CESTClock}{tzoffset=+0200}
+\end{verbatim}
+The first parameter is the name of the clock and the second takes
+key-value pairs. For the \texttt{LocalClock}, we take the defaults,
+for the \texttt{CESTClock}, we set the time zone offset from UTC to CEST
+(Central European Summer Time).
+
+The code for the clocks themselves that appear above follows:
+
+\begin{verbatim}
+\begin{tabular}{rcc}
+&\textbf{Time}&\textbf{Date}\\[3bp]
+Local Time:&
+\cntdwnclocktime{LocalClock}{1in}{11bp}&
+\cntdwnclockdate{LocalClock}{1in}{11bp}\\[3bp]
+CEST:&
+\cntdwnclocktime{CESTClock}{1in}{11bp}&
+\cntdwnclockdate{CESTClock}{1in}{11bp}%
+\end{tabular}
+\end{verbatim}
+The current time is displayed by \cs{cntdwnclocktime} and the date is
+displayed by \cs{cntdwnclockdate}.
+
+\subsubsection{Using \texorpdfstring{\protect\cs{setClockTimer}}{\CMD{setClockTimer}}
+in the preamble}
+
+For each clock , the \cs{setClockTimer} must be used to
+define the properties of the clock.
+\begin{dCmd*}{.6\linewidth}
+\setClockTimer{<t_name>}{<key-values>}
+\end{dCmd*}
+\CmdDescription The command defines the properties of the clock.
+
+\PD The first parameter \texttt{<t\_name>} is a name you assign the clock. The
+name must be unique among all timer names defined in the document. The
+second parameter consists of key-value pairs, described below.
+\KVP The second parameter takes several key-value pairs.
+\begin{itemize}
+ \item \texttt{tzoffset}: The time zone offset of the time of the
+ event. If \texttt{tzoffset} is not specified, then time is interpreted
+ as local time. The format for \texttt{tzoffset} is \texttt{Z|OHHmm},
+ where \texttt{Z} means that local time is equal to UT (Universal
+ Time). For the \texttt{OHHmm} pattern, the \texttt{O} is \texttt{+} (plus) or
+ \texttt{-} (minus); a \texttt{+} (plus) means that local time is later than
+ UT, and a \texttt{-} (minus) means that local time is earlier than UT. For
+ example CST (Central Standard Time) is \texttt{-0600} while CET (Central European Time) is
+ \texttt{+0100}. See \url{http://www.timeanddate.com} for time zone
+ information. \texttt{HH} is the number of hours offset from UT and \texttt{mm} is the
+ number of minutes (some time zones are measured in hours and minutes,
+ for example, Australian Central Standard Time is \texttt{+0930}).
+ \item \texttt{refreshrate}: The refresh rate of the counter, the
+ default is 1000 (milliseconds).
+ \item \texttt{autorun}: A Boolean that determines whether the count
+ begins when the page containing the counter is opened. The default is
+ \texttt{true}.
+ \item \texttt{autopause}: A Boolean that determines whether the count
+ is paused when the page containing the counter is closed. The default is
+ \texttt{true}.
+ \item \texttt{currtimefunc}: When a long count is active, \textsf{cntdwn}
+ provides the current time and date. The document author can design
+ a custom display through this key. The default value of this key is
+ \texttt{\_defaultTimeDateFunc}, the definition of which is
+\begin{verbatim}
+function _defaultTimeDateFunc(oTime,cTimer) {
+ try{ this.getField(cTimer+".clock.time").value
+ =util.printd("H:MM:ss",oTime); } catch(e) {};
+ try { this.getField(cTimer+".clock.date").value=
+ util.printd("mm/dd/yyyy", oTime); } catch(e) {};
+\end{verbatim}
+where \texttt{oTime} is the Date object containing current time/date.
+\end{itemize}
+
+
+\subsubsection{Commands that go in the body}
+
+In the body of the document there are several commands used with the long
+countdown timer.
+
+\begin{dCmd*}{\linewidth}
+\cntdwnclocktime[<eform_options>]{<t_name>}{<width>}{<height>}
+\cntdwnclockdate[<eform_options>]{<t_name>}{<width>}{<height>}
+\end{dCmd*}
+
+\CmdDescription Each command creates a read-only text field, the first
+displays the time, and second displays the date.
+countdown.
+
+\PD The first optional parameter is used to change the appearance of the
+field (these field use the \textsf{eforms} package). The second
+parameter is the name of a timer (\texttt{<t\_name>}) that has already been
+defined by \cs{setClockTimer}. The last two parameters sets the width and
+height of the form fields.
+
+\begin{dCmd*}{\linewidth}
+\clockToggle[<eform_options>]{<t_name>}{<width>}{<height>}
+\end{dCmd*}
+
+\CmdDescription The command creates a push button field that is used to
+toggle the clock on and off (start and pause). Normally, this button is
+not needed, but there may be situations that it may be useful.
+
+\PD The first optional parameter is used to change the appearance of the
+field (these field use the \textsf{eforms} package). The second
+parameter is the name of a timer (\texttt{<t\_name>}) that has already been
+defined by \cs{setClockTimer}. The last two parameters sets the width and
+height of the form fields.
+
+\newtopic\textbf{Note:} It is easy to create a single button to toggle all
+clocks, or a selection of clocks, but this button is not provided with
+this package.
+
+\bigskip
+
+That's all for now, I simply must get back to my retirement. {\dps}
+
+\end{document}
diff --git a/texmf-dist/doc/latex/ecards/README.md b/texmf-dist/doc/latex/ecards/README.md
new file mode 100644
index 00000000..e330320c
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/README.md
@@ -0,0 +1,29 @@
+eCards Package
+Author: D. P. Story
+Dated: 2016/09/03
+
+The ecards package for LaTeX enables you to create a series of
+electronic (flash) cards. The demo file for this package is named
+ecardstst.pdf. The document author provides questions, hints and
+answers to a series of questions. Users can test their knowledge
+by responding to the questions. The questions are delivered in
+random order.
+
+What's new (2016/09/03): Improved documentation.
+
+What's new (2016/08/02): The last revision was in 2003, and since then
+there have been many changes in exerquiz. This revision brings ecards into
+harmony with exerquiz (dated 2016/04/18 or later). Additionally, several new
+commands are created to help customize the cards.
+
+Note: This package requires the AcroTeX eDucation Bundle, exerquiz dated 2016/04/18
+or later.
+
+Enjoy!
+
+Now, I simply must get back to my retirement.
+
+D. P. Story
+www.acrotex.net
+dpstory@uakron.edu
+dpstory@acrotex.net
diff --git a/texmf-dist/doc/latex/ecards/ecardsman.pdf b/texmf-dist/doc/latex/ecards/ecardsman.pdf
new file mode 100644
index 00000000..d2403a23
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/ecardsman.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/ecardstst.tex b/texmf-dist/doc/latex/ecards/examples/ecardstst.tex
new file mode 100644
index 00000000..5f997346
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/ecardstst.tex
@@ -0,0 +1,237 @@
+\documentclass{article}
+\usepackage[fleqn]{amsmath}
+\usepackage{graphicx}
+% Use these three for on screen presentation.
+\usepackage[tight,rightpanel]{web} %,usetemplates,rightpanel
+\usepackage{exerquiz}
+\usepackage[memLogo]{ecards} % ,notrandomized
+
+% Use these three to get a listing of all questions, hints, and answers; useful
+% for checking your work.
+%\usepackage[forpaper,tight]{web} % ,usetemplates
+%\usepackage[solutionsafter,proofing]{exerquiz}
+%\usepackage[memLogo,listing]{ecards}
+
+% begin Web commands
+\margins{.25in}{.25in}{24pt}{.25in} % left,right,top, bottom
+\screensize{3.72in}{366.24bp}
+\subject{Electronic Flash Cards}
+\keywords{Flash Cards, LaTeX, PDF}
+\university{%
+%
+ THE UNIVERSITY OF AKRON\\
+ Theoretical and Applied Mathematics
+%
+}
+\email{dpstory@uakron.edu}
+\version{2.0}
+\copyrightyears{\the\year}
+\author{D. P. Story}
+\title{The U.S. Presidents by Number\texorpdfstring{\\}{,} Numbers 1--6}
+\norevisionLabel
+
+\definecolor{logoblue}{rgb}{0,0,0.267}
+\panelBgColor{logoblue}
+
+\renewcommand\hproportionwebtitle{.9}
+\newcommand\aebLogo{%
+ \parbox{1.75in}{\large\color{red}\textsl{eCards: U.S. Presidents}\\
+ \small\smash{\raisebox{3pt}{\color{blue}\textsl{{Acro\!\TeX} eDucation Bundle}\hfill}}}}
+
+\makeatletter
+\ifecListing\else
+ \ifnum\@panelconfig>0\relax
+ \optionalPageMatter{\par\minimumskip\vspace{\stretch{1}}
+ \begin{center}
+ \fcolorbox{blue}{webyellow}{
+ \begin{minipage}{.85\linewidth}
+ \textbf{\textcolor{red}{Instructions:}}
+ Click on the \textcolor{webblue}{Begin} button to view the
+ first randomly selected card. Click on \textcolor{webblue}{FS} to view
+ the flash cards in full screen mode (works only outside a web browser). The
+ \textcolor{webblue}{Home} button on the first page goes to the
+ \textbf{\textcolor{red}{Acro\!\TeX}} home page; otherwise, the
+ \textcolor{webblue}{Home} button returns to this page.
+ The \textcolor{webblue}{Close} button closes the document (use
+ outside a web browser).\par\smallskip
+ \textbf{\textcolor{red}{Source:}}
+ \href{http://www.whitehouse.gov/history/presidents/}%
+ {The White House Presidents Page}\par\smallskip
+ \end{minipage}}
+ \end{center}
+ }
+ \else
+ \optionalPageMatter{\par\minimumskip\vspace{\stretch{1}}
+ \begin{center}
+ \fcolorbox{blue}{webyellow}{
+ \begin{minipage}{.67\linewidth}
+ Click on the \textcolor{webblue}{Begin} button to view the
+ first randomly selected card. Click on
+ \textcolor{webblue}{FS} to put the viewer into full screen
+ mode (use outside a web browser). The check box on the
+ right toggles the delivery of the cards between random
+ and natural order; a check means random
+ order.\par\smallskip
+ \centering
+ \Begin\ \FullScreen\ \ToggleOrder
+ \end{minipage}}
+ \end{center}
+ }
+ \fi
+\fi
+
+\makeatother
+% end Web commands
+% begin ecards commands
+\ecLogoLink{http://www.uakron.edu/}
+\cardsFinishedMsg{You've seen all the Presidents, at least the ones presented
+ in these cards.}
+\renewcommand\noHintJSAction{app.alert("No hints provided!")}
+% end ecards commands
+
+\renewcommand{\pressBeginMsg}{Press the \"Begin\"
+ button to begin viewing the cards.}
+
+
+\def\rescale{.4} % common re-scaling parameter for presidents
+\parindent0pt
+
+\begin{document}
+
+\maketitle
+
+\ifecListing
+ \begin{center}\Large\bfseries
+ Listing of Questions, Hints, and Answers
+ \end{center}\bigskip
+\fi
+
+\begin{card}
+ Who was the first President of the United States?
+\begin{response}
+ \begin{hint}
+ Legend has it, he chopped down the cherry tree and couldn't tell a lie.
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ George Washington (1789-1797)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/gw1}\\
+ George Washington\\
+ 1789-1797
+ \fi
+ \end{answer}
+\end{response}
+\end{card}
+
+\begin{card}
+ Who was the second President of the United States?
+\begin{response}
+ \begin{hint}
+ He was Washington's Vice President.
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ John Adams (1797-1801)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/ja2}\\
+ John Adams\\
+ 1797-1801
+ \fi
+ \end{answer}
+\end{response}
+\end{card}
+
+\begin{card}
+ Who was the third President of the United States?
+ \begin{multiChoice}{2}
+ \Ans0 Geo. Washington &\Ans0 Ben Franklin \\
+ \Ans1 Thomas Jefferson &\Ans0 James Madison
+ \end{multiChoice}
+\begin{response}
+ \begin{hint}
+ He was one of the authors of the Declaration of Independence.
+ \begin{multiChoice}{2}
+ \Ans0 Geo. Washington &\Ans0 Ben Franklin \\
+ \Ans1 Thomas Jefferson &\Ans0 James Madison
+ \end{multiChoice}
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ Thomas Jefferson (1801-1809)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/tj3}\\
+ Thomas Jefferson\\
+ 1801-1809
+ \fi
+ \end{answer}
+\end{response}
+\end{card}
+
+\begin{card}
+ \raggedright
+ Who was the fourth President of the United States? \ifecListing\newline\fi
+ \begin{fillIn}
+ \RespBoxTxt[\rectW{1.5in}]{0}{0}{2}{James Madison}{Madison}
+ \end{fillIn}
+\begin{response}
+ \begin{hint}\raggedright
+ He coauthored the \textsl{Federalists Essays} along with
+ John Jay and Alexander Hamilton.
+ \begin{fillIn}
+ \RespBoxTxt[\rectW{1.5in}]{0}{0}{2}{James Madison}{Madison}
+ \end{fillIn}
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ James Madison (1809-1817)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/jm4}\\
+ James Madison\\
+ 1809-1817
+ \fi
+ \end{answer}
+\end{response}
+\end{card}
+
+\begin{card}
+ Who was the fifth President of the United States?
+\begin{response}
+ \begin{hint}
+ In foreign affairs, this President proclaimed a doctrine that
+ bears his name, ``\dots the American continents'', he stated, ``by the
+ free and independent condition which they have assumed and
+ maintain, are henceforth not to be considered as subjects for
+ future colonization by any European Power.''
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ James Monroe (1817-1825)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/jm5}\\
+ James Monroe\\
+ 1817-1825
+ \fi
+ \end{answer}
+\end{response}
+\end{card}
+
+\begin{card}
+ Who was the sixth President of the United States?
+\begin{response}
+ \begin{hint}
+ He was the first President who was the son of a President.
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ John Quincy Adams (1825-1829)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/ja6}\\
+ John Quincy Adams\\
+ 1825-1829
+ \fi
+ \end{answer}
+\end{response}
+\end{card}
+
+\end{document}
diff --git a/texmf-dist/doc/latex/ecards/examples/ecardstst_nohint.tex b/texmf-dist/doc/latex/ecards/examples/ecardstst_nohint.tex
new file mode 100644
index 00000000..526c526a
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/ecardstst_nohint.tex
@@ -0,0 +1,243 @@
+%
+% In this file, we test the nohints option and the \useHints
+%
+\documentclass{article}
+\usepackage{amsmath}
+\usepackage{graphicx}
+% Use these three for onscreen presentation.
+\usepackage[tight,rightpanel]{web} %,usetemplates,rightpanel,leftpanel
+\usepackage{exerquiz}
+\usepackage[memLogo,nohints]{ecards}
+
+% Use these three to get a listing of all questions, hints, and answers; useful
+% for checking your work.
+%\usepackage[forpaper,tight]{web} % ,usetemplates
+%\usepackage[solutionsafter,proofing]{exerquiz}
+%\usepackage[memLogo,listing]{ecards}
+
+% begin Web commands
+\margins{.25in}{.25in}{24pt}{.25in} % left,right,top, bottom
+\screensize{3.72in}{366.24bp}
+\subject{Electronic Flash Cards}
+\keywords{Flash Cards, LaTeX, PDF}
+\university{THE UNIVERSITY OF AKRON\\
+ Theoretical and Applied Mathematics}
+\email{dpstory@uakron.edu}
+\version{2.0}
+\copyrightyears{\the\year}
+\author{D. P. Story}
+\title{The U.S. Presidents by Number\texorpdfstring{\\}{,} Numbers 1--6}
+
+\norevisionLabel
+
+\definecolor{logoblue}{rgb}{0,0,0.267}
+\panelBgColor{logoblue}
+
+\renewcommand\hproportionwebtitle{.9}
+
+\newcommand\aebLogo{\parbox{1.75in}{\large \color{red}\textsl{eCards: U.S. Presidents}\\
+ \small\smash{\raisebox{3pt}{\color{blue}\textsl{Acro\!\TeX{} eDucation Bundle}\hfill}}}}
+
+\makeatletter
+\ifecListing\else
+ \ifnum\@panelconfig>0\relax
+ \optionalPageMatter{\par\minimumskip\vspace{\stretch{1}}
+ \begin{center}
+ \fcolorbox{blue}{webyellow}{
+ \begin{minipage}{.85\linewidth}
+ \textbf{\textcolor{red}{Instructions:}}
+ Click on the \textcolor{webblue}{Begin} button to view the
+ first randomly selected card. Click on \textcolor{webblue}{FS} to view
+ the flash cards in full screen mode (works only outside a web browser). The
+ \textcolor{webblue}{Home} button on the first page goes to the
+ \textbf{\textcolor{red}{Acro\!\TeX}} home page; otherwise, the
+ \textcolor{webblue}{Home} button returns to this page.
+ The \textcolor{webblue}{Close} button closes the document (use
+ outside a web browser).\par\smallskip
+ \textbf{\textcolor{red}{Source:}}
+ \href{http://www.whitehouse.gov/history/presidents/}%
+ {The White House Presidents Page}\par\smallskip
+ \end{minipage}}
+ \end{center}
+ }
+ \else
+ \optionalPageMatter{\par\minimumskip\vspace{\stretch{1}}
+ \begin{center}
+ \fcolorbox{blue}{webyellow}{
+ \begin{minipage}{.67\linewidth}
+ Click on the \textcolor{webblue}{Begin} button to view the
+ first randomly selected card. Click on
+ \textcolor{webblue}{FS} to put the viewer into full screen
+ mode (use outside a web browser). The check box on the
+ right toggles the delivery of the cards between random
+ and natural order; a check means random
+ order.\par\smallskip
+ \centering
+ \Begin\ \FullScreen\ \ToggleOrder
+ \end{minipage}}
+ \end{center}
+ }
+ \fi
+\fi
+\makeatother
+% end Web commands
+
+% begin ecards commands
+\ecLogoLink{http://www.uakron.edu/}
+\cardsFinishedMsg{You've seen all the Presidents, at least the ones presented
+ in these cards.}
+\renewcommand\noHintJSAction{app.alert("No hint provided for this question!")}
+% end ecards commands
+
+\def\rescale{.4} % common re-scaling parameter for presidents
+\parindent0pt
+
+
+\begin{document}
+
+\maketitle
+
+\ifecListing
+ \begin{center}\Large\bfseries
+ Listing of Questions, Hints, and Answers
+ \end{center}\bigskip
+\fi
+
+% This card should have no hint, which is the default with the nohints option
+\begin{card}
+ Who was the first President of the United States?
+ \begin{response}
+ \begin{hint}
+ Legend has it, he chopped down the cherry tree and couldn't tell a lie.
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ George Washington (1789-1797)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/gw1}\\
+ George Washington\\
+ 1789-1797
+ \fi
+ \end{answer}
+ \end{response}
+\end{card}
+
+% Start using hints by default
+\useHints
+
+\begin{card}
+ Who was the second President of the United States?
+ \begin{response}
+ \begin{hint}
+ He was Washington's Vice President.
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ John Adams (1797-1801)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/ja2}\\
+ John Adams\\
+ 1797-1801
+ \fi
+ \end{answer}
+ \end{response}
+\end{card}
+
+% local override
+\begin{card}[nohint]
+ Who was the third President of the United States?
+ \begin{multiChoice}{2}
+ \Ans0 Geo. Washington &\Ans0 Ben Franklin \\
+ \Ans1 Thomas Jefferson &\Ans0 James Madison
+ \end{multiChoice}
+ \begin{response}
+ \begin{hint}
+ He was one of the authors of the Declaration of Independence.
+ \begin{multiChoice}{2}
+ \Ans0 Geo. Washington &\Ans0 Ben Franklin \\
+ \Ans1 Thomas Jefferson &\Ans0 James Madison
+ \end{multiChoice}
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ Thomas Jefferson (1801-1809)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/tj3}\\
+ Thomas Jefferson\\
+ 1801-1809
+ \fi
+ \end{answer}
+ \end{response}
+\end{card}
+
+% this cards should have a hint, since \useHints is now the default
+\begin{card}
+ \raggedright Who was the fourth President of the United States? \ifecListing\newline\fi
+ \begin{fillIn}
+ \RespBoxTxt{0}{0}{2}{James Madison}{Madison}
+ \end{fillIn}
+ \begin{response}
+ \begin{hint}\raggedright
+ He coauthored the \textsl{Federalists Essays} along with
+ John Jay and Alexander Hamilton.
+ \begin{fillIn}
+ \RespBoxTxt{0}{0}{2}{James Madison}{Madison}
+ \end{fillIn}
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ James Madison (1809-1817)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/jm4}\\
+ James Madison\\
+ 1809-1817
+ \fi
+ \end{answer}
+ \end{response}
+\end{card}
+
+% back to ho hints as the default
+\useNoHints
+
+\begin{card}
+ Who was the fifth President of the United States?
+ \begin{response}
+ \begin{hint}
+ In foreign affairs, this President proclaimed a doctrine that
+ bears his name, ``\dots the American continents'', he stated, ``by the
+ free and independent condition which they have assumed and
+ maintain, are henceforth not to be considered as subjects for
+ future colonization by any European Power.''
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ James Monroe (1817-1825)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/jm5}\\
+ James Monroe\\
+ 1817-1825
+ \fi
+ \end{answer}
+ \end{response}
+\end{card}
+
+% local override
+\begin{card}[hint]
+ Who was the sixth President of the United States?
+ \begin{response}
+ \begin{hint}
+ He was the first President who was the son of a President.
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ John Quincy Adams (1825-1829)
+ \else\centering
+ \includegraphics[scale=\rescale]{presidents/ja6}\\
+ John Quincy Adams\\
+ 1825-1829
+ \fi
+ \end{answer}
+ \end{response}
+\end{card}
+
+\end{document}
diff --git a/texmf-dist/doc/latex/ecards/examples/graphics/uakron.bb b/texmf-dist/doc/latex/ecards/examples/graphics/uakron.bb
new file mode 100644
index 00000000..e00464d0
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/graphics/uakron.bb
@@ -0,0 +1,5 @@
+%%Title: uakron.pdf
+%%Creator: extractbb 20160307
+%%BoundingBox: 0 0 124 124
+%%CreationDate: Fri Jul 29 05:04:04 2016
+
diff --git a/texmf-dist/doc/latex/ecards/examples/graphics/uakron.eps b/texmf-dist/doc/latex/ecards/examples/graphics/uakron.eps
new file mode 100644
index 00000000..935fd694
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/graphics/uakron.eps
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/graphics/uakron.jpg b/texmf-dist/doc/latex/ecards/examples/graphics/uakron.jpg
new file mode 100644
index 00000000..aa1165f5
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/graphics/uakron.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/graphics/uakron.pdf b/texmf-dist/doc/latex/ecards/examples/graphics/uakron.pdf
new file mode 100644
index 00000000..b802baca
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/graphics/uakron.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/graphics/uakron.png b/texmf-dist/doc/latex/ecards/examples/graphics/uakron.png
new file mode 100644
index 00000000..82c46089
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/graphics/uakron.png
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/gw1.bb b/texmf-dist/doc/latex/ecards/examples/presidents/gw1.bb
new file mode 100644
index 00000000..4ca97df5
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/gw1.bb
@@ -0,0 +1,5 @@
+%%Title: gw1.pdf
+%%Creator: extractbb 20160307
+%%BoundingBox: 0 0 178 259
+%%CreationDate: Fri Jul 29 05:12:40 2016
+
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/gw1.eps b/texmf-dist/doc/latex/ecards/examples/presidents/gw1.eps
new file mode 100644
index 00000000..9e8c86f0
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/gw1.eps
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/gw1.jpg b/texmf-dist/doc/latex/ecards/examples/presidents/gw1.jpg
new file mode 100644
index 00000000..3fcbf885
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/gw1.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/gw1.pdf b/texmf-dist/doc/latex/ecards/examples/presidents/gw1.pdf
new file mode 100644
index 00000000..2e54ef71
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/gw1.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/gw1.png b/texmf-dist/doc/latex/ecards/examples/presidents/gw1.png
new file mode 100644
index 00000000..796c2b26
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/gw1.png
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/ja2.bb b/texmf-dist/doc/latex/ecards/examples/presidents/ja2.bb
new file mode 100644
index 00000000..1ba54b5b
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/ja2.bb
@@ -0,0 +1,5 @@
+%%Title: ja2.pdf
+%%Creator: extractbb 20160307
+%%BoundingBox: 0 0 193 262
+%%CreationDate: Fri Jul 29 05:13:54 2016
+
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/ja2.eps b/texmf-dist/doc/latex/ecards/examples/presidents/ja2.eps
new file mode 100644
index 00000000..2f9c8ffb
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/ja2.eps
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/ja2.jpg b/texmf-dist/doc/latex/ecards/examples/presidents/ja2.jpg
new file mode 100644
index 00000000..a3b53c66
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/ja2.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/ja2.pdf b/texmf-dist/doc/latex/ecards/examples/presidents/ja2.pdf
new file mode 100644
index 00000000..db0ba8d9
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/ja2.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/ja2.png b/texmf-dist/doc/latex/ecards/examples/presidents/ja2.png
new file mode 100644
index 00000000..f5a648b0
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/ja2.png
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/ja6.bb b/texmf-dist/doc/latex/ecards/examples/presidents/ja6.bb
new file mode 100644
index 00000000..48865757
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/ja6.bb
@@ -0,0 +1,5 @@
+%%Title: ja6.pdf
+%%Creator: extractbb 20160307
+%%BoundingBox: 0 0 179 256
+%%CreationDate: Fri Jul 29 05:14:07 2016
+
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/ja6.eps b/texmf-dist/doc/latex/ecards/examples/presidents/ja6.eps
new file mode 100644
index 00000000..46716f96
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/ja6.eps
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/ja6.jpg b/texmf-dist/doc/latex/ecards/examples/presidents/ja6.jpg
new file mode 100644
index 00000000..5935bbb0
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/ja6.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/ja6.pdf b/texmf-dist/doc/latex/ecards/examples/presidents/ja6.pdf
new file mode 100644
index 00000000..4698214b
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/ja6.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/ja6.png b/texmf-dist/doc/latex/ecards/examples/presidents/ja6.png
new file mode 100644
index 00000000..fed5e3e7
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/ja6.png
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/jm4.bb b/texmf-dist/doc/latex/ecards/examples/presidents/jm4.bb
new file mode 100644
index 00000000..9d9d5094
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/jm4.bb
@@ -0,0 +1,5 @@
+%%Title: jm4.pdf
+%%Creator: extractbb 20160307
+%%BoundingBox: 0 0 178 261
+%%CreationDate: Fri Jul 29 05:14:17 2016
+
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/jm4.eps b/texmf-dist/doc/latex/ecards/examples/presidents/jm4.eps
new file mode 100644
index 00000000..eeb3113d
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/jm4.eps
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/jm4.jpg b/texmf-dist/doc/latex/ecards/examples/presidents/jm4.jpg
new file mode 100644
index 00000000..dc4d2585
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/jm4.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/jm4.pdf b/texmf-dist/doc/latex/ecards/examples/presidents/jm4.pdf
new file mode 100644
index 00000000..70b37487
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/jm4.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/jm4.png b/texmf-dist/doc/latex/ecards/examples/presidents/jm4.png
new file mode 100644
index 00000000..ccc4aea3
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/jm4.png
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/jm5.bb b/texmf-dist/doc/latex/ecards/examples/presidents/jm5.bb
new file mode 100644
index 00000000..6787f051
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/jm5.bb
@@ -0,0 +1,5 @@
+%%Title: jm5.pdf
+%%Creator: extractbb 20160307
+%%BoundingBox: 0 0 171 260
+%%CreationDate: Fri Jul 29 05:14:28 2016
+
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/jm5.eps b/texmf-dist/doc/latex/ecards/examples/presidents/jm5.eps
new file mode 100644
index 00000000..342d3deb
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/jm5.eps
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/jm5.jpg b/texmf-dist/doc/latex/ecards/examples/presidents/jm5.jpg
new file mode 100644
index 00000000..bba5e98b
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/jm5.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/jm5.pdf b/texmf-dist/doc/latex/ecards/examples/presidents/jm5.pdf
new file mode 100644
index 00000000..b3f35edf
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/jm5.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/jm5.png b/texmf-dist/doc/latex/ecards/examples/presidents/jm5.png
new file mode 100644
index 00000000..1f5d8fdc
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/jm5.png
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/tj3.bb b/texmf-dist/doc/latex/ecards/examples/presidents/tj3.bb
new file mode 100644
index 00000000..ac3efd23
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/tj3.bb
@@ -0,0 +1,5 @@
+%%Title: tj3.pdf
+%%Creator: extractbb 20160307
+%%BoundingBox: 0 0 174 256
+%%CreationDate: Fri Jul 29 05:14:49 2016
+
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/tj3.eps b/texmf-dist/doc/latex/ecards/examples/presidents/tj3.eps
new file mode 100644
index 00000000..48266737
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/tj3.eps
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/tj3.jpg b/texmf-dist/doc/latex/ecards/examples/presidents/tj3.jpg
new file mode 100644
index 00000000..8fc75c7d
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/tj3.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/tj3.pdf b/texmf-dist/doc/latex/ecards/examples/presidents/tj3.pdf
new file mode 100644
index 00000000..d2d7493d
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/tj3.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/ecards/examples/presidents/tj3.png b/texmf-dist/doc/latex/ecards/examples/presidents/tj3.png
new file mode 100644
index 00000000..78aa51b7
--- /dev/null
+++ b/texmf-dist/doc/latex/ecards/examples/presidents/tj3.png
Binary files differ
diff --git a/texmf-dist/doc/latex/fc-arith/README.md b/texmf-dist/doc/latex/fc-arith/README.md
new file mode 100644
index 00000000..e55c34dd
--- /dev/null
+++ b/texmf-dist/doc/latex/fc-arith/README.md
@@ -0,0 +1,32 @@
+The fc_arith Package
+Author: D. P. Story
+Dated: 2017-01-16
+
+fc_arith is a LaTeX package used to create an arithmetic flash card.
+Addition, subtraction, multiplication, and division problems are randomly
+generated. There is a menu system for setting the intervals from which to randomly
+draw numbers, and the number of decimal places these numbers should have. The user
+can optionally compete against the clock, and awarded points as a function of how
+fast the problem is correctly solved.
+
+The flash card created by fc_arith can be customized in many ways. Design and build
+your own flash card using any of the standard PDF creators.
+
+What's New (2017/01/16) Require eforms dated 2017/01/15 to incorporate \olBdry into code.
+
+What's New (2016/12/10): All the standard PDF creators can build the demo file
+fc_noacrobat.tex. If you own the Acrobat application, you can also build
+fc_acrobat.tex using any workflow (dvips/distiller, pdflatex, lualatex, and xelatex).
+Additional commands are defined to localize virtually strings the package uses. A
+redefined menu environment (MenuFC) is more flexible than the old one. Fixed a lot
+of bugs found by my greatest user and tester J. Gilg.
+
+Requirements are
+ 1. The eforms package (version 2.5c or later, 2010/03/21 or later), and
+ is available from the acrotex bundle (http://ctan.org/pkg/acrotex)
+ 2. The popupmenu package (http://ctan.org/pkg/popupmenu)
+
+D. P. Story
+dpstory at uakron dot edu
+dpstory at acrotex dot net
+
diff --git a/texmf-dist/doc/latex/fc-arith/examples/fc-acrobat.pdf b/texmf-dist/doc/latex/fc-arith/examples/fc-acrobat.pdf
new file mode 100644
index 00000000..9263fc5b
--- /dev/null
+++ b/texmf-dist/doc/latex/fc-arith/examples/fc-acrobat.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/fc-arith/examples/fc-acrobat.tex b/texmf-dist/doc/latex/fc-arith/examples/fc-acrobat.tex
new file mode 100644
index 00000000..235b9431
--- /dev/null
+++ b/texmf-dist/doc/latex/fc-arith/examples/fc-acrobat.tex
@@ -0,0 +1,134 @@
+\documentclass{article}
+%
+% This file can be built in one of two wayd, each method requires the Acrobat application, however
+% (1) Using Adobe Distiller: latex, convert DVI to PS, and distill
+% (1) Using pdflatex, luatex, xelatex: insert the useacrobat option into the option list
+% of aeb_pro (2016/12/10 or later)
+\usepackage[
+ web={usetemplates,pro,usesf},
+ useacrobat,
+ eforms
+]{aeb_pro} %[2016/12/10]
+\usepackage{fc_arith}
+\margins{.25in}{.25in}{.25in}{.25in}
+\screensize{4.3in+25bp}{4.4in}
+\textBgColor{webyellow}
+\makePDasXOn
+
+\DeclareDocInfo
+{
+ university={\AcroTeX.Net},
+ title={PDF Flash Card: Arithmetic},
+ author={D. P. Story, AcroTeX.Net, Northwest Florida State College, The University of Akron},
+ email={dpstory@acrotex.net},
+ subject={Practice elementary arithmetic operations},
+ talksite={\url{www.acrotex.net}},
+ version={1.0},
+ keywords={AcroTeX.Net, arithmetic, flash cards},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) \the\year, D. P. Story},
+ copyrightInfoURL={http://www.acrotex.net}
+}
+\DeclareInitView{windowoptions={showtitle}}
+
+%
+% Set the ranges of the operations
+%
+\DeclareArithParams
+{%
+ addT={[2,20]},addB={[5,30]},
+ subT={[1,5]},subB={[5,10]},
+ mulT={[1,12]},mulB={[1,10]},
+ divQ={[1,4]},divB={[1,10]},
+}
+
+%
+% Optionally insert a logo in the upper right corner using \rheader (part of the running header).
+%
+\rheader{\parbox[t]{.5in}{\kern0pt\includegraphics[width=\linewidth]{graphics/nwfsc_logo}}}
+
+\begin{MenuFC}
+ \fcOptionsMenuItem
+ \fcToggleKeypadMenuItem
+ \fcMouseKPMenuItem
+ \fcTouchKPMenuItem
+ \fcAboutFC
+\end{MenuFC}
+
+% Import and place icon appearances
+\declareMultiImages
+{%
+ {path=graphics/fc_icons.pdf,page=0,placement=StartAgain}
+ {path=graphics/fc_icons.pdf,page=1,placement=[1]StartAgain}
+ {path=graphics/fc_icons.pdf,page=2,placement=NewProblem}
+ {path=graphics/fc_icons.pdf,page=3,placement=[1]NewProblem}
+}
+
+\begin{docassembly}
+\insertPreDocAssembly
+\end{docassembly}
+
+\parskip0pt\parindent0pt%\previewtrue
+
+\begin{document}
+
+\begin{center}
+
+{%
+ \LARGE\bfseries\color{blue}PDF Flash Cards\\[1ex]Elementary Arithmetic
+}
+
+%
+% The arithmetic problem, \arithProb: top, bottom and operation. This command is REQUIRED.
+% This command generates three text fields stacked so that form a standard arithmetic
+% problem: top
+% op bot
+%
+
+\arithProb
+
+%
+% \alertbox is a text field where a right or wrong message is written--REQUIRED
+% \startAgain clears the statistics field, re-initializes a variables--REQUIRED
+% \inputRegion is where the user enters his/her answer--REQUIRED
+% \Keypad allows user to enter answer with mouse--OPTIONAL
+% \newCard random selects a new arithmetic problem (add, sub, mul, div) depending on the
+% combo box \cbOperation, described below.
+%
+% These components can be moved around to a new design, thought I don't know what that would
+% be. I have no imagination for design myself.
+
+% when using xetex, we have to squeeze things together to make everything fit on one page
+\ifxetex\vskip-2bp\fi
+\mbox{\vbox{\smash{\alertbox}\startAgain}\fcSep\inputRegion\fcSep\vbox{\smash{\raisebox{0bp}{\Keypad}}\newCard}}%
+
+\medskip
+%
+% \cbTiming is combo box use to set a time limit on answer the problem--OPTIONAL
+% There is also a package option, notimedscores, that removes timing calculations
+% from the PDF, no statistics, no alerts. The option notimedscores makes the combo
+% box created y \cbTiming into a readonly field.
+%
+% \ansField is the field the user enters his/her answer into---REQUIRED
+% \cbOperation a combo box to select what operation to use---REQUIRED
+
+% see xetex comments above
+\ifxetex\vskip-2bp\fi
+\mbox{\cbTiming\fcSep\ansField\fcSep\cbOperation}
+
+\medskip
+
+%
+% This calculation computes the width of the previous row of fields, and sets \cs{fcWidth},
+% a dimension in this package, to that width.
+%
+\settowidth{\fcWidth}{\cbTiming\fcSep\ansField\fcSep\cbOperation}
+%
+% \statsFields is a collection of text fields to display user statistics---OPTIONAL
+%
+% see xetex comments above
+\ifxetex\vskip-2bp\fi
+\makebox[\fcWidth][s]{\statsFields}
+
+\end{center}
+\end{document} \ No newline at end of file
diff --git a/texmf-dist/doc/latex/fc-arith/examples/fc-noacrobat.tex b/texmf-dist/doc/latex/fc-arith/examples/fc-noacrobat.tex
new file mode 100644
index 00000000..793a1b45
--- /dev/null
+++ b/texmf-dist/doc/latex/fc-arith/examples/fc-noacrobat.tex
@@ -0,0 +1,120 @@
+\documentclass{article}
+\usepackage[usetemplates,pro,usesf]{web}
+\usepackage{eforms}
+\usepackage{fc_arith} % showkeypadlink
+\margins{.25in}{.25in}{.25in}{.25in}
+\screensize{4.3in+25bp}{4.4in}
+\textBgColor{webyellow}
+
+\DeclareDocInfo
+{
+ university={\AcroTeX.Net},
+ title={PDF Flash Card: Arithmetic},
+ author={D. P. Story, AcroTeX.Net, Northwest Florida State College, The University of Akron},
+ email={dpstory@acrotex.net},
+ subject={Practice elementary arithmetic operations},
+ talksite={\url{www.acrotex.net}},
+ version={1.0},
+ keywords={AcroTeX.Net, arithmetic, flash cards},
+}
+
+\DeclareArithParams
+{%
+ addT={[2,20]},addB={[5,30]},
+ subT={[1,5]},subB={[5,10]},
+ mulT={[1,12]},mulB={[1,10]},
+ divQ={[1,4]},divB={[1,10]}
+}
+
+%
+% Optionally insert a logo in the upper right corner using \rheader (part of the running header.
+%
+\rheader{\parbox[t]{.5in}{\kern0pt\includegraphics[width=\linewidth]{graphics/nwfsc_logo}}}
+
+\begin{MenuFC}
+ \fcOptionsMenuItem
+ \fcToggleKeypadMenuItem
+ \fcMouseKPMenuItem
+ \fcTouchKPMenuItem
+ \item{title=AcroTeX.Net Home,return=acrotexhome}
+ \item{title=AcroTeX.Net Blog,return=acrotexblog}
+ \fcAboutFC
+\end{MenuFC}
+
+% In this example, when processCustomFcMenu is called n should be 5. An arbitrary
+% list of menu items may be specified and processed in this way.
+\begin{insDLJS}{cmfc}{Custom Menu Events}
+function processCustomFcMenu(n) {
+ switch(n) {
+ case "acrotexhome":
+ app.launchURL("http://www.acrotex.net",false);
+ break;
+ case "acrotexblog":
+ app.launchURL("http://blog.acrotex.net",false);
+ break;
+ }
+}
+\end{insDLJS}
+
+
+\parskip0pt\parindent0pt
+
+\begin{document}
+
+\begin{center}
+
+{%
+ \LARGE\bfseries\color{blue}PDF Flash Cards\\[1ex]Elementary Arithmetic
+}
+
+%
+% The arithmetic problem, \arithProb: top, bottom and operation. This command is REQUIRED.
+% This command generates three text fields stacked so that form a standard arithmetic
+% problem: top
+% op bot
+%
+
+\arithProb
+
+%
+% \alertbox is a text field where a right or wrong message is written--REQUIRED
+% \startAgain clears the statistics field, re-initializes a variables--REQUIRED
+% \inputRegion is where the user enters his/her answer--REQUIRED
+% \Keypad allows user to enter answer with mouse--OPTIONAL
+% \newCard random selects a new arithmetic problem (add, sub, mul, div) depending on the
+% combo box \cbOperation, described below.
+%
+% These components can be moved around to a new design, thought I don't know what that would
+% be. I have no imagination for design myself.
+
+\ifxetex\vskip-4bp\fi
+\mbox{\vbox{\smash{\alertbox}\startAgain}\fcSep\inputRegion\fcSep\vbox{\smash{\raisebox{0bp}{\Keypad}}\newCard}}%
+
+\medskip
+%
+% \cbTiming is combo box use to set a time limit on answer the problem--OPTIONAL
+% There is also a package option, notimedscores, that removes timing calculations
+% from the PDF, no statistics, no alerts. The option notimedscores makes the combo
+% box created y \cbTiming into a readonly field.
+%
+% \ansField is the field the user enters his/her answer into---REQUIRED
+% \cbOperation a combo box to select what operation to use---REQUIRED
+
+\ifxetex\vskip-4bp\fi
+\mbox{\cbTiming\fcSep\ansField\fcSep\cbOperation}
+
+\medskip
+
+%
+% This calculation computes the width of the previous row of fields, and sets \cs{fcWidth},
+% a dimension in this package, to that width.
+%
+\settowidth{\fcWidth}{\cbTiming\fcSep\ansField\fcSep\cbOperation}
+%
+% \statsFields is a collection of text fields to display user statistics---OPTIONAL
+%
+\ifxetex\vskip-4bp\fi
+\makebox[\fcWidth][s]{\statsFields}
+
+\end{center}
+\end{document} \ No newline at end of file
diff --git a/texmf-dist/doc/latex/fc-arith/examples/graphics/fc_icons.pdf b/texmf-dist/doc/latex/fc-arith/examples/graphics/fc_icons.pdf
new file mode 100644
index 00000000..f09ef44f
--- /dev/null
+++ b/texmf-dist/doc/latex/fc-arith/examples/graphics/fc_icons.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/fc-arith/examples/graphics/nwfsc_logo.eps b/texmf-dist/doc/latex/fc-arith/examples/graphics/nwfsc_logo.eps
new file mode 100644
index 00000000..7f28723c
--- /dev/null
+++ b/texmf-dist/doc/latex/fc-arith/examples/graphics/nwfsc_logo.eps
@@ -0,0 +1,8518 @@
+%!PS-Adobe-3.1 EPSF-3.0
+%ADO_DSC_Encoding: Windows Roman
+%%Title: A9R88CD.tmp.pdf
+%%Creator: Adobe Acrobat 9.0.0
+%%For: Donald Story
+%%CreationDate: 09/29/2008, 3:43:37 PM
+%%BoundingBox: 0 0 78 74
+%%HiResBoundingBox: 0 0 77.2364 73.4901
+%%CropBox: 0 0 77.2364 73.4901
+%%LanguageLevel: 2
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%DocumentNeededFeatures: (atend)
+%%DocumentSuppliedFeatures: (atend)
+%%DocumentData: Clean7Bit
+%%Pages: (atend)
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%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} 842 (% &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:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
+ xmp:ModifyDate="2008-09-29T15:42:22-05:00"
+ xmp:CreateDate="2008-09-29T15:42:22-05:00"
+ xmp:MetadataDate="2008-09-29T15:42:22-05:00"
+ xmp:CreatorTool="Adobe Acrobat 9.0"
+ dc:format="application/pdf"
+ xmpMM:DocumentID="uuid:6ccb3fe6-c793-4b58-9600-f2f81df9224d"
+ xmpMM:InstanceID="uuid:067c5701-e5b5-4d27-9675-fee69945a37d"
+ pdf:Producer="Adobe Acrobat 9.0 Image Conversion Plug-in"/>
+ </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
+%%EndPageSetup
+1 -1 scale 0 -73.49 translate
+pgsv
+[1 0 0 1 0 0 ]ct
+gsave
+np
+gsave
+0 0 mo
+0 73.49 li
+77.2363 73.49 li
+77.2363 0 li
+cp
+clp
+[1 0 0 1 0 0 ]ct
+80.99 73.49 mo
+0 73.49 li
+0 0 li
+80.99 0 li
+80.99 73.49 li
+false sop
+gsave
+/0
+[/DeviceCMYK] /CSA add_res
+/0 /CSA get_res setcolorspace
+clp
+[1 0 0 -1 0 73.49 ]ct
+[82.4898 0 0 74.9898 -.749907 -.749892 ]ct
+snap_to_device
+Adobe_AGM_Image/AGMIMG_fl cf /ASCII85Decode fl /RunLengthDecode filter ddf
+<<
+/T 1
+/W 110
+/H 100
+/M[110 0 0 -100 0 100 ]
+/BC 8
+/D[0 1 0 1 0 1 0 1 ]
+/DS [
+[AGMIMG_fl 110 string /rs cvx /pop cvx] cvx
+[AGMIMG_fl 110 string /rs cvx /pop cvx] cvx
+[AGMIMG_fl 110 string /rs cvx /pop cvx] cvx
+[AGMIMG_fl 110 string /rs cvx /pop cvx] cvx
+]
+/O 3
+>>
+%%BeginBinary: 1
+img
+(pC-IZF%!F['[!C[&pI;ZELX=['['A[']S6"0er2Yj\poZLP7+['R!B['[0DpTjk,rj)X+BD_`@YHP17
+['[0H['-jDX/iV3Y6hV@['[$@['[-Erj2U0!OK*1Y5kltZh^iqZNmkCYHYC@Z`j22#I:\CZEgm:@/L!C
+TqS6XVl-DhW2$5gT:`'YTr4Z_W2$,bVkp6hVZ*ClV?!IkUB%.[VYR(YV?a#qUSXicVPEsa#Gn;qV5:,^
+>5S@=VP^K/`PoX0aLT1@St=WKVU`)kft4B'`P91e_#D(Q^q[Ll\\#WM_#(qC^%&lC`P9$u_Ss=&q7m6M
+^r=('d$?-Y!#VoCYd1XCZa@*B['Zs;['HmBYI([@YdCe3ZNIG7Y-@B$q6L"+oWne0Z`paB['R"2ZN.B3
+ZN7+>qu@Y=YHY7<['R-HYI([;X0f+7[BR$FYHYC@ZEjJ9riuR2ZMgs,ZLG3rYjo%%['Hm>"15GAYPGL0
+ZEppDZF-W=qu@Y/TqeH^Vl$>iUSau^T;\T[Vk^,fUSF]aV5=0grhTXmV>[.hV=:AXV=CDfVkp/bVPg;d
+q5+:kVPg8e!iV\oqu@Y4VQIPN`PB@3\\d$kT%UfSe[<9I]</rh^VBc`rkAZQ^Uq%e]>*jNq7Z=6#K=Hi
+]u%b(]D95I^VIh'^X/8qqu@#0['dBNZa@*G!4Mj5"Lb\I[^5t?rjDm9['TV9"1,AAZe)Ph[^<EJ[C3HK
+pTt+6['[<GCA\&E['[*@Z*h!H[B?mD[C!-FYctJ5ZidJ9Yd"8:[C-"@!O]<3[J7-![J@3*[/dH1[0*\<
+['f_:#IUqC[C*0@@f-6+VZ!FnVu!=qVl-JlVPjEl!2f^n!2ogp!iMuprMT^ori#^mnYc2]q547lVt6hl
+Vl6PlVl6=qqu@_R_V3Yrd+-grfZ;ahg"P!0g;(\\g">9;g=aj'rn.P,g""HmbL"f7g%NtoebRnoeHagY
+bL"tsg!KQJ#M%M\e^`<O1Ah+`['[<P['[<N[C3HL[CE`R[/RKI\@AuVZaRBN['mHQ\@AuU[C*HOppg.-
+n[SP*rNum>\@&cS\%&mB\,j%JrO)a0C]"/E[C*3B['[!>Z*1RBZ*:I>['0G4$*UM<YHYFBYcb2.YlD!%
+YkbQoYkbO-YHY:9YHRf,r3-@-Yct=7AGcE6Vl-JlVl6PlW2KQl!iDoorMTpuW2?JkVl.&'!iMf"qu?`I
+"kD;Z`Q6^2g'5aRg=b/raSsm#g"G-4^tRJle_8[Tg&'Lug%j@lg%jA%g&Ke*f`9b%fa$6af\5'6\Mj?c
+s0M[2$b3UOZF%'I['m?JZi.65[C*BNrj2a5[^G>+q6f+e"h(eF\$'QE!"uWE['d9KYd(R>[BR'HYdLgF
+[/RH8Z*C[=rj2a7Yd+28la?Pnn[/A(rjDd5p9b+3YdLmBY@@D0s/,do"K/2sVPX3h!N2goW;idnW;idp
+W9pM\Vtm:]VZ<[pVuN^hVZs)uVl-Jf?2O[E^qe%7aOStt_S+.HbKJVi^sL0Ge^`C-g"=us`R*>mkgfL_
+rRLSk!87A%s4R+r#2._\e_-oWqu@A5YI(gJ[^3<I[^NZT['[<N]!qXF"1,JEZhh'+Ze)S`ZN.?6['[17
+ZiIH3Zi[\>C&@rAYctL=Y->=A['6^9YdLmAriZX8['d9KY-GCA[-b9s[.1R"[-tC)['d<G!Nfi/!!8pj
+Vt[+pVl-JkVl6MkqksXpVPpDjkc"<TgSb.H>l4R.Z*D:$f\4^!g"I7pf\+g*f\59:`Pp$Ad+I(!_SXLH
+e]Z/5d.kf[g%j1obPBfkbPolfb5foab6H>HbKJV70DkePYHP=Brj2s>\?rWI['m?OrjMd4"1,GCZiIN2
+[/[Q6[f<c1[/%6-[J@3*\-'+G[^H+A!4M[0#.:tJ[(!8Tqu@A6YdL[B['d*@[C!-EYdCX<Ycn#4"LYJ@
+['BM8s0;U.s0;O0r3Z:(q6Bb&q61+3Z*:L@[C!15Zj*e>['[!?A,H<1USF`cVl'Ej!N;dlW;`^HW9pM`
+VuEXpVt$\dUL*iu)n!*(g"!sig>UT']@koZg"YB<fuVk"d+[1+gABS#g@3ekg@X(tf`9S%g&omUg"Q5S
+!8@G*!naV2qu@D7YdLj@[(!*'[CEZP['-?bL8M?W[KF"I['fnA$+.(J[C3TS\%&m![0O(I\@/cO[CH+A
+rj;s=\$`WPYA=%9-a0_Y[BHs@WJe$bYdLmCT6tjU[BQg=Y->:<Y-,":[BQp?Yck77Yh62\[JmB4['d0C
+pot%-YHb@8Y[mY3s.]juVk^/gSV*l=rhp*tQ$.26Vl6PkqPaFld&6rBrMT^onYcJ`?Mjd9]=ZeI\]*6i
+3niQHbKI;5+W>J3e_8[7f\4F#f\"p.ec+;$g"4p_e_8^1g""g0pY#f(g=k2a2#I=nYHPIE[(<]%'r8:H
+Za[HD=W`^6\@8uTYHY@A[f*Q7Za@+C[^NTNZgkEuZgY7$[JmN6ZaKV9#ICeGZa7-EC&@u0YSaaNYBgqR
+YHY@:XeJN2K!);\YdCU;[B?\3[/RH8Z*:I;pU0t,rNu+&q6UC7[B[*H['d15[0<eB[BHcCquHblrhpO/
+VfWQ7Vl-DjVjL'oH`3j@W2?;arMTjsW2HSlrMTapW;3@]W;NRmVtd1jVu*FgVZE`orMTak?2O[H[C+]A
+aPbbn!+aj@^tIRn!!"J#iRuo$WOpO0f\+6be^2kFg&]aNq:5;^q9\rfq8``_e_8^"a8sZAq:,_se_8Bs
+fr6\'!,&UCZa[<K\qC%eV7j=E[(;V`[^<ZIF&-X`20?%5X,&oB?Uo:MYY@/T<[M'=5]3f;+doOC[AHq_
+KrJ?3K=&+uYC3pf['!1jRuAb!B1c"0\<gK$6sm<C4[<:#:J<]KYI_*I['0OEquCE7Yd1I>[&nHQ#bA*%
+[C*,p19\*gWF\J(="n3fY,HY(:K'DhY-:8M7S4k%4#p]Q=WWR)YHa]l0mB?i.Wr,$XfZNG['[#)3KS\9
+:Kp%QYHWm^8iotZAMlJG,XasS9X(Y,[C!/HquH_m%B-5&Vf2\?P,G7WVl,.I0)hb$SRFfg<%DFOVk.rb
+92IZZVkZL26:`1m2`4m9<>pRbW2PtN/TI.Q-ZH#_VkIl)W$.p%2MlZ%9348CW2P>D7Q=5C@PTf9+@/4E
+8Y`5^W2QIrqu@nR]t`7R_Vl=3!+t<GbLPQ4!8H&`R0N]p!WWJ#j-CYb!!E9%#iMi\!#,U=!WYBYg"LEG
+!#U.b!#N`/hkL_]faPCk!(S76!!3-#g"ACa!!17Jq#CW(i762qXY'GNrj4>e[BR0%3$\Wq]<o&YL-r;Z
+VESjtXg4EZ*2^HD!*l^g&4rdPSu5`mNM;,_[V61.VRj1D[WVqR\VLN?\[8nr+fMiXZSlL*Wu,$;RsqQA
+,`fC'FKC%]X+::hVjMn9['[<PZu,^@rj4qnZ*19]0d-a^XgG:6G<<+4T/L#RX0@XB)kF.!"AuCS&O2t3
+PbCkVJ!kM,Z!7d2Y-G18B*t35H44es[B4Ei,bhKF[4kghVAN+$O)_D$+b?kYAZBj3VK;uLTSm`l['d'@
+ZtK::s/,do#,A)C/fb(LrMW,)2l3F;1L$?@V2$fBPbsHB9r!%E4I:#FQV.F+OE#B>=::ClW2HM&#*c$-
+#]$?:Ve[3;Vl6OF=K%Z&99k<KURE3M';pXqSo07OD?F.0K5.*YVl6Pk@/L!0_SXCHg:Q2jrW$+dj4W,D
+)?@P2D?'fuT"RDi!,:Oq!!'DS!!%9\:O)p?-!hE0i;s"!j4`5G#QST!*WQc3bMEd1He[3"!!:l/!!$n(
+&@I5m-f.2qS.n,C'EA8W3Y/+@e^srV_E.Sprj67F['R3(A>^R[U:[bAQSl4Y5!Q$X[^irE)DJV/#_]e#
+D@EYW\%[\)VnTUF]7(9k]<elUK)hsaY7j^A\$S6tK=8:j-_\5W"`1obYIT]"YJ%HLYHkXOV?_sk\uW<I
+\$iZHB)DZ.[0<eAZa#3c?_JMNRBEm"MD26@2E.A5Z)t4")Chqo$?`PU?k9<BYc`?\TrtW(Y&P#LXg5@<
+FT\VFYS9L/YdH:gFg8'H,ab^;#[X[:YcWKaYcb+3YHY76SI0bIXf/D0YHG:7?Mjg$W"c,+IT2XP$]q9`
+Vh6LtW&$5sVl$@^VihcBVl0f=Vl*f-T;\ZbFU"20Vkp8+%%=)jW2FS9SYr4o6)UWZ0`Z0iVjefhVkO;t
+VPg2eHNp7BVP9f]Vl#[_Ff210r29Xh=o8:!b9u#s^u6jHGlRhNikXM5!8H0,!.NtehW&,H!8?*+(uXHY
+!1qm(jW6PbH0*nrj:D<DikN[t(BBl_[/^3cj3%E&(ZF50!*80[!!MEC[GND5Z/slBWP.?RB`K47i0N$K
+g"=KA-i<s+['[0H[(*]&;7i_6,,;TYJLA(!!1(=,YI(aOD?-*7"aRhq=s:,Z\%%G&Tt.\B\pbHg[C3HP
+KFXrj/@e^rX1O`p0KQMPJOR&YWsEFN[(!QA*']Y"\?iWM\tT@Z\?r]Q[(!NOYA!h6rj=2^[BQiZ8$/Ho
++.B@7F!RlL!K+%aYdCU:?ic7k#]$TG:EHaEY,m-ZR/O3-E>OtHYdCWW%AL)18/J5,NC5'LYc`%1Y-4c4
+)dKPQYHOK92heE:ZE^^<R0[l9['-[@YHG7:@/L$(W%b-JW2F](Vj@`0OJo'p+K(%rJu5KAVPg=s!/7?S
+B;VS")Pa4/W-SW-Vl-JkCD2a,W$QBjQ`-fN':u.V5pS.\Vf"MnVk")qW2?MkOr#p(Vl-AgV5TFX"E(-9
+Vl0Kl!M`ir!("fOd)F2]i#;[TGlRhPf\mJDi^Wu,j4^oXg>iA:4kTfDjl6=@XlJ'k-3.*,iS!-#!*%\+
+aOqC1HeIEZ!1)V,rW"1VjV%XHj-'HEiPO:-AcMfajkdc2^YrAs'Aggag<81%fs*"(!!'B=['m?K[^^lN
+[(2h;#ck[l4Lp.GTXqM;[][5u#a;CrB==[6S$]Q1[YY0b\?iQRIK3DM>#];X$`g_EN<l#b;iR1LS\71<
+]""sO0mQB2['ku""bX4lZa@9;$BD^)[C!<K[^NPYqu@>9['6sFYH;k&[&oW'$DstK1cDL\!LBps['$U7
+H4#D.$<sa,7ZXp`Z*AZ^T<GT.X`4G89M\2c)\&[JZ%!+BX[dl##a2;IFT/H`%4l9ZA@/Li$3t^YY-PF;
+R14\M['@!FZ*:C<AGcH-VZ*M7Vl">dW2GR]#+DE.0rK!kN2NSPW2$;4#(N9M=/Q+a6APQ=2PtU"Pc(CW
+VeZ?)8P;KU(CHV/VKiB%W'kob"cB35Dl9M.#q0FL@&U#M"pAnDW26GjO9p62q5=:"quAOi_V32Sg><PD
+g##[-!/BSO!8n[o;WQBLfX^#^!&1)H!o@\m6.srFi>qu7iP=.*&-)_0!&4TV!/B4d,lgBl!$sc.9B6'f
+i8M9J!"8i3g"7VO!#OAA^Y.OO!%-dJg=aR$g=XJ)quB-jZF76L[^_&X[C<c:#UQ:E:ptNKS%?#8[]mH5
+"-Kl+.rd9u[^`]O\VLBb[^<HSILVmPX/iUI#-5;CWtTBO2lj@r,AjS?WjK4A$r<aVMmp.+TJ?Lu[^3EQ
+U^W6nZaI9O[^3BGC&@s2Yct:5[BQcW3O,fjNsm5#TLQ+u"-9RhZ*:I8N<b'>(aiiF/?c1_[&nWYSZ]B*
+X`4i8YGnD+A-f'9YG`.CW%k3R%UQ=kUpRD7%n)t7IBKcVQRiaMF0;pRY+#rOXgPF;YHYF>Y[[M1s/#[m
+&#OA*W2HSK#Tf1q6Dn>qL]459Vk^/D"+6pZ,%)fIVl-JlVfW')W2HSlCC?&pSXQHa"e2EfS.Jtt/XrXG
+>GEX8W2?I"6'QG7W2HPR.0+8bW!'#\$@/QGVu`YuquCED^"Cu\g><eKg>h3X!!$PN!87_Z6/^JNhQ>g$
+!%PY^!!WE'gYUW)h];c0f[\^7&-,M*R>/Zb!/]ajNrT?L!0#Y4"M"M`g#:H]!,3Drf\>Fc!!!\bd+I8c
+!%$OLg=b05d+YTTqu@&/ZF76LZako_ZW4H@^7,?SI8%/:#C3hf[(*EPGmL:S"`Co%"cKh![^_/!U:.S?
+\98:]\[JrYJHr*a]!b<[F)e_%ALDA.[^<KG"`qAdYdUpG\[Xj(VRX"AV?hmarj2j:['d9DD>XD5YSXIM
+[B4g>[B?p?O:!1L6Ec7RCTXhJYcpj(CC6]@#@OZT#CWk]Y-!'YRBWm!X_/0CYHG+3EseSDXg(5;ARr$I
+=X7BZYI(O;#\C0CYHG:@Xfs_bTWPT)SI9YF['d9G['@!>B)DW7V5:,hVl6M93rZ'"VhkU"Bg8MI#%sg3
+VPp>hB*OWu"C.mB"F$`AW2FbB23=c7W2=&3Su8NcVeu^)Vl6IX+(8QUW)XsG=/W!pUBG#'Vk^2gW2HRM
+!1'L\Vj%F+Vl6NkVu`PuquAjm^"V,hd,,lEd+HP&7fWN"!9#g9%,]dUftH5N!-,jU"Q0jl+lV,,hAuZ'
+g>UcC#QU1Nf\5<u!-@)V/)^I.#6rlA!WWB*g=b>n!!hQE]@bZWhq7u0Fl1m+B`K")aOSttg"P,Q3;`bN
+Za7$F[C!N!4gVT,[()\;#"6&4-5!Ak[^NlQ1.8aT#_ot%?NZP&[_%(qWj]C>]7(Wu[^NQTK*%pY\@I_-
+$`1DEV?.-d\?r]M$?$Tg[^WT?ZaRKJ#*u^+\>B7b]=>?LZideDX)7b7?F-uF[B[*BG;Ze5YdCNr%gY8#
+XWeCYY-5(4Y:Mc;W!mmPX]#I\Xg,!L$Dao/YH;d]W3<G4X`Xi@Yct6]$OrZ/Y+5b+K!2ScYRP'FZ*1R-
+Z`pU5"cBLfYFbiE$*LM9['d9D[A[a9!</kpW%Ouf18q(KVP]7Z"ZWEW*tFp@Vl6Jd.6+5s#]clA:]l9H
+VPnA:RA[!YVe[$<VuEV*E!)E)W2G"J$Bh<bPQM8>rhgI,$!sO,W2PuYVl--jJu>QFPlQ'+qPXFb@Jg-*
+^^S*,g=bC$!79]X_V\)e!);D/!!&VNg=kYc!!)#E!#jnS!!"k4iSkLNJ_o%iiXc*Rg=k6>(BAU3g#"7Z
+!+t*GB`J,^imles!!_KBg!FWPhVt+,2VZsFE<%6Ern.Iug"=Z44T#3YZk'LL\[HYnX15XG\@J(=0"+ci
+Uc&sH['Z;q<3!X'!dM/`YY#1R]!uV`R^f`5\8MP>]<f)WD?6TF[^<4H4gql2[k/#q[^<WB#W/obIA_L5
+Za4"%XLPXLM[O[<[^3?L['R6FC&@u0[3)]VY\4ZGYHG79XcO&AYHOEL'n3NsO?lF5Y*9-)Y,t*q57D\:
+X^DNtYI(O9@L%srZE:9;"eDd"[BL0!YHY.5-P*Sg['-#-0"%6fTPnAHZVr`]YdCQ\%;2iH[C*6H[BHcC
+quARPW2HSjVl4,9R]!*]Vl,=Y-)[Z'//!3)W/3Z+RAYrFAZ2N%4U?#*Vd'I]Vl6Mk?3H"\1Sq%K>m$7f
+W2HBt18h(KV]uPIVl6MV"t?L6BpNLAV5@'ESuATcFp_`WW2QVmVl6Pg?2O[kbKJG_^Yd`O!/':`_Vs??
+!!(a4@K6BQ_V%EZ!.j3,!".B8])VgIi8+S:5N9c@h?EsEikOF("TW/ng=<S2!8?,_irC8'g"tE?AcMhS
+Ae/qn#/@qR!1_`qiZS:-i7QE,g==R'WA+5M<jK$>]"#,EALE28[C!<M\u'AK[(*/Z<&RHhO0?(#M(M;o
+Zb!;Y<I(H[++(,tZ`R.SJZH,dYZ`E"X15XG?^eO8YdTO>[^``RLF+ldA5'Fg1-ScW&XBu:['4s6BVr/C
+['m?J\$'ND!<035YHYF,=X83nZ*gsCYFf4+['-?>82*D?Juu/^Hm_.I[B6WB8o'u,*c7s_[AueDF/ZFL
+YYQN[W3EM6;ie&bYHWLoYHY:8GTnhA=$j-=/2g10M63qgY\l!rTX;,7YdLmBY5i&0!,/4*W2HSmPZ8iG
+Tr=lfVl,ecU8XuY@mqq6?@/BCVKF+GOJo(P?UeXl?5[FKW2Q=V+`<jJVkZm-At>luVbi,GW2$;:Br@o.
+VfNq1;,fcYFX]+<>_8oQVk[rT=I,naVl6MlW1mSq!"ciWg>LZ-CB=JQUY=8Oj5=eY"f^27L'[bY3!Lh,
+hngE7!+=14\HW$@Ba+PHT%_P_!!![r^uMNs!"+qCj4+,ohV#Np,nJ__g=mPH!!*-$g)g4n&d1)Pf[[)7
+!!7;rd+-k#d+PBPqu@83YdCpI['QsCW404EZ`q%?[LTCI\@8iOYHkLF[^*9LY=>q+Ye.?I['R-BYd1aE
+YILsC\@AlPY.1XA['mQM\?r`P]"58W['R<I[CNBC['mHMYH,(>['[9N['-U=\[/ZO['R6FC&@rdYHP=;
+['d6B[A'h-YHk@8Y-5+1YcY(8ZEUR@Xg,+;Y->1;YH>(5['I*CYct::YctJlYHY.8['-[7[C!0AYckI<
+[B6X>YdC^<Yd(=1YdCU:Z`g=4YI(^@YI(L6['$gEYdLmBY@@D0s.fRl5,Y9OW0aH\W268eW2HMaW2?Mj
+V5'lcVl$;hW2$;gUSt&`VPU2cUSXodUSt,bW2?GjUSjc`Vl6MgVl-Jl,cIW=W2QPjUSt)^USk#gVP9Z\
+Vl6PlW2QG_Vl-JkW2HSmU0[Zs<4fc`g"FokUW\#:gY'?Ri7QfCSD)lQ_S<@hd,3fqaOmcO^q8XcVS^*u
+\ZNQt^pVk:VV0kBft$(8bJi2rXl7g`bM_<tg=a6tXkM[&Xi9#H^o8!5g=k6'gY'ZIT#KX7e_8R#fr6\'
+!%5.\Za@'IZa@6N\$WQN['d6H[^<EL[^WcU\?rWL['[9O\%B/Y]"7mL-b?am\$WTI]=5/V['[<O[(<]O
+Zb!KQ\$`HH\$WWQZaR<O['[?M\GioI\[SrP['[BT\$r]M['m?J!k5@IquHc(rj<<A[C!'?YdC[?['?sF
+YI([AriZa7YdCdF[C!0AYH>%3ri[KMYHP1:YdL[=Xg#19['d*@[BHg=Z`gd@YHb:=Y-kL<[Jm<I['[$D
+Yck75Xg#1=[C!'>Ycb=?[BR'HYHMF5!<8toVuW^pVuEV)VPpAjVl6JkVl6MkW2?KkVuWaoW;`[tVPg>j
+VZ*IsUSt)fW2KWn"fJ8sV5C0hW!&loW2HQjW!9,sW2QVlW;`[qVPsHk$)j`"Vl6MlW1mSq!#`bpd*'ei
+d+R=5j2fs._V2fPg=a?sg=bHF0\O=^d*(+riS!5Df]:uFiS*AH^uNu"Z/Xf\fu;.fg"#$7]tiRQg"G)k
+d+Hn/g<fiO)VN!dg"G*6f\YZ-^rs^Si8`J*d+-k#d+PBPquA4R[(!QR]!euQZa@*L[^<NRZaI6GZa@$F
+\%&oT[C<ZTTQPU4DJ"<t\?@9k[^<QN[^NNL\@8oR\[8cK[(<KP[C<NS[]d-K[(!ER[^3QR[^WaF[M#dI
+\@/lR\$WTQZa7$I['R6FC&@re['[$@Y-5%9[Bm6JYctO<Yd:U<YHtX@['-^;Z*CL:Y*N^;FC86hVm*D/
+YI1U@Ycb:=ricO4XgG@:!4Dg0'sY!NXg#%4Y-bF?YHY@:YHY15Y-5#,YR[hCY-kO;ZaI3F[C*3A@f-6+
+VuEUtVl-JkVY[4rVPpDfVPg8fq5=UY@q]ab=)"/&U]./4W2?MlV5L8iVl6MkW2$8gUSk&gVl6PhW2QSk
+VPg?oVPg?jW"c/.USFccW2HSmVPpAjVl6MlW1mSq!#W\og"G$9gY(,mfur(&bLkL`g=s6Te\/j!fg4?G
+g"G"U#RqIN!Y:7CZ/F?dftc=o^W"mdhT4Tng:Pnn]AqW*e_o/hf\"($_Vj.`i7lu<g">'3[C+]EfYuLd
+$K9XQd+-k#d+PBPqu?i*ZaR7?ZN[_C[C3NQrNmQQ[(!HO[C!BM['mENZ`ppC9*0:#?q7*&Z`^@8rNnJg
+]",#FVQ[A<[]m6EXKT"7[^rlU\#Z^7ZFI6BYcb16ZF%-M\$WHL[^WEJ[(!BK[^<BMYA*n7!4,J-YI1^E
+[C!?HYck7<['d<E['$[;Z*^a?['$U;Z`gO85mD"V<BZtWZE1"4[C!?KYcY%2W1U9#Xfnq2YH"_3Xfnn4
+YHY"1X0Ah6Wj&]+YS=LIZ*1R>Yck73YI(L@[BR'HYHMF5!!K0rVl-EkW!TB#Vl-JlVPgAkrhogpqku9J
+W2?>gUHJ]iIo/7kW26/XW2QVlW26GjTq%@AW2HPgW1olWW1g,eW2QVbUS"B]V4RX\$`0f"VPpDhW2HSe
+VuEV!Vl6MlW1mSq!$]4ogXX*dd+Qt'hV6`,_UZi^aOo5$g;r"%aOo8$^q872!(?ko0*)&gfY=,Dd*'DY
+ftH>$VN5Mlg#:\tfVtC9aJ7JLg=bMS[@Y(b^RVF:Z)t^_hVm/<^"V5oU"e8Rd+-k#d+PBPqu?f%YIFM=
+/[Vjk[^EKL[C<WO[^3?J\?iWQ[^<EJ['m?N^2jC[^:9lF[%&a4X1#IG\%AL^BLHiY8n4O+[]>*#?"6oK
+X15UFRl=NG[&eKu?t)c*>a)M+rj3-EULU10['R-J['R6FC&@r4YHP,.YnXRQ[BQpD[BZm<[B?gC['6j?
+YckG5[3i,cYc_OBYHG'rYI0K@2Q3j_Y-4t"><?A)5?=,RYGQL^;H?CoV])bA[#d"<R^B)/,#qW/7T"lG
+XgGICXdW:_Yl;$6YdLmBY@@D0s.TCi!iDoopo"@mW2HSjW;WUqW2HTnV[Ho8Tr+`JVl5Fu1S"BA,*c7i
+?sYupNi/eEE>;5I86D@ZW2>A&99?*DAKF]H4[Mkm!iDoprhg0d;jF;ZW2HSlW2QFrqu?eqVV(n%9>]'+
+g=j`ng=Y**fY>VKftZ8$g;VUhe_8R6j9G[^jl'7ob=Va7O4r7=g#?lN!!WW-!EA(5M&63m!<<1[in2+:
+!!$EJS-f5s!WE'20>QSg`RWgQ!H-WAd+-k#d+JH!0`1n[YctUDZaI-L[^<EJ['fn?=15HBZa[<OYI(^G
+['[9KZakSnX15[G\%A[_4LV])\%87dE3m'XVC*mi[^_q0H+8b>?`plJXqs72\@.G#O1)6d9FXe#\@/cV
+JcLtG['R-J['R6FC&@r;YHP+9[B['BZ*cX"[C!3H[C!0G['QpCYctO?Z*^m@['HfT%B6J3[BH^3*]1()
+ZEC<s.:]ZeYam$eS?K,]!Gefb%9*80+KQA:YcY'Z#D0.]R6hBOXKSk8X`OStXgGLDYdLmBY@@D0s.fOk
+!iDonr29Unr29UmrhomnW2L*$W2?MlV5J/:SZ8UeW'6ai0rLtHW2P_'?_sZqPTV05Vl,IRB;]nZ:nste
+TG')ZVPnhDH`*Qu579cMVl-DjDZG6aVPpDkVl6Pg?2O[Q]=Z_:d+Z:giQK<hg"P!"aP,"o^t?i`[EI:_
+aMQTN^Y]V'RG$HDg#JJ#-NMoT^Y%IF!!^3sZ"X1<AD6!=!"@^-!!'R_iLp5Og#(F0!%HWs>Q+U7U#FkF
+iY;GFikj'mg==R'WA+5M"1,>@\Gii8[HOt:\9f*j]<o&S\%3SS\[/ZOZlEA_\[T&XY9>=$/%VJ]J[rBa
+"g5DCZnGIh[(2_-VRa:J\UX['\[T,U5RK6W\?rTL[C!9HC&@r:Za7$C[C*BH[HY%LX_eoIXgG7=Y-/g4
+Y-PF=Zl;oGXg#"2Y9#!sY*oc@XfXemXKT"<.8$bMXV-d"SZf0!YB'_WXfnk43=ROAYl;$5Z*^pF@Jg*.
+VP^;jVuEUpVs1,^Ve?g0rhp4&W2CItVkp;hW#&5.V^JF@U)G2RViV1%Vl2]\TVnZc-:k)4VhtP?Vl6Mk
+D#e(DW2HIL#q5\L"/`#o>l4R-^qeXVe]ZY"e`kaJh@0I#j2fm'f\c`0i4m7fa8c5#hrEDHW;lq>j'Vj$
+hVnM8U#X#C!!(ZghFdi_j5AnV&HE*og"sLC!"%T:bL"Gd_U-(MquHc'!OTB9ZiIMtZjXEd!+KP'E4!*a
+-V+0E0t<8GS%Gl1[^`qN"e3'%#EQL16Vt7u\[*8P[^N]5!M?a-ZF7/!&ZrLKMcG`AP.A""[f3T5C&@r:
+Za7$C[C*BH[J.'"ZjX!I!EE8[A$iGD,X)+02hD6pXg#.8YcUS(OKYAcK!)4;7^'5%ZPuB<YcWfeQ*da!
+Y-BJiX0K$Z8q.2%Y-G48YI1dD@f-3/VP^;jVuEUpVs1,]Vd]W3;HGV\VPpF93rProHNT)&USarfVb%#J
+VjI[8VPc@>W2QVk(IJ,!&q^:FW2HJjW%&:LVPnZ-Gm8_qrhostW2QOtqu@#<^tIDkbLtV"l.Ha,#64c+
+!!^<nf`2$,gY1X9!(5`\Z,#,IiW&sKj*gtWjQ$:@g!JWl!!*#T&ip"hg"X3mg&M,EiQ*/B,lfOTrRqA#
+d(_73!!BR6[(-+B!4D$t,e\=(S#1UT[^`Xk6asM1\97kL]!euM\%A+0M7KVlD6os>PI_sHZaM,X\$`]/
+"erN8[^Wkd!MQs2?&#j;8@H";['m?KY%mk7#d^kEYdLmGZ*ii'26LQtO.U<$YH>2X40PiqX_7a-YHG::
+YH<lfI'9=R?F?1qL9IedYTZN?Z*&feRBNg!Y,u(D"dlHs;Ko5h5-_;q['-jEY@@D0"K&&pW2KWn!2o([
+.ApYYLm2U^Vl$C82lNXQVdodmVl6PhW2PLQFf1W4>H!WUJ#B3@W#\;*W"OR_O/JnQW2Eo'Ni8jNEi(!A
+VZ*LrVl6Ph!+#L&#f+7/g"":!g=>H@5NE(M6Yd2;g>C6W!86,Rh?a1%i7Q5bg#>F#*oheO"OLHT0]:^#
+g&M-+g=S(Z>N+;pf]!&7<nQF4)W(MpiVqL5g=aZ[1Ah+SZa7$Krj2[5ppBRu8%<^JYeIQG[^rsq:Uma:
+]6b$`[]m3KZaQG*R_>Bq1jTBt\@K&UZR8_^[(;e.Tt@\?['s]ZVn/o5=+N45X1#LE['R-CC]"/<Za7$C
+[C*BH[HY$uY<ch/YHG()Yck8T7'Er$X_eK:YHY:8Z`fPnO04iR/o1kYYH=t4[3S;H[BG_rR'!a"['!UE
+TWP's9QMlnVm3D3rj;d2A,H<0VP^;jVuEUpVs1,lVdp",VPfi[Vl1\'Vl$;hBF5B8Vk^,eVPf=PL8U(7
+.;&iHVl0Nm!?ai1VZ_kYO/JlSW"N2@QD^2U8T$$^S#3-]Vl6Ph?Mjd/^qeXVe]ZY"e`ka2iX#UsjkG@C
+i7S)1iP<.d%00qnXl8$Mg._Q3jB2H_%0-ARinrDBci=()e_j(#=lI6OaOgOoF5_rU!##>4N8`F+e^2LI
+1].4TZa7$Krj2[5kd3.SJe4uk['m?I[NA5S[C3Z0!,K<U[(!EUD??cLTa6(TM[YHN[^3=g;n00BT)bUq
+['[CX\4\!P]43UgPDKHR\%&fPZa?oMqu@#/Za?sE[C!3Hl*Nj]F:kIT['-mAY9$'7Z*(6`!F;k8['$g>
+?j<@.QjR`7Hk1V/YdLka8$0,&Pl[;T['[!<5p!D8<\0MjHjEfXYI1aF!jo1@qu?ksVPpGkrhogpkbo_E
+%@j>pVl6Gi)*k*uW2G(E=f/-qW2QV!".,pH#&0uY$?`9GVu\#/rh^Tm!0=%VVl-CT)Q9Q4.?&b!"B;:s
+W2HSmUKm]s#f+7/g"":!g=>H@8(\OVO5&@BbIuX1!9;ecj"165jiGEnbMr^*Hf\B1&)&0,*o>Vtb5_P"
+^u8)i>MdH?j50h:g#2r3:bWpj!or7_`R*;G0DkePZa7$Krj2[5n$Mqu8%W[FYIh0M[(3ag5.J24VmJYn
+Vn'CH];.*"\%8FAPe4V%"-L4*[j+n_\@J+2QFaT9[ZWA"]<ilU]=G@]'X"mR['[9FC&@r:Za7$C[C*BH
+[HY%)X^V^@XgG7<Xfj&k2Qa*cTsQT_T!#3#Xd^bMYH=E(LomgG#DB4_YTQQAYH<ohMQZr^'87u]XgB:9
+Xf\d0's+R@['['A@Jg*.VP^;jVuEUpVs1,uVd9Y&Vl$DkVl(@fVPg>YW%eLEVl-JkOX=HBW2PpbJZ,J0
+"+C0H!?4N-VZM\VK)MSUIOK67W#gkqVl*N+T_t_hUKm]s#f+7/g"":!g=>H@/)ga5UZ0/CaPPhT!8lbl
+H,oscGi7Q7iF2ckg#-WG1udQr!%[$eirB)=i>^WG!&ilriS,pa)WJg<:#b$a!W\qHf\+s3[4M4U"1,>@
+\Gii8[HOt[\k!!l\?iQL\u-SqR%o^Y\>qA#J?PiE6X?k,\!@;,[^W\8!J.JP%l^Q#[tY/fYH+IO3G,_.
+DA]@^[L0I-!.h2[\$WQHC&@r:Za7$C[C*BH[HY%gY<E2NXgPOCYFlm[NLGE)Ybs#fF0M:)4&W8aYDN`e
+Yck5n"a$r@&2L,bYBL=EYGI_210Lld?l5WBYHN]_F/H+D['?iDqu?_o"/`#qVuEUpVs1-@V`P$8VPpDk
+Vj8/@KogXbW1,4KD53>W2bp-HW.G:OW2QUT")am"$ne!IW,`)2Tph*_0NY-M>SNS)VZVGMDO^U'!M`ot
+!!pBUg"Fp!g"P!Og%*fdhuEa>hpB?qi,\ku4CBN>fo,n2&[?+X!!'Rhferg1g=b0[!#3%f!!%c3fbshj
+VLr=o!!;-5"9<o2gY4F_'8bApg"N\_qu?i*Za@7AZiIMtZiQk479+H,[^W]SRq#6(>?6$W\?pNT8Rbtg
+\$rfQH;&R\YIh/p8r/(&>*u_%JP0N]G$nmS]"*u-@&LQA[]a:%R'a?0['+3A!!op;['6sG['@%'Ziuh"
+8nFX!riZWh<^]ta8o(]6Zit535?1U8riRcYCdMj.YcY9T5C.EI:Q)K^F?ru.B2r*#YHNXU<M6M$Y-:q]
+Mm]ar[BO-<!!K0rW2QWnVuWa[W#1Or7UhU\W2HSL;aF>V87nfuW+S=W;GM]>W!6m!AX&sfVB'V=FDjfF
+K;bP_4]G9g;,rRQVg_99QD^UYUK&murMTal?2O[.^qeXVe]ZY"e`ka(<WW7+CYIIrfg,W=!<<*,g>9mZ
+!!!$"/cOB>a:/+VCUN-<(]YTl!!#(6XV:a:!=/]-;A.pJ/H>fmi5"!Q!WY:)fuqRD0`1nQZa7$Krj2[5
+la.21[^`ZT]!SiQZadBN\$iaD[iVlc\@8fO[_&lQ[^3EO]!o2Q\@B/R[^`rY[(!KR\G`iF\@/`P\@T5X
+\$WNS[^Z7C!4Dp3C]"/<Za7$C[C*BH[I:L%[3Mr\Yd:O:['d*DYI(L;Yd(@8YcbC<YHP@AY-#%;Yd:O;
+XfhZ-s/l:(*j)TPYHP(3Y-,"3Yck@9Yck19YI([=Z*1RB['-]Equ?ksVPpGkrhojqW:6bbVuEV#VPg>j
+W2HMjW;`[sVPpDjrhogpr29drVl-DiVuEV@USt)gUSk#gW2HSlVPgAkVl6PlV5L8iVl$DkVPpAjVl6Pl
+UL*iu#f+7/g"":!g=>ZFrmaWpg=a:"jOq`2^u<u$j5/bIj5\e=g#C]3bLkgi`SSDbj5ASC[FsEq\_?$%
+fYuOthr35?hUpN9^Y7B%hnn'f_W0V.e]?Fu[5@d]"1,>@\Gii8[Hk1/[C3TT['[9N[^`KIZapCN[^WTQ
+['mC?[O&8h[^NQN[C!-G\$rfQYe%9QZadHM[C3KM\$rcPY-tdGZEq$Krj2m9['R-KY%RY4#d^kEYdLmG
+Z*j&-rj<KGYct=<['-X8YckFAXfen2[BR'CZ2Cd-[B?a<,IF_\[BQm<Y->::Xfnt:Yd(O>YHbI;Y-GC<
+Yd(R>Z`^I<[/IB7['$K<qu?ksVPpGkrhogpn#65`rhopsVl6NmVu`ZkqPXInW2TWlrhp%!Vl6PlUSn'h
+!i)]lrhogo!iDoor29gtUSt&gV5F6j"/i&qVuEUqTN_6n#f+7/g"":!g=>ZFrm_\9g=bH(aP5A"ft#)K
+i7Qc9d+QtJg)/SugX+U,hSn4&e[=8df\4EYi7lr3g#9aGg'lZef\4ldg>U_u^t@9Gfu;Lge^3"%Tdfm>
+"1,>@\Gii8[Hk1+[C3TL]=YYa['ot@$+%+IZa@-C\$WC;ZnAej[^irY[^`fR[(*TRYI(XE['d6J\$iWM
+Za[9JZa@*K]!SWJ[(*WS['R3ID>XD6ZNde@[C*BH[I:L%[/dK2YSsXHXg#49['d9KYI1[CZ*1@=YI1dF
+['d*@Y5YOGZ*1=;['6a;YdCa>[B[$BY->7>[B?pEZaI0DYI(L<[/R94[C*3DBD_`4VP^;jVuEUpVt[.c
+W;`^oW!K/sVPpGkW2QWmW!B/sW2$;hUSn'h!iMckrhfdoVu3IuVk^,dW2HSjrhojpVuEV"VP^8hW2HMf
+qPXInV-s3$#f+7/g"":!g=>ZFrm_2+g=`Ugj?);Qe_&R*aO&Ve^W"p;g"!^bbLtRlg8W`^hVR5Nf\+@!
+g"N^J^t@2k^Y7>o^r=[Qd)*TK`S'1d\_@&9"kq/Hg:o]H!!BR6[(-+B!4D."(:CT\\>u*g[^NNR\@8iU
+[^W]R\@K&T1V1$(\@B#R\?r-*Q_p[k]!f&W\?rZS['R?Q[^<NP\@T&V\%&rV\$WNP\[AlS['[?HC]"/<
+Za7$C[C*BH[I:L%[26*PYck!dOKbppXfnn7Xfnq4YcY(3[''A3$a-_9[%3J>TV8QkY7\"@YdLa=[C*-@
+YI1R<YckF<rN?X6[C*6@Z*(:<['6cFqu?ksVPpGkrhogpn#65`rhp:(S;2p!Vl$AiW2QVlW;NOnW;`^o
+W!T;uVNd$lQC"MJrhft!Vl6MkW2T]n"K85sVl0WoW;EIpW2HSmrhfgrUL*iu#f+7/g"":!g=>ZFrm_S6
+g=bJH5t0M]^u=8)aPYb*rn]NjgY(WDj4W,<^#$V?:cWZDj5AYJhV$H5i7634j4i,;hV$i?j4WDMg>g`6
+g"tH8gXX9rYlH][!!BR6[(-+B!4D."/[`$sWGe/lR&-IIS"6piX1>!nURRjMXIH)\[C3ZLKRoGU@[jj*
+S!BYY\=obuZl,C7[^N6#U8GB-U83p<Y.("!UT:c0[(!5Oqu@#/Za?sE[C!3Hq6]n'rj>A'Ycsj2MiE^e
+Q]mMo[BHI0RZ3bsPa\V6SX?[bXflkhMMbDpYbI59QE@BYS[>f3Oeo4aW.gY3YcaC`Jr6b7Pb"8B['@!@
+X^M&,"K&&pW2KWn!2o:arhoao!14O.K8##BNf/^NVkKQWOG/dPMiaNdP`GaA-DPNtJqHsWVjE3kN2W\9
+P,>1VM41B@SUZ`cVl5Z=I"S2mMis0mrMTaj>5S@+^qeXVe]ZY"eaM2jeJ-`kfmX,d4Zm=U9gq_*VM<r8
+4^^W7:LK\]Bi`s?i40[=2E:e*j*O3P;WHG5B#;a48qYdNP:p6XhUl%A.QP&l:M+"&g"P-3UFH*@"1,>@
+\Gii8[Hk1G[C3T31on0XR"l]JQa_N[[[W^[>F;(>4c#T:\%.;_Uq""0Y*:2WRu^En[r,Za[\lET\@%&U
+PGYRFB:+m>X/\R(S#`p(['m/Qqu@#/Za?sE[C!3Hn$N)%2R0KjMCtj2P)FQ)MMeTY>d9BO6Vi].H8U#1
+Y-4sR4.EFUR'2<]OFfu>Y@(A6Yb4"2Xg*(/'8E-`JQn%eI&Ec%?BD%kZ*gd>@f-3/VP^;jVuEUpVsgS`
+VuEV_K.3CiMM#seJqL">=Jgq05YZrmF>@onW2QV930C,;O/%8=LjML&W*E6!Vj95jVl4VlJ!?^T=+c!F
+S!c6>Lmk9@VZNck?2O[.^qeXVe]ZY"eaM2jeOnQLff9%uj%DEP!&cjj'*@,_56([G<#u#Z7G-;N*WT[.
+i*!TI$q2TF%G:jbg"pcM0](M%!&/2j-NZ=_*fPXM"@\'ug==ob1Ah+SZa7$Krj2^6[-Y.l[C3TR-8qR1
+\=tUd\Z]HlVRX<>H+:JO17bSV[(0R'\%/oXY;_BO]8.K7BN)LQXXBLI[t?]>[&#7J]Y1ASZoWN1ZFIBN
+['+3A!!op;['6sG['@%.ZiIK4[/dK2YXTfjR'*W\.'9\W<@4??Y"EK3XbeTlYHP=8<ACYYZ)t2aI'0St
+*4/p?Xfe]MNNKF-18;.H-Ch6AW3<QbCnIr8YI([?@f-3/VP^;jVuEUpVsgS`Vu<P"+"WJNViN.%V`geQ
+,*f((7V8NrJglSPVl6Lj/Z>SGW1kkeVl+VRW)uHcVk5)cW2FSgQ_ooiP,G4KVku.\Q)1CWVPp1nqu@#<
+^tIDkbLtV"n(I]j*ST6#g&M+Ujl0JEhrD*F!--lV!".WC2#p:[gY(F7!<Cd/g>Jq1+l_H%!6>3AiS^:-
+4Q,69!.2Rp!+b3PPM3kR%;rl<ftuF>0DkePZa7$Krj2[5la/:P[^`iN5T6`6ShI7[N,BnF\[Gd]\@R\D
+Odihe\P"]hZa[KE)54LMWtqFQA%3JaZne2\]8I\oUmN"+\Z9nOZo)`iX1,UG\$'TF!!op;['6sG['@%-
+[/RHtZ*:I7YW3W%Xck38Y'sb%:Tq$$@'?_`*e]TW[')bHXgP=7U)99&YGN)'B3)4AZn.BEXaM1FS;S5k
+Xef^($FDKpO/T4c['-]Dqu?ksVPpGkrhogpn#65`rhpg6UGWdXVMcdoVg)Jf9rFj`?)OTH)L[C>W2Dd-
+rhq!<Qkb[ZVj\6[@oK;%W%!V%Vfru/P(OIGVj_.^W%2,-SGfAeUL*iu!5JiTg"Fp!g"P!Fg&BMog=k6;
+[/^2shb=*Ej<Fg.!9<#<"l\Jg!%U@faQ!7#i6^-7IK3O0i._5<#Q`r"a8eliiZS:YA3'_-hh)5Vf`2.>
+O4`.,fsNX6!!BR6[(-+B!4DR.o!CWW\$I'A];?UU\mpkR+fDkP>e.D*5-M?"[^VJCICZqnVG1%$]ne\[
+A5BhGXZDr^\q`PZ[&Y$m]<<-E[PsBKZim_C[]aBB!!op;['6sG['@%'ZiQZ#4gc5eY+H]AX]C$q*hf`1
+;6I$O2Qa?oYHWg(DQU+GT0l/OY'Mk*=%'0oX#,m>YBW(1[&=g]XfiY,YVLq2[0*\:X^M&,"K&&pW2KWn
+!2o([&s9)j(PATL(oO<2Hu9jhVb'U\0;j+PTr=ofVh#_"Vl-;S5XhWLF"jOl6)UWQ0SlX)F#BnpSePt<
+U(rTa/q0atVuEUqTj%?o#f+7/g"":!g=>H@,@]][!'91V!7g!..MMl.huEc8h^/>uaO&Z$1]S'Di4Eb)
+!$gF^*!"mu!9)Y'!(5Z%)Z\ODQ2hKUW;oZL!%lC;e^3%&UFH*@"1,>@\Gii8[HOtSLjb>%ZaQ&QZ^GU=
+\4;(X?ZrlbM)C'N['R9NKO&MJHE!BNJVeoA[WXcqO.\aPMkPVZNtRV[QplU`<2Qi^D3Ufu\@8oND>XA>
+Za7$C[C*BH[HY%eH>eCCZ`o08Z]/7mY<?s1;eN>AHn]es['Qm>F])[jCnctsF*r%aY\5kFJX8B%I$en.
+JVC=f4`l'BT<C+YLRPENYHIu1BD_`4VP^;jVuEUpVs1-MF)$&-VPenmVM/0NV`J[m:h-H$FXqN\VP^8g
+E)'_XB:+HYDKTfHW+7W1H]BscG)gAjH[_`D3H'%/Q(g$<J<6P)W2HD!qu@&=^tIDkbLtV"g$76\*"OJ%
+^tpaF^c_eVi;aJE!!q;q*WR-/_SG$e(]XaT%=USG'-7`?g'Ia/-WC'I+]]0T-S;G_!#6OTEN&p@0jqQF
+g"O&#qu?i*Za@7AZiIN%[/737Z^[bo\?rI<WslGFX/E%rX1#O@TrP0mZP'dZYFCrP\@\f8U92&9X.H2d
+[f30?Za-:*W49@AU8Fos\"oq!YICsI[&e'@!!op;['6sG['@%'ZjO.#S$9*'Xf/(qW$8INW1^/_VQd;.
+R&$UeZEgU9XcSO-Xf\RiRB*HnWKa'KYPt11[BQ$sU9C]'R@g4]YFD5XXfek8[&R[7!!K0rW2QWnVuWa[
+W#MUhOe\hQTq.XCSuANVQCaA2W2QJOR@:(NV5Fp'TnnD]VPp&HO.WAKSVrf"VuDttW25QFQ`$aVO-Q*1
+W0*F2Tr=lfVk.5m!!pBUg"Fp!g"P!@fdsp)@^Y4KUQ^=uQJ1;YF.@-)g=a#;JVMOd^Y[nD76OK)igEqR
+T&\Om:N^^Yg\u70d(NSCHf<h`>Aeo?fj]5BUY+;D`LJd_!!BR6[(-+B!4D$t*P&Ve\?rQO\@/lVYI(jK
+\%9)U['mKQ\$NWPYI;"@[LT^P\$icU[^3HP]!f&V\,NfC\%/rRY.M$I]!SjF\c&u9ZiR@Gqu@#/Za?sE
+[C!3Hl*N%EY-+n6Yct76Yck7;YHG%3YHkR@Xfeh7XgPC:Y->16Z*gd=Y->(7YHY.3YPt[?YHb=6YdL[;
+[C!-FZ*(76YckIA['+$<!<8ntW2QWnVuWa[W"l5/W2?MiW2?MkVkU,fW2QVlV5L2grhomrVka6h"fA5s
+Vl6NmW!0#rVl6PlrhojqVZ*J"W2$5gW2HSmVl9Nk!iVf!qu@#<^tIDkbLtV"pY#/k/`545hoNLahqI,L
+WQ=,Pf\k`'e`#B;f[/O+[G'QqiRll7g"Y04fY?,"i7Qc_fG<3"j58_?\`D,ji60j4f\YK>e]$4=2#I=U
+Za7$Krj2[5kd1Dp\$R![ZF@3E[^3?L]!SWMZaR6LY-t^E\$iZMrj3iV[]m*J['[6I[^3?M\$*0F\$NHN
+['m<J['mES['R?N[JmN8[C<AUqu@#/Za?sE[C!3Hl*M,.YdC[>Y-bF<Za?p>['-[=YdCVjYHG7?Y-54<
+[C*BHYck@:['d0HYdLmBYctOCYdLjA['-mE['6d:[Bd!DZ*gsGZ*:EBqu?ksVPpGkrhogpl)4i^Vl-Ji
+W2HEiV@f`(W2$8eW2HShW2HPlVl6GirhostUSXofr29gtW2HDgW2KTm"/i)rVuEUrVkp<iW!'#sVk[Sr
+!!pBUg"Fp!g"P!@fep%p`S/#X`NeC;_V3qh\`(<W`S.lT`RWVpftZ(\aP,L_^Y.;`g<eR#e_/uje^3@'
+g"FI$&^]4Mg=kK8^Ym;hbK.ZVj1@/G!!BR6[(-+B!4D$t$F[FL[C3WR\$3<Mrj3$?YI(XE[^<WT\@2CD
+rjEoTZaI6LYdCjG[C!9H\?NEO[^3KNYI(^GZaR3H\$NI@[04"H[(!4=C&@r:Za7$C[C*BH[HY'tYWK+n
+Xg,+7YHP@@[BZsC[BQmBYHP17['d<GYckC@Z*1F9[B?mA['R'BYHG+4[BR$B['?gBY-YO>ZF'V9"gGDB
+Y-2=4!!K0rW2QWnVuWakW:6_kVkp>iVl6MgVuEV#Vl6AgW2QVkVuEUpVYm>%VPpGkW2$8hVl6PkV5U0d
+W!];uW2HSmVPpGiVu<OsVl-Jf?2O[.^qeXVe]ZY"e`k`eg-+K0g=kE;j/q%gbK/5fZ,P)DhSS4(g"O<n
+e_]0;^sLfig:Pnf`S/DK^Y-6Og"=[)fsTMeg<eKfd+Q1Qrn7P/e^`<O0`1nQZa7$Krj2[5jg59#[C!*F
+[^W^EZidbD[^6RPZEq!GY-PLI['-[B[^<RDZkBgWYI(aH['R*H[C!6I[^WWPZi7<?ZaR<L\$rfS[C!HI
+D>XA>Za7$C[C*BH[HY't[3)ZY[BHa;Y->=@[BR$B['['DY-Y=9YHP=;Ycb4<Yd>[_[BZs>[BQjB[Bm-C
+['6g>Y-bF@[C!<KZ*1O<Y-+t5[BQlIqu?ksVPpGkrhogpkGSN]W2QVhr2:d:Vl6PlW2?DgW2?>dVl-Jg
+USt,hW2QSkVPp5fW2HPlVZ*LqV5U?jW!0&qW2?Jirhogprhojm@/L!1^qeXVe]ZY"e`kaTbKJGig=<ad
+g=Y-&`RW\qhT3RI^t?H5^"_Vh[C+Z@e_/Wme`#2\bM(\#d(nAhaM$<]f\,!*bJM-CiS)0%f\"p3b6$A%
+3W&jZZa7$Krj2[5kd228ZaR$B[^NQPZF.3P\$NHM[C3HP[C!EOrj2j?Za@6N\GW]7[^H+A)n!,]ZaR6M
+[C3<K[^WTO['[9KZa7$K['[<GC&@r:Za7$C[C*BH[HY%8Y-kO<Yck:<Y->18YckC?Yd(F?Yd(R<YPtm1
+YI1b:Yl(jEY-G@@[BZmB[B?p?Z*1@6Y-518['['Erj;p6['d*>@Jg*.VP^;jVuEUpVspY[W!B2pV5L8h
+W29Hk!2fao!2ogp#,\>sW2QSkqksLmr2BXnrhp("W2QVmW2HEiW",]&W2?JjW2QVmW2HSf>l4R-^qeXV
+e]ZY"e`k`nf[/Tf^"_8XfY%:=rn0<Ig"P0:bLtUdf\=Kg_Vieog"P-#`S&>Rf\4<`bM(V!d+Hn$g=s6l
+f\+'oaMQfQd*U=rg""cN/GoJVSXlIQU7eBeXgkmP])B;QZE((.VP^/hWjKCM^:qV,rk8?=r2U44]t_>#
+`1ER#Z+\*T`rEjT]%s^uZa@0JZa[,Pqu@/7\$WEK[Bcj9Unk#jrM:%%XKJ_3ZF%6U_S<k!]tV5[Y5bp-
+]*l!JWMuYf_83alXeu)m!iW'&n[.\j#IUtD[C*3A@f-37Za6m<Y-G49Z*h!BY5PU9['R$BYct7)URI^C
+SXl:@ri6!rr1j@lWr8t%TqS6YWiZ3's/k1WrMTpuW2HSmU0[Zs%)p36e^Djpf%&C(gY;\["kM2Sf$r4K
+df@VhcMlDpebmhqg&Bb3f@S<ne(<C-rm_)(g=tH:#LM#Te^3!K0`1nNSI;!^W1or^YH>=E]"7jR&$i7;
+XJVkjWiEG<]=u#!`r<[O[f!<:[D'Jna2adCWj07Url,#U_7JI0#ICeG['R6FC&@r>\$r`L[^EEAY,%kn
+Wr8aoV@K]1Y-P@?]=Yqp^V.=p^Ab25Yl(p;Z)jn&UnkiC]=+i=rhBOnW3P0c#IUtD[C*3A@f-37Za6m<
+Y-G49Z*h!BY5PU;['R$BYct7)URI^CSXl:@WMoruW2TWj$`L)-Xfnq%TqeKbXT#F'XkTcYVl6MlW1mSq
+!"?icdacdneCN1%fA#'Yf`fsVf%/@#rmLkkqp,2qs4[D%#hn.hg="EpcI2jHgt;VV!nuA_h:W%[e_8R#
+fr6\'!</o1[(4)oa2uE>^q-\GSt;j]Z+A!"rm3"9c,@5rWN!;5\@BDm`Pod2^pgSMVl-u3Vkg&]St;g^
+Yct:-U8%Unjg59!['m?J\$'ND!#E,U[]QR'S!o_4TV8Bl\%TJf\[JcDU]-l4UT_8D`Q-$5^:h4dZa-m@
+['[?V^r!t)_8=.0`PKC"Z`p[9ZF@=0[.^j3[C*6H[BHcCqu@M2W2Zl%['[6N[^*3AX/VqlUSXidW3$!$
+"0A8hSGnoSTDYMfUnj`XrgaRgR[oq<S=uXUX0&M/YcOqaW!'#sVl6NpU0[Zs(;dr=f\+U!d*Btfe_A^*
+d*U4kfA"d"rlc)%cI'q[aN2TLc-=JVc-=tqg"+Nrr65Ynb0&#TeCWC,f@89uiRnI_e_8R#fr6\'!</o$
+[(4)oa2uC2_SEacVOjBWXKf@Wbl5s9bg")<Xf8;0\@T8e^qmk*^V7.^Y,\S3[\opqU7RsRY->.5VP9gD
+Zj3qE[^<BMYA*n7(:guaXfA(aR[BM9TrPH.]tM(h[]um.rgs1c"g>MP`Q-$tZQ$$KXK8_:\%92a]tD1t
+_SjF4_83UeYct78\$t>'#IUtD[C*3A@f-3AW2Q\sYI([E\@/]KY,eOuV5'laW2QfsXokc#St,eIrM0:e
+!Mc@iU7qRW&"8rXS"-"BTrG)pXg,+3XPg#]Vl6MlW1mSq!#EGge_&R$da6:ce^`F+eBlRje^rR)cMl#l
+cHah_b/h[&g&9P)aj&93e,IStbK@uQcICJ!f`TjUe'm:/#LM#Te^3!K0`1nd]tM1j['6g@Z*^mO]u7k2
+ahG3lZ*CA.VuNLkWr9%!YlD63_@ODi\$**>W2QVqZ+7HW\$#\,s.f4nm^*5*['m?J\$'ND!#DrK[]m0N
+[^<TP[&pI-VOjBm_84%,`r3e$^V@Cm\[fSo^qdUqZa6sC[^ru^]=uA-_n`srZ*C@9ZEga?Za8]!$+.(I
+[BR'HYHMF5!#D3!USt)eVPg;iW2cl!XK\q"R[TY4R/NQTU&UnfV>m(cTDtS_V%oc"U7\-MQ^=55TVAB`
+Y,ee2ZEg[;i2?jXW2HSmU0[Zss1]9!g""<ug""d/gt^Q7daHFcc-+;PrQP;gs3q"us31MgrR(Vq&C]4Y
+e'Q.Ubg4YcgY:H6eC=HFiRnI_e_8R#fr6\'!"uuY^UUYTZ*LXA[(X/k`6$-8[KEtCZ)di$+/5L0WiW;&
+X08_:\AH+u^q[@eY-4q*W2H`%\[oA]Y5P6tUZ&QbZa@0JZa[,Pqu@M>['m3H]!euV['Zs;VP]rV]tqP&
+_oDYm#f"-d]=GJk`PNV3]tLbYXf\k<]"u8(aN297]t(DQX0]+;Z*CXAiNrit[BR'HYHMF5!#D3!USt)e
+VPg;iW2cl!XK\q"R[TY4R/NQTU&UnfV>m%bSc>>]V$a)rU8"6MR[9A2SI;*bW2Ql"YctF=YHQl_#,eDt
+W2QFrqu@MI^Xh)gbh(Oug"G09f\"X#cHXVWbK9_,'[Y4Ue(*!jaihlPc-4Dag=t3-c--+,$-^`BeD&a3
+f@8=Kdeqe\fa#mSg==R'WA+5M#fO[%`5fX-^qT]Q'!ACBZ)k%3Z*:I8Y-"h,X/W(bqNVPVR@U(NYI1m`
+bK%?,VPsKis/>t%s17a-qm#n##ICeG['R6FC&@r:\@B)V]=55U\,3NFZa7?Y\[f/WYct73WMublUSGU#
+_%+>r]=5&GVkT?;Q(OkX[f3i;[f<T3Z153k[Ka.IYdLmBY5i&0!!o$^StVaNUSOX]W"Q/3TV/-XVP^Jt
+Z*C^E\[fGgU\^brVQ-YtYHbC>^:q7g[BQY0VuNarXm`4YV?a&tW2HSmU0[Zs#e[guf?MFgg!]cNs47h/
+d+-[uf@ej/f@8<uda-7fqTo_rcHt%if%AQrb08AeeCFQIs4./&s4d(sn^e#me_8R#fr6\'!!pN]a2H$5
+^VIS\ZkBOEZ*CC3Z*CO;Y-+n/X/i5!L&?H4JUrfDQ(Y+[[_'`+a1f'\W;`UmW;j+%](*/tYm7VB[^<BM
+YA*n7#e7CT[(EfU[(#q>'!npX]t(\^[]m!<Xf8:sVPBp5r7)2'da#kM\Zi*4V36uEQ(OkX[f3i;[f<T3
+Z153k[Kj4JYdLmBY@@D0#b%3RTq8$SUn[abs/Z0ms/#ams/l=+s0_m;s1\B*!i2WjriH+&#I(qV]XG5P
+WW&gqWW0*uW:[%YV?a&tW2HSmU0[Zs#e[guf?MFgg!]cN'%ba^d+-[uf@ej/f@8<uda-7BqQ(1=^WFmR
+g"kN-b08AeeCFQIs4./&s4d(srR^_o#LM#Te^3!K0`1qN_>_@q\[\oKZ*UaC['I*K[^W?*OH"d*:-^p!
+/ghke(_m_u')iIZ*?QFN.l'"C;J^c>Q*A-F`lu9;]=YbirNlO2s0_[0q5jCo"LPSH['TnDY\X.:(q@)g
+\\,Vg[^s#UXK8A!USOKQX1cBkfBh`$%dMZc\Y#+OPFJMY\[f>aqmHI/q6]t.q7$[:Z*:UBY-;F6!!o$^
+StDRGTVePEVP^DqZF.3M\$r]BW2Hl3g[3nB`k8gkQ'IPpNf8gOT:D:=VRF\$fY=esZb!rc^U:2:St;IB
+rM]aopSdVYqksOj?Mjd@]=Z;:`Pp6VbgkA!f\"X!e^`1!da#qDTlgZG5:76V$4$_8!rN'8"9er7%2p]S
+IAF<ne'lLab0&Ghe^`-trQtSps4[;%q:5;l!SQ3+f`Kg.1].7Q_u@RU\@T*HZ6$6W[(!KS[]>@-B3@tr
+3A2Tq'G1fe%1NdW&.oKc&f_T%)'0tJ7TN`.Lp4Y2_TK[4]Xkhk[C!<K[C!:8[/$g!WX#o=\?rWPY\X.:
+#J.LZ]"G\^Z2V*FYHXt(US=EQXNK/Pi8O2!q"X^^r;?Qnr;QourV?6_rqHiihr`b0TTbe3S#He.\@K2k
+Z*^mCZ*^q6[/%9.^'D$MYdCd?Y[dS2#Fh3SSt2OLVZ*IoXKDH-'XY?UXf\4^MO0TlN/`dSNJ3%=LPPkc
+(P$s\G^4diK:S[;]YD(k[^NKCSXuCBQM%3TW;3:cU\gtjUL*iu#Je.!dDaMcf`'P:f\+j,f@AR)eAS,%
+7OK;m$NpP'!WE';!WrQS8na^2e'ck"dDa)Vf[[spg"G*5g!Ih9g%j1rci25kg"QGY!naV2qu@PB\%05e
+^qm[mUm@1*Nf&F+3&3$,(D.2W&.BF!-7gf,3^#Yk6:40>72eN[5!:kF%LNae.6:%CPcMRBbIb?n['[6M
+\+d9*XSJt'['dEN[(!8Tqu?`-&%T6U\#QC'WNsCW_o9gLl1=o^rqc0SnFH2DoCVbUpBU?[l0A'@r;QZp
+%HYX;Xf/,3\?WHLZ*1A*[/%9.\-KCGYdCd?Y[dS2&Y#8aV4t&nYHG.4Xf/+pYdW@BbcmOrNg?&oOHPlu
+R[]e-OckurR[p%CU8"6IP)=sKJq8oQ^XU-#TV\NcWLTNXVl00cnYQ,]!Ma!!!#<2\eCr?lg=Oun`lu`P
+`O_m++qXt[quI$("U5;C&J>j&(`OSB-R^Gp.jcGW&e+mC!!*383+f/3h:TofcI^e#e_:#U!6Fuhq:5;l
+!SQ3+f`Kg.1].5/Za76V^qIIp\#Q$^N-]&F>:L^6&e56S$3ptZ-nmS@4[__18l/Ab<D#kV8k;?;68Ku.
+$kNgZ.n!WgXM;j"]Y"0M"1,MG\+m?#X9Z,?\?rWPY\X.:&@f6ZYdC:+VQ$f1^rY="gY)T*"o\Atrr2iY
+rt,2-rVQ*Vjg;.fVT-<V[C!=CYcb2)[.1[3['?jB['$WCquB*QR\HURWiNG.Wi)nuZ`TmaOc+j@IXd03
+J;Tku]uJ:Am-*HfgY191gt^Z?h;$E&d))]?H[^g%S=?LTWMu2SW2QWdW;NLcV>I1lUL*iu'sY$qgY'?X
+f\#$4dDrPOAjlt,!W`?#!#Ye?$lC?D2e6N;DL$Y^Kkt[IDJ<EV9-b#NrW*N6(LE`bg=='Wd+QU]d+R(G
+g%!Sng"QGY!8%=S1].5"\[fDa]!ST7OH"0M5r'Jg"U>8G+Yc2T=^lB%R%h(&]W8*=['d=@[hlBVXJhqf
+TWbJfMfN3!2^B\*6ZSL2`jboR!k,PFq6]stq54J)[CETN\$0ZG!"#X(Xf/4tXg?'f!9sF]!r`0!rr+GE
+oB5`)dD3,aSt<$bVP^)^St;RMV5gZ&[C)s4\&[.bn+Zh\s8V;tP)lgGZid_?Yd+#2q7HI@#ILb?['[!?
+A,H<FVP^AqY-YC:W2R2M]Wn9!MgKf%KnP>CN1cmQUo^f,[C*?I['[6KrjNZMZa-g=Y-,1@ZDsFXLk(#.
+PI%<a]>FNF!2oOhq4mbYqksOj?Mjd5^:rCTg"+^%a318h1`$>o!##A8$5b6VG`Si>db!%"eC<($e^aZK
+!S,a=f%&9udacgi["qX-$j6\E5,H]TbLtRiaOU:Dq:YSmq8`TigA]b,fW?t-!<0Yl\@T#LRsSmQ82qt2
+#RLhI)_3s;<dKUaQ(Fq_]tUVN['[9M\@B#S[&^'tSt<-gV43Qn<Br>l.6%Q:Fiq\5[^<C6[/$`tX9Z,?
+\?rWPY\X.:riQX/Whul-eC!=Bnb<"WruU(D`P/gaU7\'XWhuYfU7e0OV5C?!['mE?VR!ePi;NZbq=<Y"
+NKUNM['d9J[C,q>rj;L5q7$[:Z*:UBY-;F6!</u]Ycb76Ybn(_Q]6o_P*LQQOeAYd]r\**Uo1<#[C3BH
+['[9M\@B#T['R'BY-,.<WhuSk^!s?SH$YCA`kCo@o:u>\qksOj?Mjd5bfnJbgY(B/VJ]'W&-`17!"8l1
+%3nPsYJJH3g=b$TeGn/#f)F/?f%8F"da?ImfA"m#YC9Ln%0Hu(P/Yf$g=aioaNMd&g%j+meH+@Wrn.A*
+XY]kTs3DP-W/GId5qWud%h0*g+=_YcIZ9nlXK]7Frk8HB[C-"Js1&'4)mQZV^;\(4aKr4UY-5:G]=")J
+>"1=u0sJ$n[f3W6Zh_!(Wqie&['dEN[(!8Tqu?n`P*N<"nG<.grr2rt]u1B/c+ps%[Cs8h]tVA"_>^_>
+[Jm`Z]tM"dZEgR5`Po[0[]ZI'Vm4G#jS/]SYI(O<[C!<Kq6]t0q7$[:Z*:UBY-;F6!$Jqe\?DX0^:L8-
+PF@c*SYiKGP+\bJV5'l[T:DIAR$jBAV>m=iT,=5oU8"K\Vl,rNSt;dWYck:@_PNZj`9F&rVuWahW:?Y[
+Vu`Z"qu@&@_p$WFSSU7t"8r65!X9'8F.^=qdaZjic-4JZbg+N5gAfk*eH4+Ee,Ieqd/V5fbnJ[\h;6r4
+VH5&U&L>!0g=k)uaO'b9q:#/i!SQ3+f`Kg.1].4kd*Tq:M-N\3)A`qo$kjj;2NF#gR\-4LX15\=^&kaN
+[Jmoa[C*0?YHY7=^r++2aL/F[YH5+A\ZqWbI8`9V)lp3M\$uLH[(,q=q5X7i#ILnK['[<HC]"/ANfKF/
+de<J0q>UEorr2os&'`&-]=kkl]=bel^qmn(_>^n\^:h:r]u.e%[&pR5XM)<Z]t(PFU8G01fDbdUrhcp,
+Y->:?Ykb[']DoM=^'D$MYdCd?Y[dS2+MPRtX/)JMKQWB;Q'.cIe*<a(U8"?XUSOQUS=H%8R@4&L!M?%a
+T,F/hTVSE\W2H/UT:_sX[^NZU['eZ?\!ie]o;MJ[q4IP_!2BO#qu@&,YKkt;B.48j!r`30!XK\u`6?Z[
+eBuXkdF%p:"jYE8aj&'/clCKPaO&Vog=+EsdaZ^qe^W*rd*B.N4:;7JXkDA"g%j+m])gU=rn.A*XY]kT
+&?)P.Mc:l<'aPL!3)XgbXg?]f0=A6t[^N]PY;.q7Lnq#T[ATmrSt)4;P@I<R4Z"W1('t<U%20U!+tbZ3
+5aSstEr5n@\@Aomq#13l#Q=Ghm``JIZgb?eZl$'PY-5(6Z`jB-rR8-WVPg`+[^`o_^;TR<s8W)mrr]s5
+Pumk`&?)P(VNlq,WK3!oO-66=Yb^0Tpo#aAVl6JdKSc=tVm<_9Xf\b/XK&.mdI[4g`4)qOR@Kh@VQ$Z#
+]<fc5Y-#*Bqu?l8^tldjrW<E+!<`roLVVNug"?_dg=Y0:ftaHl%9"ObgXF*meC2jodE^.aRs&$s*=`5S
+!!!$#!WrQ1'HAl1cIf!Hqu@;+VlPbU)$U?O*]$)fNM*DYfsD^+['dEQ\?iP*4]Q<`XgYU-Vl6\oQ\p#V
+4#ei+,8h$t#mq%L&f2H/*?m%"NjluKqu?r2\?sQToDAIc"T6?NXgZoi+gJDZYcb4<[/^0pe@;QXW4B4>
+Yd;*beEQMimI0]Dqu6Tlrri;orr9_7WKpZa!"c*-VkoT!F,u9T\'qphWNi>KW"l2b[Yp!@YHP:9Xf8:t
+WMQ,]URI@+rf%GVS=Q=JVPpMSI?12+Y.&$@!!L!Kg;6&P!!`ZI8;kU=e^rL-*no<$g">!)_G2gF;l87(
+f$;e#gtU)YOX_7_#m:;1rW)ou$3C;6!WiZV[FhcAqu@;H`5@jI/h/hM=F-=A_8r:CppB%f"LYVDZaB_A
+-cF,D>ut'aT;8ELG"b7^/MoRS7o!)j>[:W<;bTSH3[c!s7X_>OEVoeJTV/%#p%%MGqu50VW0j0m_<82s
+ZiIB1[/dT5YU>p,nEolJe[rK&b3/g)rpTFHnEfN)iT9"Ri9BOrm.:5ImetJ;SQl!lri?R"O`YH&TY.k>
+YICX'S(OY?Vl9Nl-aL:JLkqatTW"i_UpQ\@AqYttO-Q3)TpqL<Q'.5eN/Me(OJ\q^B)DW?]=ZY9=9\j@
+/V(=Ygssp#d+R(Sg==BnrRhS/c%AAC?Fn_6e]+L+@k8#j$P=*t1.G;L<)?+H/0>fC"T\`OV:iI=quH`7
+%@:Hc4$cDiOI*>nbb(TYZlc`c\&u[SG?.^bQ`R'/?q!(:4[;A(:L.pgJV],1Cg7<B90tTq3_5(-^2WuM
+"/)<^_u0N>e&&SmPFf\,fX1Ub&?r@@R$knSrp&1UZFA?;l1b)T#l<`9e]c=llhgPY"4"6C>PnI$X:MD5
+TVJBU_:>]hYHkpJS=S<2"/i)rVuEVB]!@s+R=C0jVl,K$Ed*>*d*gRm_mZeQXKAb<`RE8of"AApXerC7
+qu@>@]@Y;\,oo'[][#$Zb/_cTg"G%2e]Z.dg=b-$eBP!j.VR#X]P]P<$PORQ=(6B6VRO+R_6p"sF`(A=
++XKdthmkTA!"c*-Vm*:kQ^t7^YH+_D`lc*c[-=ss[2QE[[ABh<_5r#m;G'P\@s3j#XL,CI]"Ynq_YqRS
+aTnN)P*s%u[r2*D&BMr0[(+/r\Z;a2[C)d)XKgWhr3QL4[/R<:['?mI[\9J'f^\t@%K#A>ai:WoZ*(4,
+Vkp6gT)G,`YI_N^S"-0Xqu@:qR%:"KV5(5uYd(70YHOn"fr+nKqPXLqWNWH5X-/O1VOim*MjUB>VuEXn
+Ws#Z2Xf\f+Xp;8?YH>4?Y@@D0$G*gng"*mJcI^\!rRCqj^tIBAe_0rU(YRNre(*.-fSiit7QWe.CR`>r
+e_8d1fDaA)e'lgre,Ic#e]l=`eCgr\qu@;,W2Hl)T:i-bZ)k",`5BX3fsCmg[CE]Srj3uJX2Vu]QYTGj
+8m$h6TVJHm[(<ib_8aL<bK@rLb/qbuS!fb[^B(c]qu@;MahkEm]tCVPX0&e;US=fpfsCmiZ*:F9rj<!B
+[@j(p_"Rd,rs[Jq]"5>W['?p:Wi2lqT)bJ]Rg64+]"+<#TO.Nr$(73PUnjc\Xg,)7ZE(%-XJhoDW;`\*
+WN!82WgolMR&R6aStDgXrhostXf\\+rius:ZEUO8['H[2[C32Jqu@;@]Zo'ZdF6Xrf$qpof%/<epY"T[
+"OPlUg"QGU(=UdZ_Um2$5;PfY\^8sYe_/X1f@J<nrlGVnda?Ikda6@mf[S?H2>dFc`5Ka;bf.EAd)sSR
+_TKg+\)t'gZn8et[C!<KVl[/+Z*^d9Zb+5t`kA7HbKIrC^UCGMYck:7ZEgpHZa7-FYGe4/qu@;6ZF-a;
+ZE0aoTVJTp[C*ZZfsCjh['6bRZ*gsD_n!4_\?WHQZ`^(!W34%UTqSNm[^s)brjrTO\\#GdTq\<^X0K!E
+qu@:tS"QOOV5C8oW2lhmTV.gFe>NnUW2QDbVP0c]UnFT`YHP&9Wh?#bWhuVfU7n-JrgaFjTq\3m]<e`H
+YG5M'!"cTIeCW$kg=4'kda64cf$i1&f`94pfcf)"g"OBof=SiNf"0Mge^DjhbKJDbf@JO%e'Q[reC<$t
+$.I8EcI^\!e>G;(!"d&caN2WB`QHNQbJ_0<`4!,+ZlQT_['[9MWi!#*Z*::5Zb+5t`kA@Obfn/F^U:>K
+rN$C2YdLpH[^WNFWhF)'!<9>7[B$O6Yb@ecTrG0%]YqM:Zlc]`Yd(UDYcbOO]!f/\]="uKUSOik^:U/8
+XL#CL]tXH^$c'Qk\tPmoX/iG3B`%iCR$aPATqS<^XK8G"VP'KKS>`C?W#hk8W2HPlW2$,aVP^2cV5C2p
+YH=h"UT:JoV5']VSc,&dT:_dN[^WWJZ*0p1qu@;,W79G9^=UoUa4/_ndDa8Umb-s['?eq[g==a-f[S9p
+f@A*nf%Ad.ci2;qe'cOgbg$.6rQGYpcHt%jeCW:&eZUt1!"d/ib."IQXK]1Wdb*3ua0rG4[.Ud<bKI/q
+]"ukEbIX.2S=RjHZ*F87qmud6"0A#`\Gio;aE7=[&@8^N]ZAF?`5]<cTV/<q_84O+"Ikmh[]p7>Pa%ZB
+`l?!7S"$jprNuI,rj2sA^qQhLUS<WEqu@:uS=lC>Pa7Z%Su/NfV4O-EdARY`Z_jUuXgkmIW1BKLT<kl$
+VZ!IgW!K5sV67#2Zc$YW!"cfUdF6.Oa32NKai;?Ed`p%afa6!Nf@Sd2b0&&brlPAgcd14prRq)&rn.P,
+cd:Cue((K!1&M"_`l?01XK/G,\'*4Pf[%UH[aDGobKI/q]"ukEbIX.2S=RjHZ*F87qmud6"0A#`\Gio;
+aE7=[&@8^N]ZAF?`5]<cTV/<q_84O+&Y#8u[]ucqPaeqt`l5faS$od([/7--Zj=4X^8e6/U5DnI!"bZj
+TU_C6QC!o/VQ-YmSsl,;W8a`fZa6O+W3*S>Z`'FcS=d-oVPa!a#c4DpY-5=@`,#8N&A5['e&T8EbK%oM
+`l?6Nc->/!o@XGrce$e'g<.Rag]#=uc-O_ffDXD"g]#k3e^)Urf[JBO1&M"_USFQf[FE[M_7-n^[]HRM
+`mM-pU8"n<Z*q*DY.r*/e]b:gS@Z;@Y,7h_StDXNW3EkK^ppnd\uW*6B`%iA`l>d)]qV:/_o0L0_8*j]
+UX?F^`l>^*]"5Yk[\oR_UV4joWiE,+'=YWf]tD"g[]ld*TtS+AZF-j6@/L!9T:_gLTW+r_R@'A1R[p"Q
+YL09ZS"$(DU8"9PUT1T(XItrJriQ:&WViS"Vl?f$ZEg*qW2HZtWj$"2!"co[d+-L\ajA/Pb0A2WcdgRn
+fdFqbd*U7jd*U@kaiViT`PpTdg=Oj%d*U1fe(*.+e^_plgXk!.Yqu:X#c"/hYdN!0c,'Fhs0hs/s2NHn
+-_d??Z*q*DY.r*/e]b:gS@Z;@Y,7h_StDXNW3EkK^ppnd\uW*6B`%iA`l>d)]qV:/_o0L0_8*j]U\M4M
+ZmWl5]tM"g^V@4TR[U"bbKHocX0]:J]tM(k\[J`BTqT04Y-PI<W*oN'&>,SgT:i0`Ssbt5R[Te<YHR,f
+l_k>`S"QFKU7\'QWj/h1TU;,GXoYT&r1sk#WNE>/ZCdegVlQi%A,H<<^VA.Gd)3uPai_cNc-O_de^iFO
+fdFqbd*U7jd*U@kaiViT`PpTdg=Oj%d*U1fe(*.+e^_plgXk!.Yqu:X%)p3(Z*ha!\[fGgb0'^X!2e/N
+rOMsCrPnrU\H');Y5bm/])95O['Zp9VkTp'`4EIr_7=L^!"b?XR'43)[_]u"_6p\d^pgVs[/IQ8[f*6.
+ZFRRG^]1\@Z2Ca([/[ZD]YD4o]X>DETU/gZ!"clY\uMF%Ssbq6R\6=GT<,9EW;WIjU]%+mV4s^`TDb_d
+WXbu+V59r\Tq.dMTXD#7B)DW/_%4B-f?hXac,e,QdF$:de'udurRCkurR1i!eC4EDs4RG,r7he8g""X$
+d*TkXg!S7!Y;6"U%)p3(Z*ha!\[fGgb0'^X!N*6P[/IQ8^\u1S_R[,SY5bm/])95O['Zp9VkTp'`4EIr
+_7=L^!"b?XR'43)[_]u"_6p\d^pgW<[,\Ol\c9,:WrfT;])KJE[/[E/XU__F\[fAf^V%4e]Utj`=o872
+^:q1YTW"HMQ^XA9TV%jXYhl>NW;WIjU]%+mV4s^`TDb_dWXbu+V59r\Tq.dMTXD#7B)DW?_84FKd)jPW
+aNVlUdEg.feButJeGn+udfS+Me,I_og&Kh)g^`#je^`*pd)aGadF-UL1Ah+`YHP7$SYicmW2m2Faf_e\
+^<s=bao]Vt]Df/>[_Bf&rOr9M!6"iVrPT#V^<Fg,Yen/MB)DW?V5:'%`P]R4ai;5rVmE^uRaJM>[0!nP
+^])(P_7dCirOr6BrOMm<s1SEB!l1J&!N0?'!"c]O[&9RiR[9A.RB!9fX1GmiW;E4hSt2DMRKB%OT)G5S
+SdCsYSt;XJ[BQuKqu@&C`n&P\bKS,KaTfr9dF[!sd*^PDd/qbAcMl#ic-FbcrQbGjrR1Yl$-pi9b14ed
+f!7.1!"c?;ZC@D^[&Bq(Z,t+jY.hXE[+htbao]Vt]Df/>[_Bf&rP&<MrQ"lT$,4-tbd+Ii^S>E=!"c!'
+VS'mc_T'^;_l'E=Z^R?F[-Y0s[0!nP^])(P_7dCirOr6BrOMm<s1SEB"Mg\(VdTE&&@o?YVkB]OQ^=)-
+WiE,#]"6FjrM]Ud!hPsQrL*eYSt>nOpRV\^SXuFHT=(o0Ac)N>`l?TWbKJ,P`lZEOdF[!sd*^PDd/qbA
+cMl#fblZ2=df%JkdJ_Mld0\+D`lciWe(1f]qu?i*Za@7AZiIM6ZjF+HZa@0JZa[,Pqu@#/Za?sE[C!3H
+WO)o<[BR'HYHMF5!<8ntW2QWnVuW`oW!9/uVl6Pg?2O[.^qeXVe]ZY"eb@b'fa#mSg==R'WA+5M"1,>@
+\Gii8[H4d6Zj3qE[^<BMYA*n7#d^kEYdLmGZ*i,he[,Rh[BR'HYHMF5!!K0rW2QWnVuWa6W9'r^Vl6Ml
+W1mSq!!pBUg"Fp!g"Ou_g%X/)d+-k#d+PBPqu?i*Za@7AZiIM4Zj*kD[^<BMY5i;7!!op;['6sG['@$<
+Zj4"HYdLmBY@@D0"K&&pW2KWn!2oXkYc%c(W2HSmU0[Zs#f+7/g"":!g=>E?_V#1@e_8R#fr6\'!!BR6
+[(-+B!4CCbe$K@d['m?J\$'ND!!op;['6sG['@$Y[,eS![C*6H[BHcCqu?ksVPpGkrhogp[A`_r#,eDt
+W2QFrqu@#<^tIDkbLtV"WS%F$e_8R#!njP,qu?i*Za@7AZiIM4Zj3qE[^<BMYA*n7#d^kEYdLmGZ*gR<
+#IUtD[C*3A@f-3/VP^;jVuEUpVspXqW!9/uVl6Pg?2O[.^qeXVe]ZY"e_f''fa#mSg==R'WA+5M"1,>@
+\Gii8[EZ)6Zj3qE[^<BMYA*n7#d^kEYdLmGZ*h9PmBd,+[BR'HYHMF5!!K0rW2QWnVuW`sW;WY!Vl6Ml
+W1mSq!!pBUg"Fp!g"OuUfa#mSg==R'WA+5M!4)a5[(-+B!4Ac4#ICeG['R6FC&@r:Za7$C[C*BH[J7,7
+Zj4"HYdLmBY@@D0"K&&pW2KWn!2o"Y_Pd[:W2HSmU0[Zs#f+7/g"":!g==d-eCb)Re_8R#fr6\'!!BR6
+[(-+B!4BbPjg59!['m?J\$'ND!!op;['6sG['@$G[.^j3[C*6H[BHcCqu?ksVPpGkrhogpW2KisW2HSm
+!MWlt!!pBUg"Fp!g"OuUfa#mSg==R'WA+5M"1,>@\Gii:[C!<@Zj3qE[^<BMYA*n7#d^kEYdLmGZ*j&-
+]<hgN[BR'HYHMF5!!K0rW2QWnVuWaPW6;+DVl6MlW1mSq!!pBUg"Fp!g"P!$g"k<dd+-k#d+PBPqu?i*
+Za@7AZiIMG[-k:+Za@0JZa[,Pqu@#/Za?sE[C!3HX0`2?['d<G[C*3A@f-3/VP^;jVuEUpVl6NuVl6Ml
+W1mSq!<9h=g"Fp!g"OuUfa#mSg==R'WA+5M"1,>@\Gii8[J$u6Zj3qE[^<BMYA*n7#d^kEYdLmGZ*i`$
+`3]cW[BR'HYHMF5!!K0rW2QWnVuWaGW77aMVl6MlW1mSq!!pBUg"Fp!g"Oupg#grmd+-k#d+PBPqu?i*
+Za@7AZiIM>[.gp4Za@0JZa[,Pqu@#/Za?sE[C!3HWO)l;[BR'HYHIq8qu?ksVPpGkrhogpW2KouW2HSm
+U0[Zs#f+7/g"":!g=?#PZ.TB/e_8R#fr6\'!!BR6[(-+B!4D!s_R'QS['m?J\$'ND!!op;['6sG['@$j
+[*uAe[C*6H[BHcCqu?ksVPpGkrhogp`i.pr#,eDtW2QFrqu@#<^tIDkbLtV"[Ft6+#LM#Te^3!K0`1nQ
+Za7$Krj2[5W3c]6['m?J!k5@Iqu@#/Za?sE[C!3HWO)o<[BR'HYHMF5!!K0rW2QWnVuW`oW!9/uVl6Pg
+?2O[.^qeXVe]ZY"eaV8'fa#mSg==R'WA+5M"1,>@\Gii8[GJ:6Zj3qE[^<BMYA*n7#d^kEYdLmGZ*hla
+gp@<o[BR'HYHMF5!!K0rW2QWnVuWa/W9gGeVl6MlW1mSq!!pBUg"Fp!g"OuXg&BY0d+-k#d+PBPqu?i*
+Za@7AZiIM4Zj3qE[^<BMYA*n7!4)p:['6sG['@$<Zj4"HYdLmBY@@D0"K&&pW2KWn!2oUjZ)@l)W2HSm
+U0[Zs#f+7/g"":!g=>B>_q>:Ae_8R#fr6\'!!fd6ZF-sAZEr)de?K7\XgYRH]!lST!!g$D['@'N['R]Z
+jgGE(\?NBIXf>h-!!]6pVl$>fVm<2nVZ3LkVu``%qu?u=_V*Snd+R'Mf*0aVg<e:#!Ne3V!!fU,Z*:I8
+Z*C73#HY#6YdV*JC]"/=['[?S\$WZT\$rBH#JIgXYH>+*?Mjd-TV/'VUnORNUq<E-U8"N[U8X_iqu?u)
+Y/&,m]>2;>^<F:r^V@Xt]ucQiqu?u'XKf"6Y-G7UYhcMgXK8e5[^i\Zqu?u/[(*]V[(*WX\*g^1]tLeV
+Xg4^.qu?qoTVJ?ZTqeT_$)FAkU8F][W1[Dn!!f[0^rX7%^r!%a#J\$j]=l=P.f99s~>
+
+%%EndBinary
+grestore
+np
+grestore
+grestore
+pgrs
+%%PageTrailer
+[
+[/CSA [/0 ]]
+] del_res
+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/texmf-dist/doc/latex/fc-arith/examples/graphics/nwfsc_logo.pdf b/texmf-dist/doc/latex/fc-arith/examples/graphics/nwfsc_logo.pdf
new file mode 100644
index 00000000..262d86fc
--- /dev/null
+++ b/texmf-dist/doc/latex/fc-arith/examples/graphics/nwfsc_logo.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/fc-arith/fc_arithman.pdf b/texmf-dist/doc/latex/fc-arith/fc_arithman.pdf
new file mode 100644
index 00000000..3b8dc44e
--- /dev/null
+++ b/texmf-dist/doc/latex/fc-arith/fc_arithman.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/fldigigal/README b/texmf-dist/doc/latex/fldigigal/README
new file mode 100644
index 00000000..6e2ebb7d
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/README
@@ -0,0 +1,24 @@
+The fldigigal package
+Dated: 12/28/10
+
+The fldigigal package uses the rmannot package (Adobe Distiller workflow
+required) to create, what I am calling, an AcroTeX Flash Digital Gallery;
+that is, a Flash slide show that displays a series of digitals (PNG, JPG,
+GIF). The document author describes the digitals (path and caption) from
+the LaTeX source, on compilation, fldigigal write an XML file, which
+Distiller embeds in the PDF. The digitals may be embedded in the PDF, or
+reside on the Internet (reducing filesize). Three layouts of are offered
+at this time: vertical thumbnails, horizontal thumbnails, or no
+thumbnails.
+
+The home page for this package is
+
+http://www.math.uakron.edu/~dpstory/fldigigal.html
+
+Now, I simply must get back to my retirement.
+
+Dr. D. P. Story
+www.acrotex.net
+dpstory@uakron.edu
+dpstory@acrotex.net
+12/28/10
diff --git a/texmf-dist/doc/latex/fldigigal/digis/Chrysanthemum.jpg b/texmf-dist/doc/latex/fldigigal/digis/Chrysanthemum.jpg
new file mode 100644
index 00000000..757c2a62
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/digis/Chrysanthemum.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/fldigigal/digis/Desert.jpg b/texmf-dist/doc/latex/fldigigal/digis/Desert.jpg
new file mode 100644
index 00000000..0b88c913
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/digis/Desert.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/fldigigal/digis/Hydrangeas.jpg b/texmf-dist/doc/latex/fldigigal/digis/Hydrangeas.jpg
new file mode 100644
index 00000000..a587c965
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/digis/Hydrangeas.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/fldigigal/digis/Jellyfish.jpg b/texmf-dist/doc/latex/fldigigal/digis/Jellyfish.jpg
new file mode 100644
index 00000000..fa4fd411
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/digis/Jellyfish.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/fldigigal/digis/Koala.jpg b/texmf-dist/doc/latex/fldigigal/digis/Koala.jpg
new file mode 100644
index 00000000..78704a09
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/digis/Koala.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/fldigigal/digis/Lighthouse.jpg b/texmf-dist/doc/latex/fldigigal/digis/Lighthouse.jpg
new file mode 100644
index 00000000..494be09b
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/digis/Lighthouse.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/fldigigal/digis/Penguins.jpg b/texmf-dist/doc/latex/fldigigal/digis/Penguins.jpg
new file mode 100644
index 00000000..030ab8a6
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/digis/Penguins.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/fldigigal/digis/Tulips.jpg b/texmf-dist/doc/latex/fldigigal/digis/Tulips.jpg
new file mode 100644
index 00000000..54c51eb6
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/digis/Tulips.jpg
Binary files differ
diff --git a/texmf-dist/doc/latex/fldigigal/fdg_demo.tex b/texmf-dist/doc/latex/fldigigal/fdg_demo.tex
new file mode 100644
index 00000000..6b2251f1
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/fdg_demo.tex
@@ -0,0 +1,59 @@
+\documentclass{article}
+\usepackage[%
+ web={pro,tight,usesf,designiv},eforms,
+ graphicxsp={showembeds}
+]{aeb_pro}
+\usepackage{rmannot}
+\usepackage{fldigigal}
+
+\DeclareDocInfo
+{
+ title={An \texorpdfstring{\AcroTeX}{AcroTeX} Flash Digital Gallery},
+ author=D. P. Story,
+ university=From the Desktop of One D. P. Story,
+ email=dpstory@acrotex.net,
+ subject={An example of the AcroTeX Flash Digital Gallery},
+ keywords={AcroTeX, Adobe Flash, rmannot, fldigigal package},
+ talksite=\url{http://www.acrotex.net},
+ talkdate={\today},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) 2010, D. P. Story},
+ copyrightInfoURL=http://www.acrotex.net
+}
+\talkdateLabel{Published:}
+
+\def\AcroTeX{Acro\!\TeX}
+
+\definePath{\pathToSource}{%
+ C:/Users/Public/Documents/My TeX Files/tex/%
+ latex/aeb/aebpro/fldigigal/examples}
+\definePath{\digisOnline}{%
+ http://www.math.uakron.edu/~dpstory/photos/pa_demo}
+\definePath{\digisLocal}{\pathToSource/digis}
+
+\fdgXmlList[showcount]{myDigis}
+{%
+ \image{path=\digisOnline/Chrysanthemum.jpg,
+ caption=Jürgen\'s Chrysanthemum,online}
+ \image{path=\digisOnline/Desert.jpg,caption=Desert,online}
+ \image{path=\digisOnline/Hydrangeas.jpg,caption=Hydrangeas,online}
+ \image{path=\digisOnline/Jellyfish.jpg,caption=Jellyfish,online}
+ \image{path=\digisOnline/Koala.jpg,caption=Koala,online}
+ \image{path=\digisOnline/Lighthouse.jpg,caption=Lighthouse,online}
+ \image{path=\digisOnline/Penguins.jpg,caption=Penguins,online}
+ \image{path=\digisOnline/Tulips.jpg,caption=Tulips,online}
+}
+
+\parindent=0pt\parskip6pt\pagestyle{empty}
+
+\begin{document}
+
+\begin{center}
+\resizebox{.9\linewidth}{!}
+{%
+ \fgRmAnnot[galleryopts={gallery=vthumbs1,captionalign=center},
+ posternote={Flash Digital Gallery},enabled=pageopen
+ ]{myDigis}
+}
+\end{center}
+\end{document}
diff --git a/texmf-dist/doc/latex/fldigigal/fdg_demo_fit.tex b/texmf-dist/doc/latex/fldigigal/fdg_demo_fit.tex
new file mode 100644
index 00000000..48e417c8
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/fdg_demo_fit.tex
@@ -0,0 +1,60 @@
+\documentclass{article}
+\usepackage[%
+ web={pro,tight,usesf},
+ eforms,graphicxsp={showembeds}
+]{aeb_pro}
+\usepackage{rmannot}
+\usepackage{fldigigal}
+
+\margins{0in}{0in}{0in}{0in} % left,right,top, bottom
+\screensize{240bp}{320bp} % height, width
+
+
+\DeclareDocInfo
+{
+ title={An \texorpdfstring{\AcroTeX}{AcroTeX} Flash Digital Gallery},
+ author=D. P. Story,
+ university=From the Desktop of One D. P. Story,
+ email=dpstory@acrotex.net,
+ subject={An example of the AcroTeX Flash Digital Gallery},
+ keywords={AcroTeX, Adobe Flash, rmannot, fldigigal package},
+ talksite=\url{http://www.acrotex.net},
+ talkdate={\today},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) 2010, D. P. Story},
+ copyrightInfoURL=http://www.acrotex.net
+}
+\talkdateLabel{Published:}
+
+\def\AcroTeX{Acro\!\TeX}
+
+\definePath{\pathToSource}{%
+ C:/Users/Public/Documents/My TeX Files/tex/%
+ latex/aeb/aebpro/fldigigal/examples}
+\definePath{\digisOnline}{%
+ http://www.math.uakron.edu/~dpstory/photos/pa_demo}
+\definePath{\digisLocal}{\pathToSource/digis}
+
+\fdgXmlList{myDigis}
+{%
+ \image{path=\digisOnline/Chrysanthemum.jpg,
+ caption=J\iso{252}rgen\'s Chrysanthemum,online}
+ \image{path=\digisOnline/Desert.jpg,caption=Desert,online}
+ \image{path=\digisOnline/Hydrangeas.jpg,caption=Hydrangeas,online}
+ \image{path=\digisOnline/Jellyfish.jpg,caption=Jellyfish,online}
+ \image{path=\digisOnline/Koala.jpg,caption=Koala,online}
+ \image{path=\digisOnline/Lighthouse.jpg,caption=Lighthouse,online}
+ \image{path=\digisOnline/Penguins.jpg,caption=Penguins,online}
+ \image{path=\digisOnline/Tulips.jpg,caption=Tulips,online}
+}
+
+\parindent=0pt\parskip0pt\pagestyle{empty}
+
+\begin{document}
+
+\fgRmAnnot[%
+ galleryopts={gallery=vthumbs1,auto=false},
+ posternote={Flash Digital Gallery},enabled=pageopen
+]{myDigis}
+
+\end{document}
diff --git a/texmf-dist/doc/latex/fldigigal/fdg_man.pdf b/texmf-dist/doc/latex/fldigigal/fdg_man.pdf
new file mode 100644
index 00000000..e99b1d9d
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/fdg_man.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/fldigigal/fdg_man.tex b/texmf-dist/doc/latex/fldigigal/fdg_man.tex
new file mode 100644
index 00000000..2665aef5
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/fdg_man.tex
@@ -0,0 +1,407 @@
+% makeindex < aebpro_man.idx > aebpro_man.ind
+\documentclass{article}
+\usepackage[fleqn]{amsmath}
+\usepackage[
+ web={centertitlepage,designv,tight,usetemplates,%usesf,
+ forcolorpaper,latextoc,pro},
+ eforms,aebxmp,graphicxsp={showembeds}
+]{aeb_pro}
+\usepackage{rmannot}
+\usepackage{fldigigal}
+
+%\usepackage{multicol}
+\usepackage{aeb_mlink}
+\usepackage{array}
+\usepackage[altbullet]{lucidbry}
+%\usepackage{myriadpro}
+
+\usepackage{makeidx}
+\makeindex
+\usepackage{acroman}
+
+\usepackage[inactive]{srcltx}
+
+\def\expath{../examples}
+
+\urlstyle{tt}
+
+\makeatletter
+\renewcommand{\paragraph}
+ {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}}
+\makeatother
+
+\DeclareDocInfo
+{
+ university={\AcroTeX.Net},
+ title={The \texorpdfstring{\textsf{fldigigal} Package\\[1em]}{: }
+ Creating Flash Digital Galleries},
+ author={D. P. Story},
+ email={dpstory@acrotex.net},
+ subject={Creating Flash Digital Galleries},
+ talksite={\url{www.acrotex.net}},
+ version={1.0},
+ keywords={AcroTeX, PDF, Flash Photo Gallery, rmannot},
+ 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$}}$}
+
+\universityLayout{fontsize=Large}
+\titleLayout{fontsize=LARGE}
+\authorLayout{fontsize=Large}
+\tocLayout{fontsize=Large,color=aeb}
+\sectionLayout{indent=-40pt,fontsize=large,color=aeb,afterskip=1sp}
+\subsectionLayout{indent=-20pt,color=aeb,afterskip=1sp}
+\subsubsectionLayout{indent=0pt,color=aeb,afterskip=1sp}
+\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}}
+
+\newenvironment{eqComments}[1][\strut]{\smallskip\leftskip-\labelwidth
+\item[]\textbf{\textcolor{blue}{#1}}}{\par\smallskip}
+
+%----------fldigigal--------------
+\definePath{\pathToSource}{%
+ C:/Users/Public/Documents/My TeX Files/tex/%
+ latex/aeb/aebpro/fldigigal/examples}
+\definePath{\digisOnline}{%
+ http://www.math.uakron.edu/~dpstory/photos/pa_demo}
+\definePath{\digisLocal}{\pathToSource/digis}
+
+\fdgXmlList{myDigis}
+{%
+ \image{path=\digisOnline/Chrysanthemum.jpg,caption=Jürgen\'s Chrysanthemum,online} %\iso{252}
+ \image{path=\digisOnline/Desert.jpg,caption=Desert,online}
+ \image{path=\digisOnline/Hydrangeas.jpg,caption=Hydrangeas,online}
+ \image{path=\digisOnline/Jellyfish.jpg,caption=Jellyfish,online}
+ \image{path=\digisOnline/Koala.jpg,caption=Koala,online}
+ \image{path=\digisOnline/Lighthouse.jpg,caption=Lighthouse,online}
+ \image{path=\digisOnline/Penguins.jpg,caption=Penguins,online}
+ \image{path=\digisOnline/Tulips.jpg,caption=Tulips,online}
+}
+%---------fldigigal---------------------
+
+%\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}\label{s:intro}
+
+The \textsf{fldigigal} package is the third application of \textsf{rmannot};
+the others are the {\AcroFLeX} and \textsf{yt4pdf} packages.
+
+The \emph{Flash Digital Gallery} distribution consists of a {\LaTeX}
+package, \textsf{fldigigal}, several \textsf{SWF} files, a small collection
+of digital photos, and sample files. The purpose of this distribution is
+to provide a convenient way to create a Flash slideshow. The distribution
+offers several design layouts of the slideshow, called \emph{galleries}.
+Below is an example of a slideshow created by \textsf{fldigigal} using
+source code from this document.
+\begin{center}%\previewtrue
+\resizebox{.9\linewidth}{!}
+{%
+ \fgRmAnnot[galleryopts={gallery=vthumbs1,auto=false,captionalign=center},
+ posternote={Flash Digital Gallery},enabled=pageopen
+ ]{myDigis}
+}
+\end{center}
+The photos themselves may be embedded in the PDF file (increasing the
+file size), or may be referenced with an URL. The gallery can be manually
+operated, or set to change photos at a regular interval.
+
+There are steps for creating a flash digital gallery:
+\begin{enumerate}
+ \item In the preamble of your document, specify the digitals (PNG,
+ JPG, GIF) you want displayed in you gallery. This is entered by
+ using the \cs{fdgXmlList} command. See the section
+ \Nameref{fdgXmlList} for details.
+ \item In the body of the document, create a Rich Media Annotation (RMA)
+ using the command \cs{fgRmAnnot}, defined in \textsf{fldigigal}. For
+ details of this command, see the section
+ \Nameref{fgRmAnnot}.
+\end{enumerate}
+
+
+
+\section{Requirements}
+
+This package is part of \textsf{AeB Pro}, which means Acrobat Distiller is
+used to create the PDF; the package requires \textsf{rmannot}, which
+creates rich media annotations. Therefore, we require
+\begin{equation*}
+ \boxed{\text{\large\bfseries Adobe Acrobat, version 9.0 or later}}
+\end{equation*}
+To use this package, the document author must have AeB and AeB Pro
+installed, as well as \textsf{rmannot}. The manual for \textsf{rmannot}
+needs to be read closely to install it properly and for it to function correctly.
+
+\section{Configuring your installation}
+
+In addition to configuring the \textsf{rmannot} package correctly, the
+\textsf{fldigigal} package needs configuring as well. The \textsf{fldigigal}
+comes with a configuration file \texttt{fldigigal.cfg}. Open this file in
+your favorite editor to see
+\begin{Verbatim}[fontsize=\small]
+% fldigigal config file. Delete the \endinput below and replace the path
+% provided with the path to the swf folder of your fldigigal installation.
+% This path is used to locate the fldigigal SWF files.
+\endinput
+\renewcommand{\fdgFolder}{C:/Users/Public/Documents/My TeX Files/%
+ tex/latex/aeb/aebpro/fldigigal/swf}
+\end{Verbatim}
+Edit this file so that \cs{fdgFolder} points to the \texttt{swf} folder on
+your computer.
+
+\section{In the Preamble: Populating the
+\texorpdfstring{\protect\cs{fdgXmlList}}{\CMD{fdgXmlList}}
+Command}\label{fdgXmlList}
+
+The {\AcroTeX} Flash Gallery SWF files take several arguments that are
+passed to it using \texttt{FlashVars}; one such variable is a reference to
+an XML file that contains the paths and captions to the digital files.
+When I began developing the package, the XML file was just hand-written in
+an editor; when I started to write the package, I included the
+\cs{fdgXmlList} command which writes the XML file as the source file is
+compiled.
+
+At the bare minimum, the preamble must include a definition for
+\cs{pathToSource} and the \cs{fdgXmlList} command.
+
+The definition of \cs{pathToSource} should be made using the
+\cs{definePath} command, defined in the \textsf{eforms} package.
+Here is one such definition to a sample file in this distribution.
+\begin{Verbatim}[xleftmargin=20pt,fontsize=\small]
+\definePath{\pathToSource}{%
+ C:/Users/Public/Documents/My TeX Files/tex/%
+ latex/aeb/aebpro/fldigigal/examples}
+\end{Verbatim}
+The \textsf{fldigigal} uses the Adobe Distiller to create the PDF file.
+Distiller only works with absolute file references; so, Distiller needs to
+know the location of XML file that is to be written by the \cs{fdgXmlList}
+command. \emph{This definition is required}.
+
+Another (optional, but recommended) definition is the path to the digital
+files. The photos may reside on your local hard drive, or on the Internet.
+In the example that follows, we illustrate the method of defining the
+paths; one for a local hard drive, the other for photos found online.
+\begin{Verbatim}[xleftmargin=20pt,fontsize=\small]
+\definePath{\digisOnline}{%
+ http://www.math.uakron.edu/~dpstory/photos/pa_demo}
+\definePath{\digisLocal}{\pathToSource/digis}
+\end{Verbatim}
+These paths may then be conveniently included in the \texttt{path} key
+of the \cs{image} command, see below.
+
+\begin{dCmd*}{.67\linewidth}
+\fdgXmlList[<kv-pairs>]{<name>}{%
+ \image{...}
+ \image{...}
+ ...
+ \image{...}
+}
+\end{dCmd*}
+\CmdDescription When the source document compiles, this command writes an
+XML file to the source file's folder. The XML is later embedded in the PDF
+file when the file is distilled.
+\PD The command has three arguments, the first is optional.
+\begin{itemize}
+ \item[\texttt{[\#1]}] The optional argument labeled above as
+ \texttt{[<kv-pairs>]} may include only two (Boolean) key-value
+ pairs: \texttt{showcounts} and \texttt{nowrite}.
+ \begin{itemize}
+ \item \texttt{showcounts} When this key appears as \texttt{showcount} or as
+ \texttt{showcount=true}, a count and a total count of the number of
+ photos appearing in the gallery is displayed in the title bar.
+ The count appears as (1 of 8), for example, but this can be
+ redefined by the command \cs{fdgcntOf}. The default definition
+ is\medskip
+\begin{Verbatim}[xleftmargin=20pt,fontsize=\small]
+\newcommand{\fdgcntOf}[1]{\space(#1 of \fdg@numDigis)}
+\end{Verbatim}
+\par\medskip The default is that no count is written to the title bar of the gallery.
+ \item \texttt{nowrite} You optionally include this key in the list
+ if the XML has already been written to your source folder; however, if
+ you change options, or change the key-value pairs of the \cs{image}
+ commands, you will need to re-write the XML by removing the \texttt{nowrite}
+ option.
+ \end{itemize}
+ \item[\texttt{\#2}] The second parameter, \texttt{<name>}, is a
+ unique name for the gallery being created with the photos; for
+ example \texttt{myVacation2010}. The name should follow the
+ rules of a JavaScript variable.
+ \item[\texttt{\#3}] The third argument consists of a series of
+ \cs{image} commands, each command takes three key-value pairs.
+ \begin{itemize}
+ \item \texttt{path}: The path to the digital file, the path may be
+ that to a digital file on your hard drive, or on the Internet.
+ A digital file may be a \textsf{JPG}, \textsf{PNG}, or \textsf{GIF} file.
+ \emph{This key is required}.
+ \item \texttt{caption}: The (short) descriptive string to be
+ displayed along with the associated photo. This key is optional,
+ if not present, the filename of the digital file is displayed. See
+ the optional key-values \texttt{nocaptions} and \texttt{nocaptionstext} of
+ \cs{fgRmAnnot}.
+ \item \texttt{online}: Use this key to indicate that the
+ \texttt{path} key is an \textsf{URL}, and refers to a resource on the
+ Internet. If this key is not present, it is assumed that path
+ points to a file on the local hard drive, and Distiller will get
+ that file and embed it in the PDF. If Distiller does not find the
+ file, distillation is aborted and a message is written to the
+ distiller long which suggests that it cannot find the file.
+ \end{itemize}
+\end{itemize}
+Below is an example of the \cs{fdgXmlList} used for this document, I've
+modified the first two entries by removing the \texttt{online} key, and
+replacing \cs{digiOnline} with \cs{digisLocal} to demonstrate how you
+reference each type. (The definitions of \cs{digiOnline} and
+\cs{digisLocal} appeared earlier.) For this definition below, two files
+will be embedded (the first two), all others are online and the gallery
+will get them from the Internet.
+\begin{Verbatim}[numbers=left,xleftmargin=20pt,fontsize=\small]
+\fdgXmlList{myDigis}
+{%
+ \image{path=\digisLocal/Chrysanthemum.jpg,
+ caption=Jürgen\'s Chrysanthemum}
+ \image{path=\digisLocal/Desert.jpg,caption=Desert}
+ \image{path=\digisOnline/Hydrangeas.jpg,caption=Hydrangeas,online}
+ \image{path=\digisOnline/Jellyfish.jpg,caption=Jellyfish,online}
+ \image{path=\digisOnline/Koala.jpg,caption=Koala,online}
+ \image{path=\digisOnline/Lighthouse.jpg,caption=Lighthouse,online}
+ \image{path=\digisOnline/Penguins.jpg,caption=Penguins,online}
+ \image{path=\digisOnline/Tulips.jpg,caption=Tulips,online}
+}
+\end{Verbatim}
+One comment is needed, refer to line~(3). I've included my friend,
+J\"{u}rgen, name value of the \texttt{caption} key to demonstrate how to
+use special latin-1 characters. The u-umlaut (ü) may be entered by your
+keyboard, as I have, or by special command \verb!\iso{252}!,
+which expands to `\makeatletter\texttt{\fdg@iso{252}}\makeatother'. The
+interested user is referred to these two online documents.
+\begin{align*}
+&\text{\footnotesize\url{http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references}}\\
+&\text{\footnotesize\url{http://www.html-entities.com/}}
+\end{align*}
+The \verb!\iso{<dec>}! command expands to \verb!&#<dec>;!, see above
+\textsf{URLs} to determine the correct value of the \texttt{<dec>} to get
+the desired glyph.
+
+The second comment concerns the single apostrophe (\texttt{'}). The
+captions are enclosed in single quotes, so if you want an apostrophe, you
+must use the the character entity `\verb!&apos;!', or you can use
+\verb!\'!, as I did above. This special command, redefined within a group,
+expands to `\verb!&apos;!'. Thus, we can write \verb!Jürgen\'s!, or
+\verb!Jürgen&apos;s!, or \verb!J\iso{252}rgen&apos;s!, etc. If you want to
+use an ampersand, use `\verb!&amp;!'.
+
+OK, that's it for the preamble; on to \cs{fgRmAnnot}!
+
+\section{In the Body: Create a Gallery with
+\texorpdfstring{\protect\cs{fgRmAnnot}}{\CMD{fgRmAnnot}}}\label{fgRmAnnot}
+
+To create a flash gallery of photos, use the command \cs{fgRmAnnot}, its definition
+uses the command \cs{rmAnnot}, which is defined in the \textsf{rmannot} package.
+\begin{dCmd*}{.5\linewidth}
+\fgRmAnnot[<kv-pairs>]{<name>}
+\end{dCmd*}
+\PD
+\begin{enumerate}
+ \item The first (optional) parameter is used to pass the key-value pairs of the
+ \cs{rmAnnot} command. Additionally, the \texttt{galleryopts} key is
+ recognized by the \cs{fgRmAnnot} command. The value of the \texttt{galleryopts} key
+ consists of key-value pairs that customize the gallery.
+ \begin{itemize}
+ \item \texttt{gallery}: The value of this key determines the layout of the gallery.
+ Permissible choices are \texttt{vthumbs1} (vertical thumbnails on the left),
+ \texttt{hthumbs1} (horizontal thumbnails below digital), and
+ \texttt{nothumbs1} (no thumbnails, the caption bar is a multiline
+ text field so longer captions may be displayed). More designs are
+ possible, as my skill in
+ Flash Professional Pro CS5 increases. The default is
+ \texttt{vthumbs1}.
+ \item \texttt{trans}: This key determines the transition effects.
+ Possible values are \texttt{Blinds}, \texttt{Fade},
+ \texttt{Fly}, \texttt{Iris}, \texttt{Photo},
+ \texttt{PixelDissolve}, \texttt{Rotate}, \texttt{Squeeze},
+ \texttt{Wipe}, \texttt{Zoom}, \texttt{Random}. The default is
+ \texttt{Random}.
+ \item \texttt{auto}: If true, the gallery will automatically
+ display the list of photos at a regular interval. The user can
+ stop the automatic display by pressing the pause button. The
+ default is \texttt{auto=true}.
+ \item \texttt{delay}: The delay, in seconds, between the automatic display of
+ photos. The default is 6 (seconds).
+ \item \texttt{captionalign} The alignment of the text in the caption bar. Possible choces
+ are \texttt{left} (the default), \texttt{right}, and
+ \texttt{center}. This key-value pair is ignored for
+ \texttt{gallery=nothumbs1}.
+ \item \texttt{nocaptions}: A Boolean key, which if \texttt{true},
+ the caption strings are not displayed in the caption bar.
+ \item \texttt{nocaptionstext}: If the \texttt{nocaptions} key is
+ passed, you can populate the caption bar with a static string.
+ Thus, \texttt{nocaptionstext=Hi Mom!} displays the string `Hi Mom' in
+ the caption bar for each and every photo.
+ \end{itemize}
+
+ \item[] See the manual for the \textsf{rmannot} package for more details on the
+ key-value pairs that can be passed through the optional first
+ parameter.
+
+ \item The \texttt{<name>} argument matches the \texttt{<name>}
+ argument of a \cs{fdgXmlList} declared in the preamble.
+\end{enumerate}
+
+The example that appeared earlier in this manual has code
+
+\begin{Verbatim}[numbers=left,xleftmargin=20pt,fontsize=\small]
+\resizebox{.9\linewidth}{!}
+{%
+ \fgRmAnnot[%
+ galleryopts={gallery=vthumbs1,auto=false,captionalign=center},
+ posternote={Flash Digital Gallery},enabled=pageopen
+ ]{myDigis}
+}
+\end{Verbatim}
+Line~(1) shows how the gallery may be resized used using \cs{resizebox}
+(or by using \cs{scalebox}). In line~(3) we have the \cs{fgRmAnnot}
+command that creates the digital gallery. In line~(4), we specify some of the
+\texttt{galleryopts} key-value pairs. The other key-value pairs (outside
+the scope of \texttt{galleryopts} are \cs{rmAnnot} key-value pairs.
+The second argument, the \texttt{<name>} argument is shown in line~(6).
+This name matches the name declared earlier in the preamble in an
+\cs{fdgXmlList} command.
+
+\section{Sample files}
+
+The following are the sample files shipped with \textsf{fldigigal}:
+\begin{itemize}
+ \item \texttt{fdg\_demo.tex} lays out the basic structure for creating
+ a \emph{{\AcroTeX} Flash Digital Gallery}. You can experiment with
+ this file by changing the options.
+ \item \texttt{fdg\_demo\_fit.tex} demonstrates how to have a one-page
+ gallery whose size matches the size of the page.
+\end{itemize}
+Advanced examples \href{http://www.math.uakron.edu/~dpstory/aebblog.html}{AeB Blog site}.
+
+
+\bigskip
+
+That's all for now, I simply must get back to my retirement. {\dps}
+
+\end{document}
diff --git a/texmf-dist/doc/latex/fldigigal/fldigigal.dvi b/texmf-dist/doc/latex/fldigigal/fldigigal.dvi
new file mode 100644
index 00000000..4aa66bc1
--- /dev/null
+++ b/texmf-dist/doc/latex/fldigigal/fldigigal.dvi
Binary files differ
diff --git a/texmf-dist/source/latex/artthreads/artthreads.dtx b/texmf-dist/source/latex/artthreads/artthreads.dtx
new file mode 100644
index 00000000..3eda0771
--- /dev/null
+++ b/texmf-dist/source/latex/artthreads/artthreads.dtx
@@ -0,0 +1,390 @@
+%\iffalse
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% artthreads.sty package, 2016-04-09 %%
+%% Copyright (C) 2016 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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{artthreads}
+%<package> [2016/04/09 v1.1 Support for article threads (dps)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex]{hyperref}
+\usepackage{fancyvrb,array,calc}
+%\pdfstringdefDisableCommands{\let\\\textbackslash}
+%\EnableCrossrefs \CodelineIndex
+\RecordChanges
+\bgroup\ttfamily
+\gdef\brpr#1{\char123\relax#1\char125\relax}\egroup
+\def\ameta#1{\ensuremath{\langle\textsl{\texttt{#1}}\rangle}}
+\def\meta#1{\textsl{\texttt{#1}}}
+\def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}}
+\def\cs#1{\texttt{\bslash#1}}
+\DeclareRobustCommand{\tmspace}[3]{%
+ \ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
+\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
+\let\thinspace\,
+\renewcommand{\!}{\tmspace-\thinmuskip{.1667em}}
+\let\negthinspace\!
+\renewcommand{\:}{\tmspace+\medmuskip{.2222em}}
+\let\medspace\:
+\newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}}
+\renewcommand{\;}{\tmspace+\thickmuskip{.2777em}}
+\let\thickspace\;
+\newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}}
+\makeatletter
+\renewcommand{\paragraph}
+ {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}
+ {\normalfont\normalsize\bfseries}}
+\renewenvironment{quote}[1][]
+ {\def\@rgi{#1}\ifx\@rgi\@empty
+ \let\rghtm\@empty\else\def\rghtm{\rightmargin\leftmargin}\fi
+ \list{}{\rghtm} %{\rightmargin\leftmargin}%
+ \item\relax}
+ {\endlist}
+\makeatother
+\begin{document}
+\def\CMD#1{\textbackslash#1}
+ \GetFileInfo{artthreads.sty}
+ \title{\textsf{artthreads}: Support for article threads}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@acrotex.net}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \let\Email\texttt
+ \renewenvironment{theglossary}{%
+ \let\efill\relax
+ \begin{itemize}}{\end{itemize}}
+ \value{GlossaryColumns}=1
+ \DocInput{artthreads.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}
+% This package is used to create \textit{article threads} around blocks of content. Generally,
+% article threads are used with multi-column documents, such as newspapers or newsletters, or
+% anything that uses a multi-column format.
+%
+% The creation of the article threads should occur as the final step of the document composition.
+% There is nothing automatic about placing the threads, {\TeX} does not lend itself to the creation
+% of the threads. For the purpose of placing the threads, the options \texttt{preview} and
+% \texttt{viewMagWin} are integral.
+%
+% \section{Options and Required Packages}
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+\RequirePackage{ifpdf}[2006/02/20]
+\RequirePackage{ifxetex}[2006/08/21]
+\@ifundefined{ifpdfmarkup}{\newif\ifpdfmarkup}{}\pdfmarkupfalse
+\ifpdf\else\ifxetex\else\pdfmarkuptrue\fi\fi
+% \end{macrocode}
+% \paragraph*{Driver options.} Three options, \DescribeMacro{dvips,dvipsone}\texttt{dvips} (the default)
+% and \texttt{dvipsone}, both of which require \textbf{Adobe Distiller}
+% as the PDF creator; the \DescribeMacro{pdftex}\texttt{pdftex} allows for the same functionality
+% for the \textsf{pdflatex} executable. We also support \DescribeMacro{xetex,dvipdfm,dvipdfmx}\texttt{dvipdfm}
+% and its extensions.
+%
+% \paragraph*{Preview options.} The \DescribeMacro{preview}\texttt{preview}
+% option is a carry over from \textsf{eforms}. When selected, all form fields are outlined; useful when
+% setting the location of fields in a dvi previewer. The other option is \texttt{viewMagWin}
+% \DescribeMacro{viewMagWin} will show the viewing windows surrounding the target. This is the rectangle
+% that will be jumped to. Use this option to adjust the size of the window to your needs.
+% When either of the last two options has an exclamation point prior, that means to
+% turn off the switch. You can conveniently use \texttt{viewMagWin} to see the viewing window,
+% then change it to \DescribeMacro{!viewMagWin}\texttt{!viewMagWin} to remove the visible window. Cool.
+% Similarly, you can turn off \texttt{preview} using \DescribeMacro{!preview}\texttt{!preview}.
+% \begin{macrocode}
+% \end{macrocode}
+% All options are passed to the \textsf{fitr} package, which contains a lot of the code
+% used in this package.
+% \begin{macrocode}
+\DeclareOptionX{pdftex}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+% \end{macrocode}
+% Distiller based drivers.
+% \begin{macrocode}
+\DeclareOptionX{dvips}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{dvipsone}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+% \end{macrocode}
+% \textsf{dvipdfm} and its variants.
+% \begin{macrocode}
+\DeclareOptionX{dvipdfm}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{dvipdfmx}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{xetex}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareOptionX{preview}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{!preview}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{viewMagWin}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{!viewMagWin}
+ {\PassOptionsToPackage{\CurrentOption}{fitr}}
+\ProcessOptionsX
+% \end{macrocode}
+% \section{The Main Code}
+% We require the package \textsf{fitr}, as we use many commands from that package.
+% We pass all options to \textsf{fitr}.
+% \begin{macrocode}
+\RequirePackage{fitr}[2016/04/04]
+% \end{macrocode}
+% Some scratch counters, lengths, boxes.
+% \begin{macrocode}
+\newif\ifnewarticle
+\newcounter{artthrdcnt}
+\def\CntArt{0}\def\CntArtInfo{0}
+\def\inc@CntMacro#1{{\@tempcnta#1\relax\advance\@tempcnta1\relax
+ \xdef#1{\the\@tempcnta}}}
+\def\artM@rk{[\space}
+% \end{macrocode}
+% \paragraph*{Key-values for \cs{setThreadInfo}} We set up
+% key-values\DescribeMacro{title}\DescribeMacro{author}\DescribeMacro{subject}^^A
+% \DescribeMacro{keywords} for the thread \textsf{Info} dictionary. Only the title
+% is required, that's why a default value of \texttt{thread-<num>} is otherwise provided.
+% \begin{macrocode}
+\define@key{artthrd}{title}[]{\def\threadTitle{#1}}
+ \let\threadTitle\@empty
+\define@key{artthrd}{author}[]{\def\threadAuthor{#1}}
+ \let\threadAuthor\@empty
+\define@key{artthrd}{keywords}[]{\def\threadKeywords{#1}}
+ \let\threadKeywords\@empty
+\define@key{artthrd}{subject}[]{\def\threadSubject{#1}}
+ \let\threadSubject\@empty
+% \end{macrocode}
+% Use \DescribeMacro{\setThreadInfo}\cmd{\setThreadInfo} prior to the opening of a
+% new thread using \cs{cArticle}. Through its key-values, set the title, author,
+% keywords, and subject of the thread. For \textsf{pdftex}, only title is supported.
+% \begin{macrocode}
+\newcommand{\setThreadInfo}[1]{\inc@CntMacro\CntArtInfo
+ \let\threadTitle\@empty\let\threadAuthor\@empty
+ \let\threadKeywords\@empty\let\threadSubject\@empty
+ \setkeys{artthrd}{#1}\ifx\threadTitle\@empty
+ \def\threadTitle{thread-\CntArtInfo}\fi
+}
+\def\bArtErrMsg{When starting a new article thread
+ (\string\cArticle)\MessageBreak
+ first use \string\setThreadInfo\space to set the title,\MessageBreak
+ author, subject, and keywords}
+% \end{macrocode}
+% \paragraph*{Additional key-values for threads} In addition to the key-values provided
+% by \textsf{fitr}, we provide a few more. The two keys
+% \DescribeMacro{addtow}\texttt{addtow} and \DescribeMacro{addtoh}\texttt{addtoh}
+% adds to the reading border of the threads. These are set through the
+% command \DescribeMacro{\setAddToBorder}\cs{setAddToBorder}. For the most part,
+% choices for \texttt{addtow} (add to the width) and \texttt{addtoh} (add to the height)
+% should be set for the whole document. Initially, \texttt{addtow=0,addtoh=0}.
+% \begin{macrocode}
+\define@key{@rtthrd}{addtow}[0]{%
+ \fitr@defaultbp{\artthrd@@addtow}{#1}}
+\def\artthrd@@addtow{0}
+\define@key{@rtthrd}{addtoh}[0]{%
+ \fitr@defaultbp{\artthrd@@addtoh}{#1}}
+\def\artthrd@@addtoh{0}
+\newcommand{\setAddToBorder}[1]{\setkeys{@rtthrd}{#1}}
+% \end{macrocode}
+% The \DescribeMacro{\bArticle}\cmd{\bArticle} is used to start an article thread. The thread
+% may continue with \cs{cArticle}. Both commands have a required argument, consisting of
+% key-values defined by \textsf{fitr}.
+% The following is the syntax, with appropriate keys defined in \texttt{fitr}.
+% \begin{quote}\ttfamily
+% \string\cArticle\char123lift=\ameta{length},width=\ameta{length},height=\ameta{length}\char125
+% \end{quote}
+% \begin{macrocode}
+\newcommand{\bArticle}{\begingroup\inc@CntMacro\CntArt
+ \ifnum\CntArt=\CntArtInfo\relax\else
+ \PackageError{artthreads}{\bArtErrMsg}{See package documentation
+ for \string\setThreadInfo}\fi
+ \newarticletrue\set@rectart
+}
+% \end{macrocode}
+% The only difference between \DescribeMacro{\cArticle}\cmd{\cArticle} and
+% \cmd{\bArticle} is the stepping of the counter \cmd{\CntArt}
+% and the setting of the switch \cmd{ifnewarticle}.
+% \begin{macrocode}
+\newcommand{\cArticle}{\begingroup\newarticlefalse\set@rectart}
+% \end{macrocode}
+% \cmd{\set@rectart} continues \cs{bArticle}/\cs{cArticle}.
+% \begin{macrocode}
+\newcommand{\set@rectart}[1]{\def\fitr@artrect@argi{#1}%
+ \edef\temp@exp{\noexpand\setkeys{fitr}{#1}}\temp@exp
+ \set@@rectart}
+% \end{macrocode}
+% \cmd{\set@@rectart} is the main command for building the thread.
+% \begin{macrocode}
+\def\set@@rectart{\def\fitr@setBL{0pt}%
+ \@ifundefined{ef@Bbox}{\let\fitr@FLB@ction\Bbox}%
+ {\let\fitr@FLB@ction\ef@Bbox}%
+ \get@fitr@dimen{%
+ \parbox[\fitr@@refPt][\fitr@@height]{\fitr@@width}%
+ {\kern0pt\fitr@FLB@ction{\fitr@@width}{\fitr@@height}\kern0pt}%
+ }%
+ \makebox[0pt][l]{\hspace*{\fitr@@shift}\smash{%
+ \raisebox{\fitr@@lift-\fitr@setBL}{%
+% \end{macrocode}
+% Actually insert the thread code here by inserting \cs{setThre@d}.
+% \begin{macrocode}
+ \setThre@d{\artthrd@@addtow}{\artthrd@@addtoh}%
+ \unhbox\fitr@bbox
+ \fitr@urxury@fixup{\artthrd@@addtow}{\artthrd@@addtoh}{}%
+ }}}\setlength{\fboxsep}{0pt}%
+% \end{macrocode}
+% Now place an extended border around the viewing area
+% \begin{macrocode}
+ \ifviewMagWin
+ \fitr@length=\artthrd@@addtow bp
+ \fitr@length=2\fitr@length
+ \addtolength{\fitr@length}{\fitr@@width}%
+ \edef\fitr@@width{\the\fitr@length}%
+ \fitr@length=\artthrd@@addtoh bp
+ \fitr@length=2\fitr@length
+ \addtolength{\fitr@length}{\fitr@@height}%
+ \edef\fitr@@height{\the\fitr@length}%
+ \setlength\fitr@length{-\artthrd@@addtow bp}%
+ \addtolength\fitr@length{\fitr@@shift}%
+ \makebox[0pt][l]{\hspace*{\fitr@length}\smash{%
+ \setlength\fitr@length{\fitr@@lift-\fitr@setBL}%
+ \if\fitr@@refPt b%
+ \addtolength\fitr@length{-\artthrd@@addtoh bp}\else
+ \if\fitr@@refPt t%
+ \addtolength\fitr@length{\artthrd@@addtoh bp}%
+ \fi\fi
+ \raisebox{\fitr@length}%
+ {\fbox{\parbox[\fitr@@refPt][\fitr@@height]%
+ {\fitr@@width}{\kern0pt\hfill\vfill\kern0pt}}}}%
+ }%
+ \fi
+\endgroup}
+% \end{macrocode}
+% \paragraph*{Driver dependent macros} The \cs{ThrBbox} macros perform different tasks
+% depending on the driver.
+% \begin{macrocode}
+\if@fitr@dvipdfm
+% \end{macrocode}
+% For the \textsf{dvipdfm} and friends
+% \begin{macrocode}
+\def\ThrBbox#1#2{%
+ \fitr@length=#1bp
+ \fitr@length=2\fitr@length
+ \advance\fitr@length\wd\fitr@bbox
+ \edef\fitr@xetex@view@width{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\ht\fitr@bbox
+ \edef\fitr@xetex@view@height{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\dp\fitr@bbox
+ \edef\fitr@xetex@view@depth{\the\fitr@length}%
+}\else\ifx\fitr@driver\fitr@pdftex@driver
+% \end{macrocode}
+% For the \textsf{pdftex} and friends
+% \begin{macrocode}
+\def\ThrBbox#1#2{%
+ \fitr@length=#1bp
+ \fitr@length=2\fitr@length
+ \advance\fitr@length\wd\fitr@bbox
+ \edef\fitr@pdftex@view@width{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\ht\fitr@bbox
+ \edef\fitr@pdftex@view@height{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\dp\fitr@bbox
+ \edef\fitr@pdftex@view@depth{\the\fitr@length}%
+}\else\ifx\fitr@driver\fitr@dvipsone@driver
+% \end{macrocode}
+% For the \textsf{dvipsone} driver
+% \begin{macrocode}
+\def\ThrBbox#1#2{%
+ currentpoint 2 copy %
+ \the\fitr@depth\space add #2\space PDFtoTeX add % y1
+ exch #1\space PDFtoTeX sub exch % x1
+ 4 2 roll exch
+ \the\fitr@width\space add #1\space PDFtoTeX add exch % x2
+ \the\fitr@height\space sub #2\space PDFtoTeX sub} % y2
+\else\ifx\fitr@driver\fitr@dvips@driver
+% \end{macrocode}
+% For the \textsf{dvips} driver
+% \begin{macrocode}
+\def\ThrBbox#1#2{% Uses \fitr@bbox
+ currentpoint 2 copy %
+ \the\fitr@depth\space SPtoDvips add
+ #2\space BPToDvips add % y1
+ exch #1\space BPToDvips sub exch % x1
+ 4 2 roll exch
+ \the\fitr@width\space SPtoDvips add
+ #1\space BPToDvips add exch % x2
+ \the\fitr@height \space SPtoDvips sub
+ #2\space BPToDvips sub} % y2
+\fi\fi\fi\fi
+% \end{macrocode}
+% \paragraph*{Code to set the thread} The \cs{setThre@d} macros are driver dependent.
+% \begin{macrocode}
+\def\setThre@d#1#2{%
+ \fitr@defaultbp{\aWd}{#1}\fitr@defaultbp{\aHt}{#2}%
+ \edef\tmp@exp{\noexpand\set@rtThrd{\aWd}{\aHt}}\tmp@exp
+}
+\if@fitr@dvipdfm
+% \end{macrocode}
+% For the \textsf{dvipdfm} and friends
+% \begin{macrocode}
+\def\set@rtThrd#1#2{\ThrBbox{#1}{#2}%
+ \smash{\raisebox{-\fitr@xetex@view@height+#2bp}%
+ {\makebox[0pt][l]{\hspace*{-#1bp}%
+ \@pdfm@mark{thread @artthrd\CntArt\space
+ width \fitr@xetex@view@width\space
+ height \fitr@xetex@view@height\space
+ depth \fitr@xetex@view@depth\space
+ << /Title (\threadTitle)
+\ifnewarticle
+ /Author (\threadAuthor)
+ /Subject (\threadSubject)
+ /Keywords (\threadKeywords)
+\fi >>}}}}}\else\ifx\fitr@driver\fitr@pdftex@driver
+% \end{macrocode}
+% \textsf{pdftex} and friends
+% \begin{macrocode}
+\def\set@rtThrd#1#2{\ThrBbox{#1}{#2}%
+ \makebox[0pt][l]{\hspace*{-#1bp}%
+ \pdfthread
+ width \fitr@pdftex@view@width\space
+ height \fitr@pdftex@view@height\space
+ depth \fitr@pdftex@view@depth\space
+ name {\threadTitle}}}\else
+% \end{macrocode}
+% For drivers that use PostScript and the \textbf{pdfmark}.
+% \changes{v1.1}{2016/04/09}{Removed the Page key and dependence on the refcount package}
+% \begin{macrocode}
+\def\set@rtThrd#1#2{\literalps@out{\artM@rk
+ /Rect [\ThrBbox{\artthrd@@addtow}{\artthrd@@addtoh}]
+ /Title (\threadTitle)
+\ifnewarticle
+ /Author (\threadAuthor)
+ /Subject (\threadSubject)
+ /Keywords (\threadKeywords)
+\fi
+ /ARTICLE pdfmark}}
+\fi\fi
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%\Finale
+\endinput
diff --git a/texmf-dist/source/latex/artthreads/artthreads.ins b/texmf-dist/source/latex/artthreads/artthreads.ins
new file mode 100644
index 00000000..6d646d87
--- /dev/null
+++ b/texmf-dist/source/latex/artthreads/artthreads.ins
@@ -0,0 +1,61 @@
+%%
+%% 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-2012 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{2016/01/12}
+\def\batchfile{artthreads.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{artthreads.sty}{\from{artthreads.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/texmf-dist/source/latex/cntdwn/cntdwn.dtx b/texmf-dist/source/latex/cntdwn/cntdwn.dtx
new file mode 100644
index 00000000..acc02bac
--- /dev/null
+++ b/texmf-dist/source/latex/cntdwn/cntdwn.dtx
@@ -0,0 +1,1306 @@
+% \iffalse
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% cntdwn package, 2010-8-2 %%
+%% Copyright (C) 2010 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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}
+%<package>\ProvidesPackage{cntdwn}
+%<package> [2014/11/26 v.6 countdown support (dps)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex]{hyperref}
+\pdfstringdefDisableCommands{\let\\\textbackslash}
+\OnlyDescription
+\EnableCrossrefs
+\CodelineIndex
+\begin{document}
+ \GetFileInfo{cntdwn.sty}
+ \title{cntdwn: A countdown Package}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@uakron.edu}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \let\Email\texttt
+ \DocInput{cntdwn.dtx}
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \MakeShortVerb{|}
+%
+% \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}
+% This is a ``countdown'' package that features a countdown field and three events. Each event
+% is fired at designated points in the talk. The length of the talk is preset, it can be started,
+% paused, and stopped. There is an end of talk event as well. All these things are definable by
+% the document author, or the defaults can be taken. Only the length of the talk is required.
+%
+% We support four scenarios:
+% \begin{enumerate}
+% \item short countdown: less than a day. Designed for talks
+% \item short stopwatch: counting up from the start (less than a day)
+% \item long countdown: a countdown to an event, the event is some future date. There is an option
+% that once reached, the countdown will stop, or continue as a ``countup.''
+% \item long stopwatch: count up from the starting time/date
+%\end{enumerate}
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+\def\cntdwn@defaultcode{\makeatletter
+ \InputIfFileExists{shrtcnt.def}{}\makeatother}
+\DeclareOptionX{shortcount}{%
+ \def\cntdwn@shrtcnt{\cntdwn@defaultcode}%
+}
+\let\cntdwn@shrtcnt\@empty
+\DeclareOptionX{longcount}{%
+ \def\cntdwn@lngcnt{\makeatletter
+ \InputIfFileExists{lngcnt.def}{}\makeatother}%
+}
+\let\cntdwn@lngcnt\@empty
+\ProcessOptionsX
+% \end{macrocode}
+% If no options are give, we assume \texttt{shortcount} and
+% input \texttt{shrtcnt.def}.
+% If only \texttt{longcount} is taken, then only \texttt{lngcnt.def} is input.
+% If shortcnt is taken only, we input \texttt{shrtcnt.def}, and if both options
+% are taken, we input \texttt{shrtcnt.def} followed by \texttt{lngcnt.def}.
+% \begin{macrocode}
+\ifx\cntdwn@shrtcnt\@empty
+ \ifx\cntdwn@lngcnt\@empty\AtEndOfPackage{\cntdwn@defaultcode}\else
+ \AtEndOfPackage{\cntdwn@lngcnt}\fi
+\else
+ \AtEndOfPackage{\cntdwn@defaultcode}
+ \ifx\cntdwn@lngcnt\@empty\else\AtEndOfPackage{\cntdwn@lngcnt}\fi
+\fi
+% \end{macrocode}
+% \texttt{\_oTime} is a JovaScript object that we must not let the user
+% ``overwrite'' by allowing him to name a timer with the name \texttt{Time}.
+% \begin{macrocode}
+\@namedef{Time@timername}{Time}
+% \end{macrocode}
+% \cs{cntdwnlTimers} and \cs{cntdwnaTimers} hold the JavaScript timer objects created by
+% \cs{setShortCntDwn}.
+% \begin{macrocode}
+\def\cntdwn@namegdef#1{\expandafter\gdef\csname #1\endcsname}
+\def\cntdwn@namexdef#1{\expandafter\xdef\csname #1\endcsname}
+\let\cntdwnlTimers\@empty
+\let\cntdwnaTimers\@empty
+% \end{macrocode}
+% \paragraph*{Language localizations}
+% \begin{macrocode}
+\newcommand{\cntdwnYear}{year}
+\newcommand{\cntdwnYears}{years}
+\newcommand{\cntdwnDay}{day}
+\newcommand{\cntdwnDays}{days}
+\newcommand{\cntdwnHour}{hour}
+\newcommand{\cntdwnHours}{hours}
+\newcommand{\cntdwnMinute}{minute}
+\newcommand{\cntdwnMinutes}{minutes}
+\newcommand{\cntdwnSecond}{second}
+\newcommand{\cntdwnSeconds}{seconds}
+% \end{macrocode}
+% The following JavaScript is common to both the \texttt{shortcount} and \texttt{longcount} options.
+% \begin{macrocode}
+\begin{insDLJS*}[_timerObjsLoaded]{cntdwncom}
+\begin{newsegment}{CntDwn: DLJS for the cntdwn Package}
+/*
+ Document Level JavaScript for cntdwn
+ D. P. Story copyright 2010
+*/
+var _timerObjsLoaded=true;
+\end{newsegment}
+\begin{newsegment}{CntDwn: Timer Objects}
+var _oTime = new Object;
+ _oTime.second=1000;
+ _oTime.minute=60*_oTime.second;
+ _oTime.hour=60*_oTime.minute;
+ _oTime.day=24*_oTime.hour;
+ _oTime.year = 365*_oTime.day;
+% \end{macrocode}
+% The commands \cs{cntdwnlTimers} and \cs{cntdwnaTimers} expand to objects and array assignments,
+% respectively.
+% \begin{macrocode}
+\cntdwnlTimers
+var aTimers = new Array();
+\cntdwnaTimers
+\end{newsegment}
+\end{insDLJS*}
+% \end{macrocode}
+%\changes{v.6}{2014/11/26}{Replaced the names of the fields that begin with
+%underscore with \cs{CDO}}
+% \begin{macrocode}
+\begingroup
+\catcode`\_12
+\gdef\CDO{_o}
+\endgroup
+%</package>
+%<*shortcnt>
+% \end{macrocode}
+% \section{Short Countdown Commands}
+% We introduce several commands for creating a countdown, for displaying the countdown,
+% and for controlling the countdown.
+%
+% \begin{macro}{\cntdwnopts}
+% Sets the appearances, using \textsf{eforms}, for the interactive buttons
+% \cs{cntdwnStartT}, \cs{cntdwnPauseT}, and \cs{cntdwnStopT}
+% \begin{macrocode}
+\newcommand{\cntdwnopts}[1]{\TU{#1}\H{N}\S{S}\BG{}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\cntdwnDisplay}
+% Displays the count of the (short) countdown.
+% \begin{macrocode}
+\newcommand{\cntdwnDisplay}[4][]{%
+ \expandafter\ifnum\csname#2@autorun\endcsname=1\relax
+ \def\autorun@presets{%
+ \AA{\AAPageOpen{if (!\CDO#2.isCounting&&!\CDO#2.bNotify4)
+ sStartTimer(\CDO#2);}}}\else
+ \let\autorun@presets\@empty\fi
+ \textField[\Ff\FfReadOnly\Q{1}#1\presets{\autorun@presets}
+ ]{\CDO#2.cntdwn.TimeRemaining}{#3}{#4}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\cntdwnStartT}
+% This start button does three things, pushing it starts/resumes the count, shift-clicking
+% starts the count over from the beginning, when the count reaches the first notification
+% time, the button turns green.
+% \begin{macrocode}
+\newcommand{\cntdwnStartT}[4][]{%
+ \pushButton[\presets{\cntdwnopts{Start}}
+ \A{\JS{sStartTimer(\CDO#2);}}#1]{\CDO#2.cntdwn.Notify1}{#3}{#4}}
+% \end{macrocode}
+% \begin{macro}{\cntdwnStart}
+% This button has the same features as \cs{cntdwnStartT} except it is not the target
+% of the code, that is, it \emph{does not turn green} when the first notification time is reached.
+% \begin{macrocode}
+\newcommand{\cntdwnStart}[4][]{%
+ \pushButton[\TU{Start}\A{\JS{sStartTimer(\CDO#2);}}#1
+ ]{\CDO#2.cntdwn.Start}{#3}{#4}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\cntdwnPauseT}
+% This pause button does two things, pushing it pauses the count
+% when the count reaches the second notification
+% time, the button turns yellow.
+% \begin{macrocode}
+\newcommand{\cntdwnPauseT}[4][]{%
+ \pushButton[\presets{\cntdwnopts{Pause}}
+ \A{\JS{sPauseTimer(\CDO#2);}}#1
+ ]{\CDO#2.cntdwn.Notify2}{#3}{#4}}
+% \end{macrocode}
+% \begin{macro}{\cntdwnPause}
+% This button has the same features as \cs{cntdwnPauseT} except it is not the target
+% of the code, that is, it \emph{does not turn yellow} when the second notification time is reached.
+% \begin{macrocode}
+\newcommand{\cntdwnPause}[4][]{%
+ \pushButton[\TU{Pause}\A{\JS{sPauseTimer(\CDO#2);}}#1
+ ]{\CDO#2.cntdwn.Pause}{#3}{#4}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\cntdwnStopT}
+% This stop button does two things, pushing it stops the count
+% and clears `End' fields. When the count reaches the third notification
+% time, the button turns blinks red, and when the end of the time limit
+% is reached, it turns solid red.
+% \begin{macrocode}
+\newcommand{\cntdwnStopT}[4][]{%
+ \pushButton[\presets{\cntdwnopts{Stop}}
+ \A{\JS{sStopTimer(\CDO#2);}}#1
+ ]{\CDO#2.cntdwn.Notify3}{#3}{#4}}
+% \end{macrocode}
+% \begin{macro}{\cntdwnStop}
+% This button has the same features as \cs{cntdwnStopT} except it is not the target
+% of the code, that is, it \emph{does not turn red} when the second notification time is reached.
+% \begin{macrocode}
+\newcommand{\cntdwnStop}[4][]{%
+ \pushButton[\TU{Stop}\A{\JS{sStopTimer(\CDO#2);}}#1
+ ]{\CDO#2.cntdwn.Stop}{#3}{#4}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\cntdwnEndTarget}
+% The default end of time event (\texttt{EndOfTime}) sends a message to a multiline
+% text field. That field can be constructed using \cs{cntdwnEndTarget}
+% \begin{macrocode}
+\newcommand{\cntdwnEndTarget}[4][]{%
+ \textField[\Ff\FfReadOnly\Ff\FfMultiline#1
+ ]{\CDO#2.cntdwn.End}{#3}{#4}}
+% \end{macrocode}
+% \end{macro}
+% \subsection{Defining a short countdown}
+% \begin{macro}{\setShortCntDwn}
+% Use this command to define a timer. It takes two arguments: (1) the name of the timer,
+% which must be unique among all named timers; (2) key-value pairs that define the
+% details of the timer.
+% \begin{macrocode}
+\newcommand{\setShortCntDwn}[2]{\begingroup
+ \@ifundefined{#1@timername}{\cntdwn@namegdef{#1@timername}{#1}}%
+ {\PackageError{cntdwn}{The name `#1' is already defined as a timer
+ variable.}{Choose a unique timer variable name,
+ one different from `#1'.}}%
+ \def\seconds{_oTime.second}\def\minutes{_oTime.minute}%
+ \def\hours{_oTime.hour}%
+ \setkeys{cntdwn}{endmsg,#2}%
+ \cntdwn@namexdef{#1@autorun}{\ctndwn@autorun}%
+% \end{macrocode}
+% An object that holds countdown data. The values in this object are
+%\begin{itemize}
+% \item \texttt{length} $=$ length of the countdown (countup) in minutes
+% \item \texttt{notify1} $=$ time (in minutes) when the first notification is given
+% \item \texttt{notify2} $=$ time (in minutes) when the second notification is given
+% \item \texttt{notify3} $=$ time (in minutes) when the third notification is given
+% \item \texttt{refreshrate} $=$ time (in milliseconds) to refresh (default is 1000)
+% \item \texttt{event1} $=$ the value of this key is a function that is executed when the first notification point is reached
+% \item \texttt{event2} $=$ the value of this key is a function that is executed when the second notification point is reached
+% \item \texttt{event3} $=$ the value of this key is a function that is executed when the third notification point is reached
+% \item \texttt{endEvent} $=$ the value of this key is a function that is executed when the countdown is completed
+%\end{itemize}
+% \begin{macrocode}
+ \def\r{^^J}\def\t{\space\space\space\space}%
+ \cntdwn@namexdef{#1TimerObject}{%
+% \end{macrocode}
+% We build the timer object that contains all the data for running a timer.
+% \begin{macrocode}
+ var _o#1 = {\r\t
+ name: "_o#1",\r\t
+ length: \cntdwn@length,\r\t
+ timeleft: \cntdwn@length,\r\t
+ notify1: \cntdwn@notifyi,\r\t
+ notify2: \cntdwn@notifyii,\r\t
+ notify3: \cntdwn@notifyiii,\r\t
+ refreshrate: \cntdwn@refreshrate,\r\t
+ event1: "\cntdwn@eventi",\r\t
+ event2: "\cntdwn@eventii",\r\t
+ event3: "\cntdwn@eventiii",\r\t
+ endEvent: "\cntdwn@eventiv",\r\t
+ weStopOnEnd: \cntdwn@ifstop,\r\t
+ isStopwatch: \isStopwatch,\r\t
+ startcolor: \cntdwn@startcolor,\r\t
+ pausecolor: \cntdwn@pausecolor,\r\t
+ stopcolor: \cntdwn@stopcolor,\r\t
+ endMsg: "\cntdwn@endmsg",\r\t
+% \end{macrocode}
+% The keys above are determined by \cs{setShortCntDwn}, the ones below have constant
+% initial values.
+% \begin{macrocode}
+ bNotify1:false,\r\t
+ bNotify2:false,\r\t
+ bNotify3:false,\r\t
+ bNotify4:false,\r\t
+ isCounting:false,\r\t
+ bBlinkOn:false,\r\t
+ startTime:0,\r\t
+ pauseTime:0,\r\t
+ EndOfTime:0,\r\t
+ blinkTimeOut:null,\r\t
+ timeout:null\r
+ };
+ }%
+% \end{macrocode}
+% Once the macro is defined, we add it to \cs{cntdwnlTimers}.
+% \begin{macrocode}
+ \ifx\cntdwnlTimers\@empty
+ \else\g@addto@macro\cntdwnlTimers{^^J}\fi
+ \expandafter\g@addto@macro\expandafter\cntdwnlTimers
+ \expandafter{\csname#1TimerObject\endcsname}%
+% \end{macrocode}
+% We also create an associative array named \texttt{aTimers}, here we
+% add the name of the timer to the array.
+% \begin{macrocode}
+ \ifx\cntdwnaTimers\@empty\else\g@addto@macro\cntdwnaTimers{^^J}\fi
+ \g@addto@macro\cntdwnaTimers{aTimers["_o#1"]=_o#1;}%
+ \endgroup}
+\def\thetimername#1{\csname#1@timername\endcsname}
+% \end{macrocode}
+% We require \cs{setShortCntDwn} to be executed only in the preamble, as this
+% command updates the JavaScript code found below.
+% \begin{macrocode}
+\@onlypreamble\setShortCntDwn
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{Key-value Pairs for \texorpdfstring{\cs{setShortCntDwn}}
+% {\textbackslash{setShortCntDwn}}}
+% We define the key-value pairs for \cs{setShortCntDwn}.
+%\par\medskip
+% \DescribeMacro{stopwatch} Determines whether the counter counts up or down.
+% The key \texttt{stopwatch} cause the counter to count up; the default is to
+% countdown (\texttt{stopwatch=false}).
+% \begin{macrocode}
+\define@boolkey{cntdwn}{stopwatch}[true]{%
+ \edef\isStopwatch{\ifKV@cntdwn@stopwatch true\else false\fi}}
+% \end{macrocode}
+% \DescribeMacro{autorun} A boolean, if true, the counter automatically
+% starts when the page is open that contains the counter display
+% (\cs{cntdwnDisplay})
+% \begin{macrocode}
+\define@boolkey{cntdwn}{autorun}[true]{%
+ \edef\ctndwn@autorun{\ifKV@cntdwn@autorun1\else0\fi}}
+% \end{macrocode}
+% \DescribeMacro{length} The length of the count in minutes.
+% \begin{macrocode}
+\define@key{cntdwn}{length}[20*\minutes]{\def\cntdwn@length{#1}}
+% \end{macrocode}
+% \DescribeMacro{notify1}\DescribeMacro{notify2}\DescribeMacro{notify3}
+% \texttt{notify1}, \texttt{notify2}, \texttt{notify2} measured in minutes.
+% When the timer countdowns, we should have \texttt{notify1>notify2>notify3};
+% when counting up, we should have \texttt{notify1<notify2<notify3}.
+% \begin{macrocode}
+\define@key{cntdwn}{notify1}[5*\minutes]{\def\cntdwn@notifyi{#1}}
+\define@key{cntdwn}{notify2}[3*\minutes]{\def\cntdwn@notifyii{#1}}
+\define@key{cntdwn}{notify3}[1*\minutes]{\def\cntdwn@notifyiii{#1}}
+% \end{macrocode}
+% \DescribeMacro{refreshrate} is the refresh rate of the counter, measured in
+% milliseconds. The default is 1000 (1 seconds).
+% \begin{macrocode}
+\define@key{cntdwn}{refreshrate}[1000]{\def\cntdwn@refreshrate{#1}}
+% \end{macrocode}
+% \DescribeMacro{event1}\DescribeMacro{event2}\DescribeMacro{event3}\DescribeMacro{endEvent}
+% When the first, second, third notifications are reached
+% (\texttt{notify1}, \texttt{notify2}, and \texttt{notify3}), events
+% (JavaScript functions) are executed. \textsf{Cntdwn} provides default events,
+% \texttt{sDefNotify1}, \texttt{sDefNotify2}, \texttt{sDefNotify3}, and \texttt{sDefEndEvent},
+% which are defined below in the JavaScript section.
+% \begin{macrocode}
+% events, values are JavaScript function names
+\define@key{cntdwn}{event1}[sDefNotify1]{\def\cntdwn@eventi{#1}}
+\define@key{cntdwn}{event2}[sDefNotify2]{\def\cntdwn@eventii{#1}}
+\define@key{cntdwn}{event3}[sDefNotify3]{\def\cntdwn@eventiii{#1}}
+\define@key{cntdwn}{endEvent}[sDefEndEvent]{\def\cntdwn@eventiv{#1}}
+% \end{macrocode}
+% \DescribeMacro{onfinish} determines what happens to the counter when
+% the time is up. This is a choice key, the permissible values are \texttt{stop}
+% and \texttt{continue}.
+% \begin{macrocode}
+\define@choicekey{cntdwn}{onfinish}[\val\nr]{stop,continue}[stop]{%
+ \ifcase\nr\relax\def\cntdwn@ifstop{true}\or
+ \def\cntdwn@ifstop{false}\fi}
+% \end{macrocode}
+%\DescribeMacro{startcolor}\DescribeMacro{pausecolor}\DescribeMacro{stopcolor}
+% Alert colors for countdown. The values are JavaScript colors.
+% \begin{macrocode}
+\define@key{cntdwn}{startcolor}[color.green]{%
+ \def\cntdwn@startcolor{#1}}
+\define@key{cntdwn}{pausecolor}[color.yellow]{%
+ \def\cntdwn@pausecolor{#1}}
+\define@key{cntdwn}{stopcolor}[color.red]{\def\cntdwn@stopcolor{#1}}
+\newcommand{\cnddwnDefaultEndMsg}{This ends the
+ Presentation, any questions?}
+\define@key{cntdwn}{endmsg}[\cnddwnDefaultEndMsg]{%
+ \def\cntdwn@endmsg{#1}}
+% \end{macrocode}
+% We set the default values of all timers.
+% \begin{macrocode}
+\setkeys{cntdwn}{stopwatch=false,onfinish,length,%
+ notify1,notify2,notify3,refreshrate,startcolor,pausecolor,%
+ stopcolor,event1,event2,event3,endEvent,autorun=false,endmsg}
+% \end{macrocode}
+% \begin{macrocode}
+\begin{insDLJS*}[shrtcntdwn]{shrtcntdwn}
+% \end{macrocode}
+% \begin{macrocode}
+\begin{newsegment}{CntDwn: Countdown JavaScript}
+% \end{macrocode}
+% \subsection{JavaScript for the short countdown}
+% \DescribeEnv{shrtcntdwn} This is the function that performs the countdown.
+% \begin{macrocode}
+function shrtcntdwn(cTimer){
+ var oTimer=aTimers[cTimer];
+ var _delta,nDays,pDays,nHours,pHours,nMinutes,
+ pMinutes,nSeconds,pSeconds,timeValue,isEndReached;
+ _delta=(oTimer.isStopwatch)?new Date()%
+-new Date(oTimer.startTime):new Date(oTimer.EndOfTime)-new Date();
+ oTimer.timeleft=_delta;
+ _delta=(_delta<0)?-_delta:_delta;
+ this.delay=true;
+ nDays = Math.floor(_delta/_oTime.day);
+ pDays = _delta\%_oTime.day;
+ nHours = Math.floor(pDays/_oTime.hour);
+ pHours = pDays\%_oTime.hour;
+ nMinutes = Math.floor(pHours/_oTime.minute );
+ pMinutes = pHours\%_oTime.minute;
+ nSeconds = Math.floor(pMinutes/_oTime.second);
+ pSeconds = pMinutes\%_oTime.second;
+% \end{macrocode}
+% Calculate the time remaining, prefixing single digit numbers with a zero
+% \begin{macrocode}
+ timeValue=((nHours>=1)?((nHours<10)?"0":"")+nHours+":":"")
+ +((nMinutes<10)?"0":"")+nMinutes
+ +":"+((nSeconds<10)?"0":"")+nSeconds;
+ try { this.getField(oTimer.name%
++".cntdwn.TimeRemaining").value= timeValue; }
+ catch(e) {};
+% \end{macrocode}
+% If the difference is negative, we've reached the end of the time period
+% \begin{macrocode}
+ isEndReached=(oTimer.isStopwatch)?oTimer.timeleft>oTimer.length%
+:oTimer.timeleft< 0;
+ if ( isEndReached && !oTimer.bNotify4) {
+ oTimer.bNotify4=true;
+ eval(oTimer.endEvent)(this,cTimer);
+ if (oTimer.weStopOnEnd) {
+ oTimer.isCounting=false;
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+ }
+ try { app.clearInterval(oTimer.blinkTimeOut);
+ oTimer.blinkTimeOut=null; } catch(e){};
+ this.delay=false;this.dirty=false;
+ if (oTimer.weStopOnEnd) return;
+ }
+% \end{macrocode}
+% If difference has reached one of our thresholds, run the notify event action
+% \begin{macrocode}
+ if (oTimer.isStopwatch) {
+ if (!oTimer.bNotify1&&(_delta>oTimer.notify1))
+ {oTimer.bNotify1=true;eval(oTimer.event1)(this,cTimer);}
+ if (!oTimer.bNotify2&&(_delta>oTimer.notify2))
+ {oTimer.bNotify2=true;eval(oTimer.event2)(this,cTimer);}
+ if (!oTimer.bNotify3&&(_delta>oTimer.notify3))
+ {oTimer.bNotify3=true;eval(oTimer.event3)(this,cTimer);}
+ } else {
+ if (!oTimer.bNotify1&&(_delta<oTimer.notify1))
+ {oTimer.bNotify1=true;eval(oTimer.event1)(this,cTimer);}
+ if (!oTimer.bNotify2&&(_delta<oTimer.notify2))
+ {oTimer.bNotify2=true;eval(oTimer.event2)(this,cTimer);}
+ if (!oTimer.bNotify3&&(_delta<oTimer.notify3))
+ {oTimer.bNotify3=true;eval(oTimer.event3)(this,cTimer);}
+ }
+ this.delay=false;this.dirty=false;
+}
+% \end{macrocode}
+% \DescribeEnv{sDefNotify1} The default first notification event.
+% \begin{macrocode}
+function sDefNotify1(doc,cTimer) {
+ var oTimer=aTimers[cTimer];
+ var f = doc.getField(cTimer+".cntdwn.Notify1");
+ if (f!=null) f.fillColor = oTimer.startcolor;
+ app.beep();
+}
+% \end{macrocode}
+% \DescribeEnv{sDefNotify2} The default second notification event.
+% \begin{macrocode}
+function sDefNotify2(doc,cTimer) {
+ var oTimer=aTimers[cTimer];
+ var f = doc.getField(cTimer+".cntdwn.Notify2");
+ if (f!=null) f.fillColor = oTimer.pausecolor;
+ app.beep();
+}
+% \end{macrocode}
+% \DescribeEnv{sDefNotify3} The default third notification event.
+% \begin{macrocode}
+function sDefNotify3(doc,cTimer) {
+ var oTimer=aTimers[cTimer];
+ app.beep();
+ var f = doc.getField(cTimer+".cntdwn.Notify3");
+ if ( f!=null)
+ oTimer.blinkTimeOut=app.setInterval(%
+"_sBlinkRed(\""+cTimer+"\")",500);
+}
+% \end{macrocode}
+% \DescribeEnv{\_sBlinkRed} The default event \texttt{sDefNotify3} calls this function
+% to blink the third notification field.
+% \begin{macrocode}
+function _sBlinkRed(cTimer) {
+ var oTimer=aTimers[cTimer];
+ var f=this.getField(cTimer+".cntdwn.Notify3");
+ f.fillColor = ( oTimer.bBlinkOn )?color.white:oTimer.stopcolor;
+ oTimer.bBlinkOn=!oTimer.bBlinkOn;
+ this.dirty=false;
+}
+% \end{macrocode}
+% \DescribeEnv{sDefEndEvent} The default event of the end of the countdown. This function
+% is fired when the count is completed.
+% This function performs an end of countdown action,
+% here we populate a field announcing the end of the countdown. An animation is
+% possible here too.
+% \begin{macrocode}
+function sDefEndEvent(doc,cTimer) {
+ var oTimer=aTimers[cTimer];
+ var f=doc.getField(cTimer+".cntdwn.Notify3");
+ if (f!=null) f.fillColor = oTimer.stopcolor;
+ f=doc.getField(cTimer+".cntdwn.End");
+ if (f!=null) f.value = oTimer.endMsg;
+}
+% \end{macrocode}
+% \DescribeEnv{sPauseTimer} Pause the timer.
+% \begin{macrocode}
+function sPauseTimer(oTimer) {
+ oTimer.isCounting=false;
+ oTimer.pauseTime=new Date().valueOf();
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+}
+% \end{macrocode}
+% \DescribeEnv{sStopTimer} Stop the timer.
+% \begin{macrocode}
+function sStopTimer(oTimer) {
+ oTimer.isCounting=false;
+ oTimer.startTime=oTimer.pauseTime=0;
+ oTimer.timeleft=oTimer.length;
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+ try { app.clearInterval(oTimer.blinkTimeOut);
+ oTimer.blinkTimeOut=null; } catch(e){};
+ try { this.getField(oTimer.name%
++".cntdwn.Notify1").fillColor = color.white; } catch(e) {}
+ try { this.getField(oTimer.name%
++".cntdwn.Notify2").fillColor = color.white; } catch(e) {}
+ try { this.getField(oTimer.name%
++".cntdwn.Notify3").fillColor = color.white; } catch(e) {}
+ oTimer.bNotify1=oTimer.bNotify2=oTimer.bNotify3%
+=oTimer.bNotify4=false;
+ this.resetForm([oTimer.name]);
+ this.dirty=false;
+}
+% \end{macrocode}
+% \DescribeEnv{sStartTimer} Start the timer.
+% \begin{macrocode}
+function sStartTimer(oTimer) {
+ if (oTimer.isCounting) return;
+ oTimer.isCounting=true;
+ if (oTimer.startTime == 0 || (event.shift) %
+|| (oTimer.weStopOnEnd&&oTimer.bNotify4) ){
+ sStopTimer(oTimer);
+ oTimer.startTime=new Date().valueOf();
+ }
+ oTimer.pauseTime=(oTimer.pauseTime==0)?0:new Date()%
+-new Date(oTimer.pauseTime)+oTimer.refreshrate;
+ oTimer.startTime+=oTimer.pauseTime;
+ if (oTimer.isStopwatch)
+ oTimer.EndOfTime=oTimer.startTime+((event.shift)?oTimer.length%
+:oTimer.timeleft);
+ else
+ oTimer.EndOfTime=new Date().valueOf()%
++((event.shift)?oTimer.length:oTimer.timeleft);
+ oTimer.timeout=app.setInterval(%
+"shrtcntdwn(\""+oTimer.name+"\")",oTimer.refreshrate);
+}
+\end{newsegment}
+\end{insDLJS*}
+%</shortcnt>
+%<*lngcnt>
+% \end{macrocode}
+% \section{Long Countdown Commands}
+% In this section, we countdown to a future event, or count-up from a previous event. These are
+% long countdowns, measured in years, days, hours, minutes, and seconds. We also define a clock
+% timer.
+%
+% \subsection{Define a long countdown}
+%
+% The author can optionally show the current time/date, and the target time/date. The required
+% field is the one that displays the countdown.
+%
+% \begin{macro}{\lcntdwnDisplay} This field is the target of the countdown. It holds
+% the current formatted countdown.
+% \begin{macrocode}
+\newcommand{\lcntdwnDisplay}[4][]{%
+ \let\autorun@presets\@empty
+ \expandafter\ifnum\csname#2@autorun\endcsname=1\relax
+ \edef\autorun@presets{%
+ \AAPageOpen{if (\CDO#2.bAutorunEnabled && \CDO#2.timeout==null) lStartTimer(\CDO#2);}}\fi
+ \expandafter\ifnum\csname#2@autopause\endcsname=1\relax
+ \edef\autorun@presets{\autorun@presets
+ \AAPageClose{if (\CDO#2.timeout!=null) lcntdwnPause(\CDO#2);}}\fi
+ \edef\autorun@presets{\noexpand\AA{\autorun@presets}}%
+ \textField[\Ff\FfReadOnly\textSize{0}#1
+ \presets{\autorun@presets}]%
+ {\CDO#2.lcntdwn.timeToFromEvent}{#3}{#4}}
+% \end{macrocode}
+% \end{macro}
+% \DescribeMacro{\lcntdwnToggle} A simple button to toggle the count off and one.
+% \begin{macrocode}
+\newcommand{\lcntdwnToggle}[4][]{%
+ \pushButton[\TU{Toggle Countdown}\A{\JS{lcntdwnToggle(\CDO#2);}}#1
+ ]{\CDO#2.lcntdwn.Toggle}{#3}{#4}}
+% \end{macrocode}
+% \begin{macro}{\setLongCntDwn}
+% Use this command to define a timer. It takes two arguments: (1) the name of the timer,
+% which must be unique among all named timers; (2) key-value pairs that define the
+% details of the timer.
+% \begin{macrocode}
+\newcommand{\setLongCntDwn}[2]{\begingroup
+ \@ifundefined{#1@timername}{\cntdwn@namegdef{#1@timername}{#1}}%
+ {\PackageError{cntdwn}{The name `#1' is already defined as a timer
+ variable.}{Choose a unique timer variable name,
+ one different from `#1'.}}%
+ \setkeys{lcntdwn}{date,endmsg,#2}%
+ \def\seconds{_oTime.second}\def\minutes{_oTime.minute}%
+ \def\hours{_oTime.hour}\def\days{_oTime.day}%
+ \def\weeks{7*_oTime.day}\def\years{_oTime.year}%
+ \cntdwn@namexdef{#1@autorun}{\lctndwn@autorun}%
+ \cntdwn@namexdef{#1@autopause}{\lctndwn@autopause}%
+ \ifx\lcntdwn@date\@empty\def\lcntdwn@date{1970/01/01}%
+ \PackageWarning{cntdwn}{!!Beware!!
+ The `date' key was not supplied,\MessageBreak
+ using the default date 1970/01/01}\fi
+ \def\r{^^J}\def\t{\space\space\space\space}%
+ \cntdwn@namexdef{#1TimerObject}{%
+% \end{macrocode}
+% We build the timer object that contains all the data for running a timer.
+% \begin{macrocode}
+ var _o#1 = {\r\t
+ name: "_o#1",\r\t
+ pdfdate:"D:\lcntdwn@date\lcntdwn@time\lcntdwn@tz",\r\t
+ target: null,\r\t
+ refreshrate: 1000,\r\t
+ notify1: \lcntdwn@notifyi,\r\t
+ notify2: \lcntdwn@notifyii,\r\t
+ notify3: \lcntdwn@notifyiii,\r\t
+ notify5: \lcntdwn@notifyv,\r\t
+ notify6: \lcntdwn@notifyvi,\r\t
+ notify7: \lcntdwn@notifyvii,\r\t
+ eventhandler: "\lcntdwn@eventhandler",\r\t
+ refreshrate: \lcntdwn@refreshrate,\r\t
+ timedateFunc: "\lcntdwn@timedateFunc",\r\t
+ displayfunc: "\lcntdwn@displayfunc",\r\t
+ endtimecolor: \cntdwn@endtimecolor,\r\t
+ weStopOnEnd: \lcntdwn@ifstop,\r\t
+ endMsg: "\lcntdwn@endmsg",\r\t
+ bAutorunEnabled:\lcntdwn@autorunenabled,\r\t
+% \end{macrocode}
+% The keys above are determined by \cs{setLongCntDwn}, the ones below have constant
+% initial values.
+% \begin{macrocode}
+ bNotify1:false,\r\t
+ bNotify2:false,\r\t
+ bNotify3:false,\r\t
+ bNotify4:false,\r\t
+ bNotify5:false,\r\t
+ bNotify6:false,\r\t
+ bNotify7:false,\r\t
+ lastSignDelta:1,\r\t
+ timeout:null\r
+ };
+ }%
+% \end{macrocode}
+% Once the macro is defined, we add it to \cs{cntdwnlTimers}.
+% \begin{macrocode}
+ \ifx\cntdwnlTimers\@empty
+ \else\g@addto@macro\cntdwnlTimers{^^J}\fi
+ \expandafter\g@addto@macro\expandafter\cntdwnlTimers
+ \expandafter{\csname#1TimerObject\endcsname}%
+% \end{macrocode}
+% We also create an associative array named \texttt{aTimers}, here we
+% add the name of the timer to the array.
+% \begin{macrocode}
+ \ifx\cntdwnaTimers\@empty\else\g@addto@macro\cntdwnaTimers{^^J}\fi
+ \g@addto@macro\cntdwnaTimers{aTimers["_o#1"]=_o#1;}%
+ \endgroup}
+% \end{macrocode}
+% \subsubsection{Key-value Pairs for \texorpdfstring{\cs{setLongCntDwn}}{\textbackslash{setLongCntDwn}}}
+% \end{macro}
+% In the next segment, we parse the \texttt{date} value.
+% \begin{macrocode}
+\def\@lcntdwn@parse@YYYY#1#2#3#4{%
+ {\count0=#1\relax\count0=#2\relax
+ \count0=#3\relax\count0=#4\relax}%
+ \def\lcntdwn@date{#1#2#3#4}%
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar/{\expandafter\@lcntdwn@parse@MM\@gobble}%
+ {\def\lcntdwn@date{#1#2#3#4}}}%
+}
+\def\@lcntdwn@parse@MM#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@date{\lcntdwn@date#1#2}%
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar/{\expandafter\@lcntdwn@parse@DD\@gobble}%
+ {\edef\lcntdwn@date{\lcntdwn@date#1#2}}}%
+}
+\def\@lcntdwn@parse@DD#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@date{\lcntdwn@date#1#2}%
+ \@gobbletonil
+}
+% \end{macrocode}
+% In the next segment, we parse the \texttt{time} value.
+% \begin{macrocode}
+\def\@lcntdwn@parse@HH#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \def\lcntdwn@time{#1#2}
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar:{\expandafter\@lcntdwn@parse@mm\@gobble}%
+ {\def\lcntdwn@time{#1#2}}}%
+}
+\def\@lcntdwn@parse@mm#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@time{\lcntdwn@time#1#2}%
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar:{\expandafter\@lcntdwn@parse@SS\@gobble}%
+ {\edef\lcntdwn@time{\lcntdwn@time#1#2}}}%
+}
+\def\@lcntdwn@parse@SS#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@time{\lcntdwn@time#1#2}%
+ \@gobbletonil
+}
+% \end{macrocode}
+% In the next segment, we parse the \texttt{timezone} value.
+% \begin{macrocode}
+% offset from UTC Z|[+-]HHMM
+\def\tz@Z{Z}\def\tz@p{+}\def\tz@m{-}
+\def\lcntdwn@parse@tz{\@ifnextchar\@nil
+ {\let\lcntdwn@tz\@empty}{\@lcntdwn@parse@tz}%
+}
+\def\@lcntdwn@parse@tz#1{%
+ \def\argi{#1}\ifx\argi\tz@Z
+ \def\lcntdwn@tz{Z}\def\@next{\@gobbletonil}%
+ \else\ifx\argi\tz@p\def\lcntdwn@tz{+}%
+ \def\@next{\tz@gethrs}\else
+ \ifx\argi\tz@m\def\lcntdwn@tz{-}%
+ \def\@next{\tz@gethrs}\else
+ \let\lcntdwn@tz\@empty\def\@next{\@gobbletonil}%
+ \fi\fi\fi\@next
+}
+\def\@gobbletonil#1\@nil{}
+\def\tz@gethrs#1#2{{\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@tz{\lcntdwn@tz#1#2'}%
+ \@ifnextchar\@nil{\@gobbletonil}{\tz@getmnts}}
+\def\tz@getmnts#1#2{{\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@tz{\lcntdwn@tz#1#2'}\@gobbletonil}
+% \end{macrocode}
+% \begin{macrocode}
+% YYYY/MM/DD
+\define@key{lcntdwn}{date}[]{%
+ \edef\argi{#1}\ifx\argi\@empty
+ \def\lcntdwn@date{}\let\@next\relax\else
+ \def\@next{\expandafter\@lcntdwn@parse@YYYY\argi\@nil}\fi
+ \@next
+}
+% HH:MM:SS
+\define@key{lcntdwn}{time}[]{%
+ \edef\argi{#1}\ifx\argi\@empty
+ \let\lcntdwn@time\@empty\let\@next\relax\else
+ \def\@next{\expandafter\@lcntdwn@parse@HH\argi\@nil}\fi
+ \@next
+}
+% offset from UTC Z|[+-]HHMM
+\define@key{lcntdwn}{tzoffset}[]{%
+ \def\argi{#1}\ifx\argi\@empty
+ \let\lcntdwn@tz\@empty\let\@next\relax\else
+ \def\@next{\lcntdwn@parse@tz#1\@nil}\fi
+ \@next
+}
+\define@boolkey{lcntdwn}{autorun}[true]{%
+ \edef\lctndwn@autorun{\ifKV@lcntdwn@autorun1\else0\fi}}
+\define@boolkey{lcntdwn}{autopause}[true]{%
+ \edef\lctndwn@autopause{\ifKV@lcntdwn@autopause1\else0\fi}}
+\define@boolkey{lcntdwn}{autorunenabled}[true]{%
+ \edef\lcntdwn@autorunenabled{\ifKV@lcntdwn@autorunenabled
+ true\else false\fi}}
+% \end{macrocode}
+% \DescribeMacro{notify1}\DescribeMacro{notify2}\DescribeMacro{notify3}
+% \DescribeMacro{notify5}\DescribeMacro{notify6}\DescribeMacro{notify7}
+% \texttt{notify1}, \texttt{notify2}, \texttt{notify2} are pre-event times.
+% The times must satisfy the relation\texttt{notify1>notify2>notify3}.
+% \texttt{notify5}, \texttt{notify6}, and \texttt{notify7}
+% are post-event times, the must satisf \texttt{notify5<notify6<notify7}.
+% Times are relative to the main event (time 0).
+% \begin{macrocode}
+\define@key{lcntdwn}{notify1}[null]{\def\lcntdwn@notifyi{#1}}
+\define@key{lcntdwn}{notify2}[null]{\def\lcntdwn@notifyii{#1}}
+\define@key{lcntdwn}{notify3}[null]{\def\lcntdwn@notifyiii{#1}}
+\define@key{lcntdwn}{notify5}[null]{\def\lcntdwn@notifyv{#1}}
+\define@key{lcntdwn}{notify6}[null]{\def\lcntdwn@notifyvi{#1}}
+\define@key{lcntdwn}{notify7}[null]{\def\lcntdwn@notifyvii{#1}}
+% \end{macrocode}
+% \begin{environment}{eventhandler}
+% The JavaScript function that handles
+% the event of reaching one of the notification time values.
+% \begin{macrocode}
+% events, values are JavaScript function names
+\define@key{lcntdwn}{eventhandler}[_NoOpt]{%
+ \def\lcntdwn@eventhandler{#1}}
+% \end{macrocode}
+% \end{environment}
+% \DescribeMacro{refreshrate} is the refresh rate of the counter, measured in
+% milliseconds. The default is 1000 (1 second).
+% \begin{macrocode}
+\define@key{lcntdwn}{refreshrate}[1000]{\def\lcntdwn@refreshrate{#1}}
+% \end{macrocode}
+% \DescribeMacro{currtimefunc} This keys allows a document author to define his/her
+% own JS function to display the time and date. The default is to show time and
+% date in separate fields.
+% \begin{macrocode}
+\define@key{lcntdwn}{currtimefunc}[_defaultTimeDateFunc]{%
+ \def\lcntdwn@timedateFunc{#1}}
+% \end{macrocode}
+% \DescribeMacro{displayfunc} This key allows you to define how the display the countdown.
+% Use a clock timer defined by \cs{setClockTimer}, not supported by timers created by
+% \cs{setLongCntDwn}.
+% \begin{macrocode}
+\define@key{lcntdwn}{displayfunc}[_defaultLDisplayFunc]{%
+ \def\lcntdwn@displayfunc{#1}}
+% \end{macrocode}
+% \DescribeMacro{endtimecolor} The color of the count changes when the end time value is reached.
+% the default is \texttt{color.red}, use this key to change the default color.
+% \begin{macrocode}
+\define@key{lcntdwn}{endtimecolor}[color.red]{%
+ \def\cntdwn@endtimecolor{#1}}
+% \end{macrocode}
+% \DescribeMacro{onfinish} A choice key to determine how the timer behave when the
+% end time is reached. Choices are \texttt{stop} or \texttt{continue} (the default).
+% \begin{macrocode}
+\define@choicekey{lcntdwn}{onfinish}[\val\nr]{stop,continue}[stop]{%
+ \ifcase\nr\relax\def\lcntdwn@ifstop{true}\or
+ \def\lcntdwn@ifstop{false}\fi}
+% \end{macrocode}
+% \DescribeMacro{endmsg} When \texttt{onfinish=stop} a message appears in the
+% display, the default message is ``The time has expired.'' This message may be
+% change locally by this key, or globally by redefining the command
+% \cs{lcnddwnDefaultEndMsg}.
+% \begin{macrocode}
+\newcommand{\lcnddwnDefaultEndMsg}{The time has expired}
+\define@key{lcntdwn}{endmsg}[\lcnddwnDefaultEndMsg]{%
+ \def\lcntdwn@endmsg{#1}}
+% \end{macrocode}
+% \paragraph*{Set the defaults for the long countdown}
+% \begin{macrocode}
+\setkeys{lcntdwn}{time,tzoffset,refreshrate,autorun,autopause,%
+ autorunenabled,notify1,notify2,notify3,notify5,notify6,notify7,%
+ eventhandler,endtimecolor,displayfunc,currtimefunc,%
+ onfinish=continue,endmsg}
+% \end{macrocode}
+% \subsection{Creating a clock}
+% A clock is a special timer what displays the current time and date.
+% Clocks defined by \cs{setClockTimer} show local time, by default, but
+% can also show time/date in other time zones.
+% \begin{macro}{\setClockTimer}
+% Set the name and key-value pairs that describe the properties of this clock.
+% \begin{macrocode}
+\newcommand{\setClockTimer}[2]{\begingroup
+ \@ifundefined{#1@timername}{\cntdwn@namegdef{#1@timername}{#1}}%
+ {\PackageError{cntdwn}{The name `#1' is already defined as a timer
+ variable.}{Choose a unique timer variable name,
+ one different from `#1'.}}%
+ \setkeys{lcntdwn}{#2}%
+ \def\seconds{_oTime.second}\def\minutes{_oTime.minute}%
+ \def\hours{_oTime.hour}\def\days{_oTime.day}%
+ \def\weeks{7*_oTime.day}\def\years{_oTime.year}%
+ \cntdwn@namexdef{#1@autorun}{\lctndwn@autorun}%
+ \cntdwn@namexdef{#1@autopause}{\lctndwn@autopause}%
+% \end{macrocode}
+% \begin{macrocode}
+ \def\r{^^J}\def\t{\space\space\space\space}%
+ \cntdwn@namexdef{#1TimerObject}{%
+% \end{macrocode}
+% We build the clock timer object that contains all the data for running the clock.
+% \begin{macrocode}
+ var _o#1 = {\r\t
+ name: "_o#1",\r\t
+ tzoffset:"\lcntdwn@tz",\r\t
+ refreshrate: \lcntdwn@refreshrate,\r\t
+ timedateFunc: "\lcntdwn@timedateFunc",\r\t
+ timeout:null\r
+ };
+ }%
+% \end{macrocode}
+% Once the macro is defined, we add it to \cs{cntdwnlTimers}.
+% \begin{macrocode}
+ \ifx\cntdwnlTimers\@empty
+ \else\g@addto@macro\cntdwnlTimers{^^J}\fi
+ \expandafter\g@addto@macro\expandafter\cntdwnlTimers
+ \expandafter{\csname#1TimerObject\endcsname}%
+% \end{macrocode}
+% We also create an associative array named \texttt{aTimers}, here we
+% add the name of the timer to the array.
+% \begin{macrocode}
+ \ifx\cntdwnaTimers\@empty\else\g@addto@macro\cntdwnaTimers{^^J}\fi
+ \g@addto@macro\cntdwnaTimers{aTimers["_o#1"]=_o#1;}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+% \DescribeMacro{\cntdwnclocktime} The text field that displays the time. It is also
+% the one that responds to the \texttt{autorun} and \texttt{autopause} options.
+% \begin{macrocode}
+\newcommand{\cntdwnclocktime}[4][]{%
+ \let\autorun@presets\@empty
+ \expandafter\ifnum\csname#2@autorun\endcsname=1\relax
+ \edef\autorun@presets{%
+ \AAPageOpen{if (\CDO#2.timeout==null) clStartTimer(\CDO#2);}}\fi
+ \expandafter\ifnum\csname#2@autopause\endcsname=1\relax
+ \edef\autorun@presets{\autorun@presets
+ \AAPageClose{if (\CDO#2.timeout!=null) clcntdwnPause(\CDO#2);}}\fi
+ \edef\autorun@presets{\noexpand\AA{\autorun@presets}}%
+ \textField[\Ff\FfReadOnly\Q{1}\textSize{0}#1
+ \presets{\autorun@presets}]%
+ {\CDO#2.clock.time}{#3}{#4}}
+% \end{macrocode}
+% \DescribeMacro{\cntdwnclockdate} The text field that displays the date. This field
+% is optional; both time and date may be displayed on the \cs{cntdwnclocktime} display,
+% this would require a custom value for the \texttt{timedateFunc} property.
+% \begin{macrocode}
+\newcommand{\cntdwnclockdate}[4][]{\textField[%
+ \Ff\FfReadOnly\Q{1}\textSize{0}#1]{\CDO#2.clock.date}{#3}{#4}}
+% \end{macrocode}
+% \DescribeMacro{\clockToggle} A simple button to toggle the clock off and one.
+% \begin{macrocode}
+\newcommand{\clockToggle}[4][]{%
+ \pushButton[\TU{Toggle Countdown}\A{\JS{clockToggle(\CDO#2);}}#1
+ ]{\CDO#2.lcntdwn.Toggle}{#3}{#4}}
+% \end{macrocode}
+% \subsection{JavaScript for long countdowns}
+% \begin{macrocode}
+\begin{insDLJS*}[lngcntdwn]{lngcntdwn}
+\begin{newsegment}{CntDwn: Convert Time Function}
+/*
+ This function converts the PDF Date Format to a JavaScript
+ Date object. The PDF Date Format is specified in section
+ 3.8.3 in the PDF Reference.
+*/
+function pdfDate2oDate( pdfDate ) {
+ // if present, remove the "D:" in format
+ if ( pdfDate.indexOf("D:") != -1 )
+ pdfDate = pdfDate.substring(2);
+ // now see if the O component is there
+ var re = /[\+\-Z]/;
+ var nIndex = pdfDate.search(re);
+ // separate the time date info from the time zone offset info
+ if ( nIndex != -1 ) {
+ var cTimeZone = pdfDate.substring(nIndex);
+ pdfDate = pdfDate.substring(0, nIndex);
+ } else cTimeZone = "";
+ // seg is an array of arrays. The first element is the field width,
+ // the second entry is the default value.
+ var seg = [[4,1970],[2,1],[2,1],[2,0],[2,0],[2,0]];
+ // an array to hold time arguments for the date constructor.
+ var args = new Array();
+ // as we determine the values of the PDF Date Format, push them onto
+ // the args array, if not present, push the default value on.
+ for ( var i=0; i < seg.length; i++) {
+ if ( pdfDate.length > 0 ) {
+ args.push(Number( pdfDate.substring(0, seg[i][0]) ) );
+ pdfDate = pdfDate.substring( seg[i][0] );
+ } else args.push( seg[i][1] );
+ }
+ // adjust month to base zero
+ args[1] = args[1] - 1;
+ // see if there is time zone info
+ var pm = "";
+ if ( cTimeZone.length > 0 ) {
+ pm = cTimeZone.charAt(0);
+ var zoneOffsetHr=Number(cTimeZone.substring(1,3));
+ cTimeZone=cTimeZone.substring(3);
+ var zoneOffsetMin=0;
+ if ( cTimeZone.length > 0 && cTimeZone.charAt(0) == "'" )
+ var zoneOffsetMin = Number( cTimeZone.substring(1,3) );
+ var totalOffset=zoneOffsetHr*60+zoneOffsetMin;
+ totalOffset*= 60000;
+ totalOffset=( pm == "-" )?-1*totalOffset:totalOffset;
+ var msTime=Date.UTC.apply(global,args);
+ msTime = msTime - totalOffset;
+ var d = new Date( msTime );
+ } else {
+ var dateArgs = args.toSource().replace(/[\[\]]/g,"");
+ var d = eval("new Date(" + dateArgs + ")" );
+ }
+ return d
+}
+\end{newsegment}
+\begin{newsegment}{CntDwn: Long Countdown JavaScript}
+function lngcntdwn(cTimer){
+ var _delta,nYears,pYears,nDays,pDays,nHours,pHours,nMinutes,
+ pMinutes,nSeconds,pSeconds,f,thisSignDelta,msYear;
+ var oTimer=aTimers[cTimer];
+ var Clock=new Date();
+ this.delay=true;
+ _delta=oTimer.target-Clock;
+ var o=lCalcYears(oTimer,Clock,_delta);
+ nYears=o.nYears;
+ pYears=o.pYears;
+ _delta=o.delta;
+% \end{macrocode}
+% Having made the correct calculation for the number of years, \texttt{pYears}
+% returns to us ready to calculate the number of days.
+% \begin{macrocode}
+ nDays=Math.floor(pYears/_oTime.day);
+ pDays=pYears\%_oTime.day;
+ nHours=Math.floor(pDays/_oTime.hour);
+ pHours=pDays\%_oTime.hour;
+ nMinutes=Math.floor(pHours/_oTime.minute);
+ pMinutes=pHours\%_oTime.minute;
+ nSeconds=Math.round(pMinutes/_oTime.second);
+ pSeconds=pMinutes\%_oTime.second;
+% \end{macrocode}
+% if \texttt{\_delta = oTimer.target - Clock} is positive, event is in future
+% at this time, if negative, it is in the past.
+% \begin{macrocode}
+ f=this.getField(cTimer+".lcntdwn.timeToFromEvent");
+ thisSignDelta=(_delta<0)?-1:1;
+ if (thisSignDelta*oTimer.lastSignDelta<0&&!oTimer.bNotify4) {
+ if (f!=null) f.textColor=oTimer.endtimecolor;
+ oTimer.bNotify4=true;
+ oTimer.lastSignDelta=thisSignDelta;
+ eval(oTimer.eventhandler)(this,cTimer,4);
+ if (oTimer.weStopOnEnd) {
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+ if (f!=null) f.value=oTimer.endMsg;
+ return;
+ }
+ }
+ if (!oTimer.bNotify4&&_delta>0){ // event in future
+ if (!oTimer.bNotify1&&oTimer.notify1!=null%
+&&_delta<oTimer.notify1) {
+ oTimer.bNotify1=true;
+ eval(oTimer.eventhandler)(this,cTimer,1);
+ } else {
+ if (!oTimer.bNotify2&&oTimer.notify2!=null%
+&&_delta<oTimer.notify2) {
+ oTimer.bNotify2=true;
+ skipCheckB=true;
+ eval(oTimer.eventhandler)(this,cTimer,2);
+ } else {
+ if (!oTimer.bNotify3&&oTimer.notify3!=null%
+&&_delta<oTimer.notify3) {
+ oTimer.bNotify3=true;
+ eval(oTimer.eventhandler)(this,cTimer,3);
+ }
+ }
+ }
+ }
+ if (oTimer.bNotify4&&_delta<0){// event in past
+ var neg_delta=-1*_delta;
+ if (!oTimer.bNotify5&&oTimer.notify5!=null&&%
+neg_delta>oTimer.notify5) {
+ oTimer.bNotify5=true;
+ eval(oTimer.eventhandler)(this,cTimer,5);
+ } else {
+ if (!oTimer.bNotify6&&oTimer.notify6!=null&&%
+neg_delta>oTimer.notify6) {
+ oTimer.bNotify6=true;
+ eval(oTimer.eventhandler)(this,cTimer,6);
+ } else {
+ if (!oTimer.bNotify7&&oTimer.notify7!=null&&%
+neg_delta>oTimer.notify7) {
+ oTimer.bNotify7=true;
+ eval(oTimer.eventhandler)(this,cTimer,7);
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% Display the current time and date, and the countdown.
+% \begin{macrocode}
+% eval(oTimer.timedateFunc)(Clock,cTimer);
+ eval(oTimer.displayfunc)(f,nYears,nDays,nHours,nMinutes,nSeconds);
+ this.delay=false;
+ this.dirty=false;
+}
+function _defaultTimeDateFunc(oTime,cTimer) {
+ try{ this.getField(cTimer+".clock.time").value%
+=util.printd("H:MM:ss",oTime); } catch(e) {};
+ try { this.getField(cTimer+".clock.date").value=%
+util.printd("mm/dd/yyyy", oTime); } catch(e) {};
+}
+function _defaultLDisplayFunc(f,nYears,nDays,nHours,nMinutes,nSeconds) {
+ var strYears=(nYears==0)?""%
+:(""+nYears+((nYears == 1)?" \cntdwnYear, ":" \cntdwnYears, "));
+ var strDays=(nDays== 0)?""%
+:(""+nDays+((nDays==1)?" \cntdwnDay, ":" \cntdwnDays, "));
+ var strHours=(nHours==0)?""%
+:(""+nHours+((nHours==1)?" \cntdwnHour, ":" \cntdwnHours, "));
+ var strMinutes=(nMinutes==0)?""%
+:(""+nMinutes+((nMinutes==1)?" \cntdwnMinute, ":" \cntdwnMinutes, "));
+ var strSeconds=""+nSeconds+((nSeconds<2)?" \cntdwnSecond "%
+:" \cntdwnSeconds ");
+ var cCntDwnDisplay=strYears+strDays+strHours+strMinutes+strSeconds;
+ try { f.value=cCntDwnDisplay; } catch(e) {}
+}
+function lCalcYears(oTimer,Clock,_delta) {
+ var nYears,lengthOfYears,targetpdfdate,targetYear,thisYear,
+ otherYear,currAnnivDate,otherAnnivDate,tCurrAnnivDate,
+ tOtherAnnivDate,msYear=0;
+% \end{macrocode}
+% Get the \texttt{pdfdate} for the target event, and\dots
+% \begin{macrocode}
+ targetpdfdate=oTimer.pdfdate;
+% \end{macrocode}
+% get the target year and the current year. The \texttt{otherYear} is
+% the year previous to the current year, if \texttt{\_delta<0}; otherwise,
+% it is the year following the current year.
+% \begin{macrocode}
+ targetYear=Number(targetpdfdate.substring(2,6));
+ thisYear=Clock.getFullYear();
+ otherYear=(_delta<0)?thisYear-1:thisYear+1;
+% \end{macrocode}
+% Build the \texttt{pdfdate} for the anniversary date in this year, and
+% for the \texttt{other\-Anniv\-Date}.
+% \begin{macrocode}
+ currAnnivDate=targetpdfdate.substring(0,2)%
++thisYear+targetpdfdate.substring(6);
+ otherAnnivDate=targetpdfdate.substring(0,2)%
++otherYear+targetpdfdate.substring(6);
+% \end{macrocode}
+% \texttt{tCurrAnnivDate} is the anniversary date (object) of target event in the current year,
+% and \texttt{tOtherAnnivDate} is either the previous anniversary date (if \texttt{\_delta<0}),
+% or the next anniversary date.
+% \begin{macrocode}
+ tCurrAnnivDate=pdfDate2oDate( currAnnivDate );
+ tOtherAnnivDate=pdfDate2oDate( otherAnnivDate );
+ if (_delta<0) {
+ if ( Clock < tCurrAnnivDate ){
+% \end{macrocode}
+% If we have not reached the anniversary date in the current year, the the number
+% of years that have passed since the target event is based on the date of the target
+% event, and the previous anniversary date of the event.
+% \begin{macrocode}
+ nYears=otherYear-targetYear;
+ lengthOfYears=oTimer.target-tOtherAnnivDate;
+% \end{macrocode}
+% We have reached the anniversary date in the current date. \texttt{nYears}
+% is based on the current year and the year of the target vent.
+% \begin{macrocode}
+ } else {
+ nYears=thisYear-targetYear;
+ lengthOfYears=oTimer.target-tCurrAnnivDate;
+ }
+ } else {// _delta>=0
+ if ( Clock > tCurrAnnivDate ) {
+% \end{macrocode}
+% We have passed the most recent anniversary in this year, so number of years
+% between the current date and the target event (which is in the future) is based
+% on the \texttt{otherYear} (the next anniversary date) and the target year.
+% \begin{macrocode}
+ nYears=targetYear-otherYear;
+ lengthOfYears=oTimer.target-tOtherAnnivDate;
+ } else {
+% \end{macrocode}
+% We have not passed the anniversary in this year, so number of years
+% between the current date and the target event (which is in the future) is based
+% on the \texttt{thisYear} and the target year.
+% \begin{macrocode}
+ nYears=targetYear-thisYear;
+ lengthOfYears=oTimer.target-tCurrAnnivDate;
+ }
+ }
+% \end{macrocode}
+% Now we subtract out the number of years (in milliseconds) from the difference
+% in time between the event and the current time.
+% \begin{macrocode}
+ _delta-=lengthOfYears;
+ pYears=Math.abs(_delta);
+ return {
+ nYears:nYears,
+ pYears:pYears,
+ delta:_delta
+ };
+}
+function lStartTimer(oTimer) {
+ var cTimer=oTimer.name;
+ oTimer.target=pdfDate2oDate(oTimer.pdfdate).getTime();
+ var bWasNotified=oTimer.bNotify4;
+ var _delta=oTimer.target-new Date();
+ oTimer.lastSignDelta=(_delta<0)?-1:1;
+ if ( _delta > 0 ) {
+ oTimer.bNotify1=(_delta<oTimer.notify1);
+ oTimer.bNotify2=(_delta<oTimer.notify2);
+ oTimer.bNotify3=(_delta<oTimer.notify3);
+ } else {
+ oTimer.bNotify4=true;
+ oTimer.bNotify5=(-1*_delta>oTimer.notify5);
+ oTimer.bNotify6=(-1*_delta>oTimer.notify6);
+ oTimer.bNotify7=(-1*_delta>oTimer.notify7);
+ }
+% \end{macrocode}
+% On start up, if the target event has not been notified, we fire up
+% the main event.
+% \begin{macrocode}
+ if (!bWasNotified&&oTimer.bNotify4) {
+ var f=this.getField(cTimer+".lcntdwn.timeToFromEvent");
+ if (f!=null) f.textColor=oTimer.endtimecolor;
+ eval(oTimer.eventhandler)(this,cTimer,4);
+ }
+% \end{macrocode}
+% If we start the timer and we have already passed the main event, and we
+% are to stop on end, we put in the final message, and do not start the counter.
+% \begin{macrocode}
+ if (_delta<0&&oTimer.weStopOnEnd) {
+ f.value=oTimer.endMsg;
+ return;
+ }
+ oTimer.timeout=app.setInterval(%
+"lngcntdwn(\""+cTimer+"\")",oTimer.refreshrate);
+}
+function lcntdwnPause(oTimer) {
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+}
+function lcntdwnToggle(oTimer) {
+ if (oTimer.timeout==null) // stopped or paused
+ lStartTimer(oTimer);
+ else
+ lcntdwnPause(oTimer);
+}
+function _NoOpt(doc,cTimer,nEvent){}
+% \end{macrocode}
+% \subsection{JavaScript to control a clock}
+% Controls for the clock
+% \begin{macrocode}
+function lngClockHandler(cTimer) {
+ var oTimer=aTimers[cTimer];
+ var Clock = new Date();
+ if ( oTimer.tzoffset != "" ) {
+ var localTime = Clock.getTime();
+ var localOffset = Clock.getTimezoneOffset()*60000;
+ // obtain UTC time in msec
+ var utc = localTime + localOffset;
+ var tzoffset=(oTimer.tzoffset=="Z")?0:oTimer.tzoffset;
+ var nonlocal=utc+oTimer.tzoffset;
+ Clock = new Date(nonlocal);
+ }
+ this.delay=true;
+ eval(oTimer.timedateFunc)(Clock,cTimer);
+ this.dirty=false;
+ this.delay=false;
+}
+function clStartTimer(oTimer) {
+ var tzoffset=oTimer.tzoffset;
+ if ( tzoffset !="" && tzoffset !="Z" ) {
+ var sign=tzoffset.charAt(0);
+ offset=tzoffset.substring(1);
+ var a=tzoffset.split("'");
+ var hrs=Number(a[0]);
+ var mins=Number(a[1]);
+ tzoffset=hrs*3600000+mins*60000;
+ tzoffset=((sign=="+")?1:-1)*tzoffset;
+ oTimer.tzoffset=tzoffset;
+ }
+ var cTimer=oTimer.name;
+ oTimer.timeout=app.setInterval(%
+"lngClockHandler(\""+cTimer+"\")",oTimer.refreshrate);
+}
+function clockToggle(oTimer) {
+ if (oTimer.timeout==null) // stopped or paused
+ clStartTimer(oTimer);
+ else
+ lcntdwnPause(oTimer);
+}
+\end{newsegment}
+\end{insDLJS*}
+% \end{macrocode}
+% \begin{macrocode}
+%</lngcnt>
+%<*package>
+%</package>
+% \end{macrocode}
+% \Finale
+\endinput
diff --git a/texmf-dist/source/latex/cntdwn/cntdwn.ins b/texmf-dist/source/latex/cntdwn/cntdwn.ins
new file mode 100644
index 00000000..27fe75d6
--- /dev/null
+++ b/texmf-dist/source/latex/cntdwn/cntdwn.ins
@@ -0,0 +1,65 @@
+%%
+%% 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{2010/08/02}
+\def\batchfile{cntdwn.ins}
+%
+% If you can assume that the target audience for the document all have
+% Acrobat Reader 5.0 or later, then chance the following switch to true,
+% else, leave it as false.
+
+\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{cntdwn.sty}{\from{cntdwn.dtx}{copyright,package}}
+ \file{shrtcnt.def}{\from{cntdwn.dtx}{copyright,shortcnt}}
+ \file{lngcnt.def}{\from{cntdwn.dtx}{copyright,lngcnt}}
+}
+
+\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/texmf-dist/source/latex/cntdwn/examples/clock_tst.tex b/texmf-dist/source/latex/cntdwn/examples/clock_tst.tex
new file mode 100644
index 00000000..ee2b4f8a
--- /dev/null
+++ b/texmf-dist/source/latex/cntdwn/examples/clock_tst.tex
@@ -0,0 +1,56 @@
+\documentclass{article}
+\usepackage[designvi,usesf,tight]{web}
+\usepackage{eforms}
+\usepackage[longcount]{cntdwn}
+
+\title{The \texttt{cntdwn} Package
+ \texorpdfstring{\\[6pt]}{: }Clock Timers}
+\author{D. P. Story}
+\subject{Demo file illustrating clocks, local and foreign time zones}
+\keywords{AeB, AcroTeX, clocks, countdown, cntdwn package}
+
+\university{Acro\negthinspace\TeX.Net}
+\email{dpstory@acrotex.net}
+\version{1.0}
+\copyrightyears{2010}
+\revisionLabel{}
+
+\setClockTimer{LocalClock}{}
+\setClockTimer{CESTClock}{tzoffset=+0200} % this is summer time, CET is +0100
+
+\parskip6pt\parindent0pt
+
+\begin{document}
+
+\maketitle
+
+The clocks below show local time and date (the time/date your computer
+shows), and the time and date of Central Europe during the summer (CEST), the
+time when this demo file was originally created.
+
+\begin{tabular}{rcc}
+Local Time: &%
+\cntdwnclocktime{LocalClock}{1in}{11bp}&%
+\cntdwnclockdate{LocalClock}{1in}{11bp}\\[3bp]
+CEST: &%
+\cntdwnclocktime{CESTClock}{1in}{11bp}&%
+\cntdwnclockdate{CESTClock}{1in}{11bp}%
+\end{tabular}
+
+In the preamble we have
+\begin{verbatim}
+\setClockTimer{LocalClock}{}
+\setClockTimer{CESTClock}{tzoffset=+0200}
+\end{verbatim}
+and in the body of the document we have
+\begin{verbatim}
+\begin{tabular}{rcc}
+Local Time: &\cntdwnclocktime{LocalClock}{1in}{11bp}&%
+\cntdwnclockdate{LocalClock}{1in}{11bp}\\[3bp]
+CEST: &\cntdwnclocktime{CESTClock}{1in}{11bp}&%
+\cntdwnclockdate{CESTClock}{1in}{11bp}%
+\end{tabular}
+\end{verbatim}
+These commands are available through the \texttt{longcount} option of the \texttt{cntdwn}
+package.
+\end{document}
diff --git a/texmf-dist/source/latex/cntdwn/examples/lngcntdwn_tst.tex b/texmf-dist/source/latex/cntdwn/examples/lngcntdwn_tst.tex
new file mode 100644
index 00000000..e4b0ae7d
--- /dev/null
+++ b/texmf-dist/source/latex/cntdwn/examples/lngcntdwn_tst.tex
@@ -0,0 +1,62 @@
+\documentclass{article}
+\usepackage[designi,usesf]{web}
+\usepackage{eforms}
+\usepackage[longcount]{cntdwn}
+
+\title{The \texttt{cntdwn} Package
+ \texorpdfstring{\\[6pt]}{: }Long Countdown}
+\author{D. P. Story}
+\subject{Demo file illustrating the long countdown of the cntdwn package}
+\keywords{AeB, AcroTeX, clocks, countdown, cntdwn package}
+
+\university{Acro\negthinspace\TeX.Net}
+\email{dpstory@acrotex.net}
+\version{1.0}
+\copyrightyears{2010}
+\revisionLabel{}
+
+\thispagestyle{empty}
+\parindent0pt\parskip6pt
+
+
+\setLongCntDwn{NewYearsLocal}
+{%
+ date=2015/01/01,
+ time=00:01:00,
+ endmsg=Happy New Year from wherever I currently am!,
+ onfinish=stop
+}
+\setLongCntDwn{NewYearsCET}
+{%
+ date=2015/01/01,
+ time=00:01:00,
+ tzoffset=+0100,
+ endmsg=Happy New Year from wherever central Europe!,
+ onfinish=stop
+}
+
+
+\begin{document}
+
+\maketitle
+
+The long countdown shows the time remaining to an event in the (usually
+distant) future.
+
+\begin{tabular}{rc}
+\multicolumn{2}{c}{Time to New Years Day}\\[3bp]
+Local:&\lcntdwnDisplay{NewYearsLocal}{2.5in}{11bp}\\[3bp]
+CET:&\lcntdwnDisplay{NewYearsCET}{2.5in}{11bp}
+\end{tabular}
+
+In central Europe, the two countdowns should read the same, in the U.S.,
+they may differ by at least 5 hours.
+
+When the count has reached 0 seconds, a message appears in the text field
+wishing you a Happy New Year, from Acro\negthinspace\TeX. I hope you stay
+up until 1 second after midnight to see the message. Then, you can set
+the dates to \texttt{2016/01/01} for me, now there's a good fellow.
+
+This code is available through the \texttt{longcount} option of the \texttt{cntdwn} package.
+
+\end{document}
diff --git a/texmf-dist/source/latex/cntdwn/examples/shrtcntdwn_tst.tex b/texmf-dist/source/latex/cntdwn/examples/shrtcntdwn_tst.tex
new file mode 100644
index 00000000..4ebf62ac
--- /dev/null
+++ b/texmf-dist/source/latex/cntdwn/examples/shrtcntdwn_tst.tex
@@ -0,0 +1,79 @@
+\documentclass{article}
+\usepackage[designi,usesf]{web}
+\usepackage{eforms}
+\usepackage{cntdwn}
+
+\title{The \texttt{cntdwn} Package
+ \texorpdfstring{\\[6pt]}{: }Short Countdown}
+\author{D. P. Story}
+\subject{Demo file illustrating the short countdown of the cntdwn package}
+\keywords{AeB, AcroTeX, clocks, countdown, cntdwn package}
+
+\university{Acro\negthinspace\TeX.Net}
+\email{dpstory@acrotex.net}
+\version{1.0}
+\copyrightyears{2010}
+\revisionLabel{}
+
+\thispagestyle{empty}
+\parindent0pt\parskip6pt
+
+\setShortCntDwn{CntDwnTimer}
+{%
+ autorun,
+ length=1*\minutes,
+ notify1=45*\seconds,
+ notify2=30*\seconds,
+ notify3=15*\seconds
+}
+\setShortCntDwn{CntUpTimer}
+{%
+ stopwatch,
+ length=1*\minutes,
+ notify1=15*\seconds,
+ notify2=30*\seconds,
+ notify3=45*\seconds,
+ endmsg=Thank you for trying the cntdwn package from AcroTeX!,
+ onfinish=continue,
+}
+\begin{document}
+
+\maketitle
+
+
+Counting down: Length 1 minute, \texttt{notify1} at 45 seconds, \texttt{notify2} at 30
+seconds, and \texttt{notify3} at 15 seconds.
+
+Time Remaining:
+\cntdwnDisplay{CntDwnTimer}{.5in}{11bp}
+\cntdwnStartT{CntDwnTimer}{11bp}{11bp}
+\cntdwnPauseT{CntDwnTimer}{11bp}{11bp}
+\cntdwnStopT{CntDwnTimer}{11bp}{11bp}
+
+\begin{center}
+\cntdwnEndTarget[\BC{}\textSize{20}\textColor{blue}\Q{1}]{CntDwnTimer}{.67\linewidth}{1in}
+\end{center}
+
+\newpage
+
+Counting up: Length 1 minute, \texttt{notify1} at 15 seconds, \texttt{notify2} at 30
+seconds, and \texttt{notify3} at 45 seconds. This counter set to start
+manually, press the Start button (second from left).
+
+Time Remaining:
+\cntdwnDisplay{CntUpTimer}{.5in}{11bp}
+\cntdwnStartT{CntUpTimer}{11bp}{11bp}
+\cntdwnPauseT{CntUpTimer}{11bp}{11bp}
+\cntdwnStopT{CntUpTimer}{11bp}{11bp}
+
+You can optionally have explicit buttons instead of, or in addition to, the
+three right most buttons:
+\cntdwnStart[\CA{Start}\textSize{7}]{CntUpTimer}{}{9bp}
+\cntdwnPause[\CA{Pause}\textSize{7}]{CntUpTimer}{}{9bp}
+\cntdwnStop[\CA{Stop}\textSize{7}]{CntUpTimer}{}{9bp}
+
+\begin{center}
+\cntdwnEndTarget[\BC{}\textSize{20}\textColor{blue}\Q{1}]{CntUpTimer}{.67\linewidth}{1in}
+\end{center}
+
+\end{document}
diff --git a/texmf-dist/source/latex/ecards/doc/ecardsman.tex b/texmf-dist/source/latex/ecards/doc/ecardsman.tex
new file mode 100644
index 00000000..242ea5e5
--- /dev/null
+++ b/texmf-dist/source/latex/ecards/doc/ecardsman.tex
@@ -0,0 +1,726 @@
+% makeindex < aebpro_man.idx > aebpro_man.ind
+\documentclass{article}
+\usepackage[fleqn]{amsmath}
+\usepackage[
+ web={centertitlepage,designv,forcolorpaper,latextoc,pro},
+ eforms,
+ linktoattachments,
+ aebxmp
+]{aeb_pro}
+\usepackage{graphicx,array}
+%\usepackage{myriadpro}
+%\usepackage{calibri}
+\usepackage[altbullet]{lucidbry}
+
+%\usepackage{makeidx}
+%\makeindex
+\usepackage{acroman}
+\usepackage[active]{srcltx}
+
+%\urlstyle{rm}
+\urlstyle{sf}
+
+\DeclareDocInfo
+{
+ university={NORTHWEST FLORIDA STATE COLLEGE\\
+ Department of Mathematics},
+ title={eCards: Electronic Flash Cards\texorpdfstring{\\[3ex]}{,} Manual of Usage},
+ author={D. P. Story},
+ email={dpstory@acrotex.net},
+ subject={Documentation for the eCards package from AcroTeX},
+ talksite={\url{www.acrotex.net}},
+ version={2.0, 2016/09/03},
+ keywords={AcroTeX, flash cards, interactive},
+ 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$}}$}
+
+\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}}
+
+\widestNumber{0.00.}
+%\pagestyle{empty}
+%\parindent0pt\parskip\medskipamount
+
+\def\dps{$\mbox{$\mathfrak D$\kern-.3em\mbox{$\mathfrak P$}%
+ \kern-.6em \hbox{$\mathcal S$}}$}
+
+\frenchspacing
+
+\chngDocObjectTo{\newDO}{doc}
+\begin{docassembly}
+var titleOfManual="The AeB eCards MANUAL";
+var manualfilename="Manual_BG_Print_ecards.pdf";
+var manualtemplate="Manual_BG_Green.pdf"; // Blue, Green, Brown
+var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate;
+var doc;
+var buildIt=true;
+if ( buildIt ) {
+ console.println("Creating new " + manualfilename + " file.");
+ doc = \appopenDoc({cPath: _pathToBlank, bHidden: true});
+ var _path=this.path;
+ var pos=_path.lastIndexOf("/");
+ _path=_path.substring(0,pos)+"/"+manualfilename;
+ \docSaveAs\newDO ({ cPath: _path });
+ doc.closeDoc();
+ doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true});
+ f=doc.getField("ManualTitle");
+ f.value=titleOfManual;
+ doc.flattenPages();
+ \docSaveAs\newDO({ cPath: manualfilename });
+ doc.closeDoc();
+} else {
+ console.println("Using the current "+manualfilename+" file.");
+}
+var _path=this.path;
+var pos=_path.lastIndexOf("/");
+_path=_path.substring(0,pos)+"/"+manualfilename;
+\addWatermarkFromFile({
+ bOnTop:false,
+ bOnPrint:false,
+ cDIPath:_path
+});
+\executeSave();
+\end{docassembly}
+
+\begin{document}
+
+\maketitle
+
+\selectColors{linkColor=black}
+\tableofcontents
+\selectColors{linkColor=webgreen}
+
+
+%--------------
+%\usepackage{amsmath}
+%\usepackage[designi,dvipsone,tight,latextoc,nodirectory,usesf]{web}
+%%\usepackage[dvipsone,designi,latextoc,forpaper,nodirectory,usesf]{web}
+%%\usepackage[nocorrections]{exerquiz}
+%\usepackage{verbatim}
+%% \usepackage{longtable,colortbl}
+%% \usepackage{pifont}
+%\usepackage[usecmtt]{myriadpro}
+
+
+
+%\pdfstringdefDisableCommands{\let\!\empty}
+
+% \setlongtables
+
+\def\AcroT{Acro\!\TeX}\def\cAcroT{\textcolor{blue}{\AcroT}}
+\def\AcroEB{\AcroT{} eDucation Bundle}\def\cAcroEB{\textcolor{blue}{\AcroEB}}
+\def\AcroB{\AcroT{} Bundle}\def\cAcroB{\textcolor{blue}{\AcroB}}
+\def\bUrl{http://www.math.uakron.edu/~dpstory}
+
+\hypersetup{linktocpage}
+
+%\newenvironment{sverbatim}
+%{\par\footnotesize\verbatim}{\endverbatim\noindent}
+%
+%\newcommand\redpoint{\par\ifdim\lastskip>0pt\relax\vskip-\lastskip\fi
+%\vskip\medskipamount\noindent
+% \makebox[\parindent][l]{\large\color{red}$\blacktriangleright$}}
+%\newcommand\handpoint{\par\ifdim\lastskip>0pt\relax\vskip-\lastskip\fi
+%\vskip\medskipamount\noindent
+% \makebox[\parindent][l]{\large\color{blue}\ding{042}}}
+
+%\newcommand{\cs}[1]{\texttt{\char`\\#1}}
+
+
+%\begin{document}
+%
+%\maketitle
+%\tableofcontents
+
+\section{Introduction}
+
+The initial version of this package was developed at the request of my colleague, Dr.\ Thomas
+Price for use in the senior honors project of Ms.\ Katie Jones on
+\href{http://www.math.uakron.edu/~teprice/Trig/}{Trig Flash Cards}.
+Upon completion of the honors project, I generalized and extended
+the original package developed specifically for them.
+
+Version~2.0 (2016/07/20) of \app{eCards} brings the package up to date with
+the \pkg{exerquiz} package, which has undergone considerable revision since
+\app{eCards} first appeared. The only changes in the package is its name, the
+package name is \texttt{ecards} rather than \app{eCards}, also,
+\pkg{exerquiz} package dated 2016/04/18 or later is required.
+
+\section{Overview}
+
+We give a graphical overview of \app{eCards} using the demonstration file
+\texttt{ecardstst.tex}. There are three types of pages, excluding the cover
+page: the question page, the hint page, and the answer page.
+
+\begin{figure}[htb]
+\hskip-62.5pt\begin{minipage}{\linewidth+62.5pt}
+\centering
+\includegraphics[width=.32\linewidth]{graphics/ecardstst-panel-ques}\hfill
+\includegraphics[width=.32\linewidth]{graphics/ecardstst-panel-hint}\hfill
+\includegraphics[width=.32\linewidth]{graphics/ecardstst-panel-ans}\hfill
+ \caption{The question, hint, and answer pages with panel}\label{fig:ecards-pan}
+\end{minipage}
+\end{figure}
+
+\hyperref[fig:ecards-pan]{Figure~\ref*{fig:ecards-pan}} shows the demonstration document using the
+\opt{rightpanel} option; the user navigates through the document by pressing
+the links labeled `Hint', `Soln', `Next', and `Prev'.
+
+Using the \opt{usetemplates} option instead of \opt{rightpanel} renders the
+same pages as shown in \hyperref[fig:ecards-nopan]{Figure~\ref*{fig:ecards-nopan}}.
+
+\begin{figure}[htb]
+\hskip-62.5pt\begin{minipage}{\linewidth+62.5pt}
+\centering
+\includegraphics[width=.32\linewidth]{graphics/ecardstst-nopanel-ques}\hfill
+\includegraphics[width=.32\linewidth]{graphics/ecardstst-nopanel-hint}\hfill
+\includegraphics[width=.32\linewidth]{graphics/ecardstst-nopanel-ans}\hfill
+ \caption{The question, hint, and answer pages with no panel}\label{fig:ecards-nopan}
+\end{minipage}
+\end{figure}
+
+In the case of \opt{usetemplates},
+\hyperref[fig:ecards-nopan]{Figure~\ref*{fig:ecards-nopan}}, the user works
+through the cards using the navigation icons in to footer of the page.
+
+When the \opt{listing} option is used along with the \opt{forpaper} option, a
+document suitable for printing is produced. The document contains the
+questions, hints, and solutions for the document author to conveniently
+review. This document is shown in \hyperref[fig:ecards-listing]{Figure~\ref*{fig:ecards-listing}}.
+
+\begin{figure}[htb]\centering\setlength{\fboxsep}{0pt}\fbox
+{\includegraphics[width=.67\linewidth]{graphics/ecardstst-listing}}
+ \caption{The cards with the \texttt{listing} option}\label{fig:ecards-listing}
+\end{figure}
+
+\section{Documentation}
+
+In this section, the major elements of this package are highlighted. For those
+who want to know more, you can peruse the {\LaTeX} code, there are comments
+contained there as well. The document \texttt{ecardstst.tex} illustrates
+most of what you need to know for creating your own electronic flash cards.
+
+\subsection{Preamble: Required packages and options}
+
+\subsubsection{Required packages}
+
+This package depends heavily on the
+\textbf{\href{http://www.math.uakron.edu/~dpstory/webeq.html}
+{Acro\negthinspace\TeX{} eDucation Bundle}}: (1) the \pkg{web} package
+provides page setup, backgrounds, and navigational elements; (2) the
+\pkg{exerquiz} package (dated 2016/04/18 or later) allows you to author the
+questions, both non-responsive and responsive (fill-in and multiple choice);
+and (3) the \pkg{insdljs} packages is the mechanism for introducing
+document-level JavaScripts into the final document.
+
+\subsubsection{Drivers}
+
+The supported drivers are the same as those supported by \pkg{exerquiz}:
+\texttt{dvipsone}, \texttt{dvips}, \texttt{pdftex}, and \texttt{xetex}.
+
+A typical set of packages used for on screen presentation:
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\usepackage[!ameta(driver_option),tight,rightpanel]{web}
+\usepackage[!ameta(options)]{exerquiz}
+\usepackage[!ameta(options)]{ecards}
+\end{Verbatim}
+where \ameta{driver\_option} is any of the drivers listed above;
+\texttt{pdftex} and \texttt{xetex} are automatically detected so they need
+not be specified; if the driver option \texttt{dvips} is specified in the
+\texttt{web.cfg}, it need not be specified either.
+
+\paragraph*{A note on \app{xetex}.}
+The \app{xetex} application may be set to strip out named destinations that
+are not referenced within the document as a target of a `hard-wired' link.
+The \pkg{ecards} package sets a lot of destinations (or targets) but, in many
+instances, `dynamic' links are employed using the JavaScript method
+\texttt{\textsl{Doc}.gotoNamedDest(\ameta{target})}. In such instances,
+\app{xetex} may strip out these targets; the link or button action may not
+perform the jump to the destination because the destination does not exist.
+If this becomes an issue for your \app{xetex} installation, the
+\textbf{\app{Dvipdfmx} Compatibility Flags} needs to be modified. Search for
+the configuration file \texttt{dvipdfmx.cfg}, open the file. Scroll down to
+the line `\texttt{\%C 0x0000}', beneath it insert `\texttt{C 0x0010}', save
+and close the file.\footnote{MiK\TeX{} discourages the direct editing of the
+file \texttt{dvipdfmx.cfg}, instead, on the command-line prompt type and
+execute `\texttt{initexmf -{}-edit-config-file dvipdfmx}' enabling you to edit
+a local version of the configuration file as described above.} The
+documentation for this bit field is just above the referenced line and an
+explanation of the `\texttt{C 0x0010}' setting is given.
+
+
+\subsubsection{Options}
+
+\paragraph*{\app{eCards} options.}\hskip-\lastskip\
+The \pkg{ecards} package really has only 4 options:
+\begin{enumerate}
+ \item \texttt{nohints}: If you do not want to provide hints in your \app{eCards},
+ use this option. See also the comments in \Nameref{hint}.
+
+ The default is to provide and display hints to each card; when
+ \opt{nohints} is specified in the option list of \pkg{ecards}, no
+ hints provided becomes the default.
+
+ Whether hints are provided or not can be overridden in two ways:
+ through the optional argument of the \env{card} environment
+ (\autopageref{ss:cardEnv}), and through the commands listed next.
+\bVerb\takeMeasure{\string\useNoHints\quad\string\useHints}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\useNoHints!quad\useHints
+\end{dCmd}
+\eVerb The commands are used between \env{card} environments to change the
+default usage of hints. When hints are \emph{not provided}, a simple message
+defined by the command \cs{noHintProvided} (see \autopageref{noHintProvided}) appears on the hint page.
+
+ \item \texttt{listing}:\label{listing} This option gives you a printable version of your
+ \app{eCards}. In this way, you can proofread, check your questions, hints,
+ and answers. Suggested packages and options are given below:
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\usepackage[!ameta(driver_option),forpaper]{web}
+\usepackage[solutionsafter,proofing]{exerquiz}
+\usepackage[listing]{ecards}
+\end{Verbatim}
+This option sets the Boolean \cs{ifecListing} to true; this Boolean is used
+to define optional content. Read \Nameref{ss:cardEnv} for an example of
+using \cs{ifecListing}.
+
+Refer to \hyperref[fig:ecards-listing]{Figure~\ref*{fig:ecards-listing}}
+ for a depiction of an \app{eCards} document under the \opt{listing}
+ option.
+ \item \texttt{memLogo}: The logo, if any, is read and re-read
+ for each page on which it appears. Using this option, the logo
+ is read once and saved in a box for use.
+ \item \texttt{custom}: If this option is included in the option list, the
+ package looks for and inputs the file \texttt{ecard.cus}. This file
+ can be used to customize the environments. This file should be kept
+ in the source directory, not in the {\LaTeX} search path.
+\end{enumerate}
+
+\paragraph*{Other options.}
+Selecting the various options of the \textsf{web} and
+\textsf{exerquiz} packages can give you different looks. It is
+important to be aware of all the options associated with these
+two package; in the paragraphs below, various options are
+discussed that may be useful in \app{eCards}.
+
+\subparagraph*{Useful \pkg{web} package options.}
+There are three background/\penalty0panel options; these are \texttt{usetemplates},
+\texttt{rightpanel} and \texttt{leftpanel}.
+
+Using the \texttt{usetemplates} option does not give you the vertical
+navigation panel, but it does provide background colors; the
+\texttt{rightpanel} and \texttt{leftpanel} given you a vertical panel on the
+right and left, respectively. Use one of these three options only, if any at
+all. Using none of these three will just get you the default white
+background. See the {\AEB} documentation for details.
+
+There are certain ``standard'' page designs, or you can create your own using
+the \cs{margins} and \cs{screensize}; the demo document has
+\begin{Verbatim}
+ \margins{.25in}{.25in}{24pt}{.25in} % left,right,top, bottom
+ \screensize{3.72in}{366.24bp} % height, width
+\end{Verbatim}
+See the \pkg{web} package documentation for details on these and other
+options.
+
+\subparagraph*{Useful \pkg{exerquiz} package options.}
+If you are not using multiple choice or fill-in questions, you should use
+the \texttt{exercisesonly} option. This removes much of the document level JavaScript
+from the PDF document.
+
+For authors that use the full Acrobat~5.0, or the newer Acrobat
+6.0 Standard or Acrobat 6.0 Professional, you can use the
+\texttt{execJS} option. If this option is taken, then when the
+document is first loaded into Acrobat (following distillation, or
+creation using \textsf{dvipdfm} or \textsf{pdftex}), the document
+will be automatically saved; this saves any imported document
+level JavaScript in the document. The document always needs to be saved
+after creation so save the scripts with the document, this does it automatically
+so you can't forget to do it---as one of my colleagues once did.
+
+The \texttt{nosolutions} option removes the \texttt{response} environment
+leaving only the questions. The \texttt{proofing} and \texttt{preview} options
+can be useful for proofreading, as described in the \texttt{\hyperref[listing]{listing}}
+option described above.
+
+\subsubsection{Original customization commands}\label{ss:origCus}
+
+The \app{eCards} defines several (text) commands, there are listed here:
+\begin{itemize}
+\item \cs{cardsFinishedMsg}: When the user has reviewed all the electronic flash cards,
+ an alert dialog appears with a message. The contents of the message are defined by
+ this command. The default is
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\cardsFinishedMsg{You've seen all the cards!}
+\end{Verbatim}
+
+\item \cs{cardColor}, \cs{hintColor}, and \cs{solnColor}: The background colors of various pages.
+The defaults are
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\cardColor{vlightblue}
+\hintColor{cornsilk}
+\solnColor{webyellow}
+\end{Verbatim}
+Additionally, \cs{textBgColor} command is used to define the default
+background color (of the \pkg{web} package). This will be the color of the
+first page, the default is \cs{textBgColor\darg{cornsilk}}. The panel
+background is controlled by the \pkg{web} command \cs{panelBgColor}; for
+example, \cs{panelBgColor\darg{logoblue}}.
+
+\item \cs{ecLogo}: The logo emblem that would appear in the upper portion of the vertical
+ navigational strip. This assumes you are using either the \texttt{rightpanel} or
+ \texttt{leftpanel} option for \textsf{web}. The default is
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\ecLogo{\includegraphics[scale=.4]{graphics/uakron}}
+\end{Verbatim}
+As you can see, the argument of this command is a graphic command, usually the command
+\cs{includegraphics} from the \textsf{graphicx} package.
+
+\item \cs{ecLogoLink}: This is the URL of the link destination that will be placed
+ around the logo. The default is an empty address, in this case, no link is placed
+ around the logo emblem. An example of usage:
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\ecLogoLink{http://www.uakron.edu/}
+\end{Verbatim}
+
+\item \cs{ecHomePage}: This is the URL to a page. This will be used as a link destination
+ of the `Home' button seen on the first page of the \app{eCards} document.
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small]
+\ecHomePage{http://www.math.uakron.edu/~dpstory/acrotex.html}
+\end{Verbatim}
+
+\item \cs{noHintJSAction}: When there are no hints (the document author has taken the
+option \texttt{nohints}, the `hints' button is grayed out, but still functional, with
+no JavaScript action. You can add some action to this button through this command.
+An example of usage is
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small]
+\renewcommand\noHintJSAction{app.alert("No hints provided!")}
+\end{Verbatim}
+\end{itemize}
+\hyperref[s:addiCus]{Section~\ref*{s:addiCus}} lists more customization
+commands, available with version~2 or later of \app{eCards}.
+
+\subsection{\texorpdfstring{\protect\cs{begin\{document\}}}
+{\textbackslash{begin\{document\}}}: Start creating cards}
+
+The process of creating these electronic cards is quite simple, the sections below
+describe the \texttt{card}, \texttt{response}, \texttt{hint} and \texttt{answers} environments.
+
+\subsubsection{The \texttt{card} environment}\label{ss:cardEnv}
+
+The main environment is the \texttt{card} environment, which is used for posing
+questions, offering a hint, and an answer. The \hypertarget{cardsyntax}{syntax} is,
+\bVerb\takeMeasure{\string\begin\darg{card}[hint|nohint]}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\begin{card}[hint|nohint]
+ !ameta(a question)
+ \begin{response}
+ \begin{hint}
+ !ameta(a hint)
+ \end{hint}
+ \begin{answer}
+ !ameta(an answer)
+ \end{answer}
+ \end{response}
+\end{card}
+\end{dCmd}
+\eVerb The optional parameter takes one of two keys,
+\texttt{hint} or \texttt{nohint}. Normally, each question contains a hint,
+but there is an option, \texttt{nohints}, for declaring that no hints are to
+be used for the question. You can pass one of these two parameters into the
+\texttt{card} environment to declare there is a hint for this question (in
+the case \texttt{nohints} is selected as an option), or to declare there is
+no hint for this question (in the case \texttt{nohints} \emph{is not} an
+option). If no parameter is passed, it is assumed the question has a hint,
+unless the \texttt{nohints} option is used, in which case it is assumed the
+question has no hint.
+
+Below is the first \env{card} environment for \texttt{ecardstst.tex} showing the nesting
+of the \env{card}, \env{response}, \env{hint}, and \env{answer} environments.
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small]
+\begin{card}
+ Who was the first President of the United States?
+\begin{response}
+ \begin{hint}
+ Legend has it, he chopped down the cherry tree and
+ couldn't tell a lie.
+ \end{hint}
+ \begin{answer}
+ \ifecListing
+ George Washington (1789-1797)
+ \else\centering
+ \includegraphics[scale=.4]{presidents/gw1}\\
+ George Washington\\
+ 1789-1797
+ \fi
+ \end{answer}
+\end{response}
+\end{card}
+\end{Verbatim}
+The role of \cs{ifecListing} is also shown in the above verbatim listing.
+When \opt{listing} is specified, there is no need for the graphic; we use a
+text phrase instead.
+
+
+\newtopic\noindent\textbf{\textcolor{red}{Important.}} You can pose a question which requires
+a verbal response, or one for which there is a choice of
+alternatives, or a fill-in the blank (math or text). See the demo
+file \texttt{ecardstst.tex} for examples.
+
+\subsubsection{The \texttt{response} environment}
+
+Immediately following and nesting within the \env{card} environment is the
+\env{response} environment. This sets things up for the responses to the
+question: the hint and the answer.
+
+\subsubsection{The \texttt{hint} environment}\label{hint}
+
+The first environment to appear within the \texttt{response} is
+the \env{hint} environment. Here you can provide additional
+information to help the student answer the question successfully.
+I've posed a multiple choice or fill-in question, you can simply
+copy the multiple choice or fill-in into the hint, just as I have done
+in the demo file \texttt{ecardstst.tex}.
+
+In this release, hints can be provided for \textbf{all} of the questions or
+for \textbf{none} of the questions. You can enter hints using the \env{hint}
+environment, illustrated \hyperlink{cardsyntax}{above}, or not include a
+\env{hint} environment. When you do not want to include hints---whether
+you've entered the environments or not---use the \opt{nohints} package
+option. This will convert the \env{hint} environment into a \texttt{comments}
+environment, and redefine some of the navigational buttons.
+
+\subsubsection{The \texttt{answer} environment}
+
+After the \env{hint} environment comes the answer environment where the answer to
+the original question can be presented. At the end of this environment, you
+need to back out of the nested environments: \cs{end\darg{answer}},
+\cs{end\darg{response}} and \cs{end\darg{card}}.
+
+\subsection{\texorpdfstring{\protect\cs{end\{document\}}}{\textbackslash{end\{document\}}}}
+
+That's the end! Once you have completed your \app{eCards} file, you are
+ready to create your \app{eCards} PDF document!
+%The \app{eCards} package supports PDF
+%creation using any of the following methods:
+%\begin{enumerate}
+% \item $\text{\texttt{.tex}}\mapsto\text{\texttt{.dvi}}\mapsto\text{\texttt{.ps}}\mapsto\text{\texttt{.pdf}}$.
+% This route uses the \texttt{dvipsone} or \texttt{dvips} option
+% (for the \textsf{web} package), followed by the use of the
+% Acrobat Distiller (Version 5.0 or later suggested).
+% \item $\text{\texttt{.tex}}\mapsto\text{\texttt{.dvi}}\mapsto\text{\texttt{.pdf}}$. Here, you latex the
+% document, then hit the result using \textsf{dvipdfm}. Naturally, you would use the \texttt{dvipdfm}
+% option with the \textsf{web} package.
+% \item $\text{\texttt{.tex}}\mapsto\text{\texttt{.pdf}}$. Here, you use the \texttt{pdftex} option
+% of \textsf{web}, and \textsf{pdflatex} the document.
+%\end{enumerate}
+
+
+\subsection{Additional customization commands}\label{s:addiCus}
+
+Version~2.0 or later has a number of commands designed to customize the look of \app{eCards} without
+having to redefine some of the environments.
+
+\subsubsection{The question page}
+
+In addition to \cs{cardColor}, described briefly in \Nameref{ss:origCus}, the following are also defined
+on the question page.
+\bVerb\takeMeasure{\string\ecAfterQuesSkip\darg{\ameta{skip}}}%
+\edef\x{\the\wd\webtempboxi}%
+\def\1{\hbox to0pt{\hskip\x\relax\quad\normalfont(\texttt{.25in})\hss}}%
+\def\2{\hbox to0pt{\hskip\x\relax\quad\normalfont(\texttt{.85\string\linewidth})\hss}}%
+\takeMeasure{\string\renewcommand\darg{\string\ecQUESTION}\darg{\string\textbf\darg{QUESTION}}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\renewcommand{\ecQUESTION}{\textbf{QUESTION}}
+!1\ecAfterQuesSkip{!ameta(skip)}
+!2\ecQuesWidth{!ameta(length)}
+\end{dCmd}
+\eVerb The \cs{ecQUESTION} command defines the title for the question page;
+the default definition is given. Beneath \cs{ecQUESTION} is a vertical space
+of \ameta{skip} determined by the argument of \cs{ecAfterQuesSkip}, its
+default is given in parenthesis. The content of the question page is
+contained in a minipage of width \ameta{length} determined by the argument of
+\cs{ecQuesWidth}, its default value is given in parenthesis.
+
+\subsubsection{The hint page}
+
+In addition to \cs{hintColor}, described briefly in \Nameref{ss:origCus}, the following are also defined
+on the hint page.
+\bVerb\takeMeasure{\string\ecAfterHintSkip\darg{\ameta{skip}}}%
+\edef\x{\the\wd\webtempboxi}%
+\def\1{\hbox to0pt{\hskip\x\relax\quad\normalfont(\texttt{.25in})\hss}}%
+\def\2{\hbox to0pt{\hskip\x\relax\quad\normalfont(\texttt{.85\string\linewidth})\hss}}%
+\takeMeasure{\string\ecAfterHintSkip\darg{\ameta{skip}}\quad\normalfont(\texttt{.85\string\linewidth})}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\renewcommand{\ecHINT}{\textbf{HINT}}
+!1\ecAfterHintSkip{!ameta(skip)}
+!2\ecHintWidth{!ameta(length)}
+\end{dCmd}
+\eVerb The \cs{ecHINT} command defines the title for the hint page;
+the default definition is given. Beneath \cs{ecHINT} is a vertical space
+of \ameta{skip} determined by the argument of \cs{ecAfterHintSkip}, its
+default is given in parenthesis. The content of the question page is
+contained in a minipage of width \ameta{length} determined by the argument of
+\cs{ecHintWidth}, its default value is given in parenthesis.
+
+
+
+When there is no hint provided, the content of the \env{hint} environment is
+not displayed, in its place the command \cs{noHintProvided} is expanded. The
+default definition of which is given below.\phantomsection\label{noHintProvided}
+\bVerb\takeMeasure{\string\renewcommand\darg{\string\noHintProvided}\darg{No hint provided for this question.}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\renewcommand{\noHintProvided}{No hint provided for this question.}
+\end{dCmd}
+\eVerb The command may be redefined as desired in the preamble.
+
+\subsubsection{The answer page}
+
+In addition to \cs{solnColor}, described briefly in \Nameref{ss:origCus}, the following are also defined
+on the answer page.
+\bVerb\takeMeasure{\string\ecAfterAnsSkip\darg{\ameta{skip}}}%
+\edef\x{\the\wd\webtempboxi}%
+\def\1{\hbox to0pt{\hskip\x\relax\quad\normalfont(\texttt{.25in})\hss}}%
+\def\2{\hbox to0pt{\hskip\x\relax\quad\normalfont(\texttt{.85\string\linewidth})\hss}}%
+\takeMeasure{\string\ecAfterAnsSkip\darg{\ameta{skip}}\quad\normalfont(\texttt{.85\string\linewidth})}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\renewcommand{\ecANS}{\textbf{ANSWER}}
+!1\ecAfterAnsSkip{!ameta(skip)}
+!2\ecAnsWidth{!ameta(length)}
+\end{dCmd}
+\eVerb The \cs{ecANS} command defines the title for the answer page;
+the default definition is given. Beneath \cs{ecANS} is a vertical space
+of \ameta{skip} determined by the argument of \cs{ecAfterAnsSkip}, its
+default is given in parenthesis. The content of the answer page is
+contained in a minipage of width \ameta{length} determined by the argument of
+\cs{ecAnsWidth}, its default value is given in parenthesis.
+
+\subsubsection{The navigation icons}
+
+The navigation icons have labels on them, which may be redefined for language
+localization. The labels are defined through the arguments of the commands
+below. The arguments given are the default (English) declarations.
+
+\bVerb\takeMeasure{\string\ecHintSolnLabel\darg{Soln} \string\ecRandomLabel\darg{Random}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\ecSolnLabel{Soln} \ecBeginLabel{Begin}
+\ecHintLabel{Hint} \ecHomeLabel{Home}
+\ecNextLabel{Next} \ecFinHomeLabel{Home}
+\ecPrevLabel{Prev} \ecFSLabel{FS}
+\ecHintNextLabel{Next} \ecCloseLabel{Close}
+\ecHintSolnLabel{Soln} \ecRandomLabel{Random}
+\end{dCmd}
+\eVerb The meaning of these commands, it is hoped, is self-evident.
+
+The size of the icons are determined by four commands.
+\bVerb\takeMeasure{\string\renewcommand\string\iconWidthPanel\darg{28pt}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\renewcommand\iconWidth{40pt}
+\renewcommand\iconHeight{15pt}
+\renewcommand\iconWidthPanel{28pt}
+\renewcommand\panelGrpWidth{57pt}
+\end{dCmd}
+\bVerb \cs{iconWidth} and \cs{iconHeight} set the dimensions of the
+navigation icons when a panel option is not taken; \cs{iconWidthPanel} and
+\cs{iconHeight} are the dimensions of the icons when they appear in the panel.
+The \cs{panelGrpWidth} is the overall width of the group of icons in the
+panel.
+
+\subsubsection{The \texttt{listing} option}
+
+There are some minor formatting commands that take effect when the
+\opt{listing} option is used.
+\bVerb\takeMeasure{\string\renewcommand\darg{\string\leadAnsFmtForPaper}\darg{\string\textbf\darg{Ans:\string\thinspace[}}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\renewcommand{\leadAnsFmtForPaper}{\textbf{Ans:\thinspace[}}
+\renewcommand{\trailAnsFmtForPaper}{\textbf{]}}
+\end{dCmd}
+\bVerb The effects of this formatting is seen in
+\hyperref[fig:ecards-listing]{Figure~\ref*{fig:ecards-listing}}; look for the bold
+\texttt{Ans:} in question~4. To remove this formatting, simply redefine the
+two commands
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\renewcommand{\leadAnsFmtForPaper}{}
+\renewcommand{\trailAnsFmtForPaper}{}
+\end{Verbatim}
+No formatting was the standard for \app{eCards} prior to version~2.0.
+
+\subsubsection{Alert messages}
+
+Several alert boxes appear in response to pressing buttons or links, we list
+some of the more important ones. All redefinitions must occur in the preamble
+of the document.
+\bVerb\takeMeasure{\string\renewcommand\string\eqsqrtmsg\darg{"Right!"}}%
+\begin{dCmd}[commandchars=*()]{\bxSize}
+\renewcommand\eqsqrtmsg{"Right!"}
+\renewcommand\eqsqwgmsg{"Wrong!"}
+\end{dCmd}
+\bVerb The above two definitions are from \pkg{exerquiz}, they are the message that appears (in an alert box)
+to indicate to the user that his/her response is correct or wrong.
+
+\bVerb\takeMeasure{\string\renewcommand\darg{\string\nonrandomizedMsg}\darg{The cards will be delivered}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\cardsFinishedMsg{You've seen all the cards!}
+\renewcommand{\pressBeginMsg}{Press the \"Begin\" button to
+ begin viewing the cards.}
+\renewcommand{\randomizedMsg}{The cards will be delivered
+ to you in random order.}
+\renewcommand{\nonrandomizedMsg}{The cards will be delivered
+ to you in their natural order.}
+\end{dCmd}
+\bVerb The first message appears when the user has gone through all the
+cards. The second message appears when the user does not press the
+``\textsf{Begin}'' button. The third and fourth inform the user the state of
+the delivery of the cards; one of these messages appear when the state of the
+``\textsf{Random}'' checkbox is changed.
+
+\subsubsection{Miscellaneous customizations}
+
+The ``\textsf{Random}'' checkbox has a tooltip message that can be
+customized. Below is the default message.
+\bVerb\takeMeasure{\string\renewcommand\darg{\string\toggleRandomizeTU}\{Click to toggle between}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\renewcommand{\toggleRandomizeTU}{Click to toggle between
+ random and natural order.}
+\end{dCmd}
+\bVerb
+
+\subsubsection{\texorpdfstring{\protect\pkg{web}}{web} customizations}
+
+The \pkg{web} package has may commands for modifying the look of the PDF page. The author is
+referred to the {\AEB} manual for details.
+
+%\revisionLabel and \versionLabel
+
+
+\bigskip\noindent
+Go to it, and be creative and enjoy! Now, back to my retirement. \dps
+
+\end{document}
+
+\bVerb\takeMeasure{\string\begin\darg{card}[hint|nohint]}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\begin{card}[hint|nohint]
+ !ameta(a question)
+ \begin{response}
+ \begin{hint}
+ !ameta(a hint)
+ \end{hint}
+ \begin{answer}
+ !ameta(an answer)
+ \end{answer}
+ \end{response}
+\end{card}
+\end{dCmd}
+\eVerb
diff --git a/texmf-dist/source/latex/ecards/ecard.cus b/texmf-dist/source/latex/ecards/ecard.cus
new file mode 100644
index 00000000..07ae32b6
--- /dev/null
+++ b/texmf-dist/source/latex/ecards/ecard.cus
@@ -0,0 +1,9 @@
+% Customize to your heart's content in this file.
+% Here is a simple example. When the listing option is taken change "Hint" to
+% "Try This!".
+\ifecListing
+\renewcommand{\listing@headHint}
+{%
+ \par\textit{Try this}!\space\ignorespaces
+}
+\fi
diff --git a/texmf-dist/source/latex/ecards/ecards.dtx b/texmf-dist/source/latex/ecards/ecards.dtx
new file mode 100644
index 00000000..7eda9651
--- /dev/null
+++ b/texmf-dist/source/latex/ecards/ecards.dtx
@@ -0,0 +1,1331 @@
+%\iffalse
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% ecards.sty package, %%
+%% Copyright (C) 1999-2016 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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{ecards}
+%<package> [2016/09/03 v2.0e eCards: An electronic flash cards package (dps)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex=false]{hyperref}
+%\pdfstringdefDisableCommands{\let\\\textbackslash}
+\OnlyDescription % comment out for implementation details
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\InputIfFileExists{aebdocfmt.def}{\PackageInfo{ecards}{Inputting aebdocfmt.def}}
+ {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax
+ \PackageInfo{ecards}{aebdocfmt.def cannot be found}}
+\let\pkg\textsf
+\let\env\texttt
+\begin{document}
+ \GetFileInfo{ecards.sty}
+ \title{eCards: Electronic Flash Cards}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@uakron.edu}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \let\Email\texttt
+ \DocInput{ecards.dtx}
+\IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here.\\Execute
+ \texttt{makeindex -s gind.ist -o ecards.ind ecards.idx} on the command line and recompile
+ \texttt{ecards.dtx}.}
+\IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here.\\Execute
+ \texttt{makeindex -s gglo.ist -o ecards.gls ecards.glo} on the command line and recompile
+ \texttt{ecards.dtx}.}
+\end{document}
+%</driver>
+% \fi
+% \MakeShortVerb{|}
+% \InputIfFileExists{aebdonotindex.def}{\PackageInfo{web}{Inputting aebdonotindex.def}}
+% {\PackageInfo{web}{cannot find aebdonotindex.def}}
+% \DoNotIndex{\kern}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \changes{v2.0e}{2016/09/03}{Improved documentation in \string\texttt{ecardsman.pdf}}
+%
+% \section{Introduction}
+%
+% The initial version of this package was developed at the request of
+% my colleague, Dr.\ Thomas Price, for use in the senior honors
+% project of Ms.\ Katie Jones on
+% \href{http://www.math.uakron.edu/~teprice/Trig/}{Trig Flash Cards}.
+% Upon completion of the honors project, I generalized and extended
+% the original package developed specifically for them.
+%
+% \section{Documentation}
+%
+% In this section, the major elements of this package are highlighted. For those
+% who want to know more, you can peruse the {\LaTeX} code, there are comments
+% contained there as well.
+%
+% \subsection{Preamble: Required Packages and Options}
+%
+% \subsubsection{Required Packages}
+%
+% This package depends heavily on the
+% \textbf{\href{http://www.math.uakron.edu/~dpstory/webeq.html}
+% {Acro\negthinspace\TeX{} eDucation Bundle}}: (1) the \textsf{web}
+% package provides page setup, backgrounds, and navigation
+% elements; (2) the \textsf{exerquiz} package allows you to author
+% the questions, both non-responsive and responsive (fill-in and
+% multiple choice); and (3) the \textsf{insdljs} packages is the
+% mechanism for introducing document-level JavaScripts into the
+% final document.
+%
+% Each of the packages listed above have their own required packages:
+% \textsf{hyperref}, \textsf{color}, \textsf{verbatim}, \textsf{everyshi}
+% and \textsf{eso-pic}. Theses are all available as part of the standard
+% distribution of {\LaTeX} or through any CTAN site.
+%
+% \subsubsection{Options}
+%
+% \paragraph{eCards options.}\hskip-\lastskip\
+% The \textsf{eCards} package really has only 4 options:
+% \begin{enumerate}
+% \item \texttt{nohints}: If you do not want to provide hints in your eCards,
+% use this option. See also the comments in \Nameref{hint}.
+% \item \texttt{listing}:\label{listing} This option gives you a printable version of your
+% eCards. In this way, you can proofread, check your questions, hints,
+% and answers. Suggested packages and options are given below:
+%\begin{verbatim}
+%\usepackage[<driver_option>,forpaper,tight,nodirectory]{web}
+%\usepackage[solutionsafter,proofing,preview]{exerquiz}
+%\usepackage[listing]{eCards}
+%\end{verbatim}
+% \item \texttt{memLogo}: The logo, if any, is read and re-read
+% for each page on which it appears. Using this option, the logo
+% is read once and saved in a box for use.
+% \item \texttt{custom}: If this option is chosen, the package
+% will look for and input a file \texttt{ecard.cus}. This file can
+% be used to customize the environments. This file should be kept
+% in the source directory, not in the {\LaTeX} search path.
+% \end{enumerate}
+%
+% \paragraph{Other options.}\hskip-\lastskip\
+% Selecting the various options of the \textsf{web} and
+% \textsf{exerquiz} packages can give you different looks. It is
+% important to be aware of all the options associated with these
+% two package; in the paragraphs below, various options are
+% discussed that may be useful in \textsf{eCards}.
+%
+%\paragraph{Useful Web Package Options.}\hskip-\lastskip\
+% There are three background/panel options: \texttt{usetemplates},
+% \texttt{rightpanel} and \texttt{leftpanel}. Using the
+% \texttt{usetemplates} option does not give you the vertical
+% navigation strip, but it does give you the background colors;
+% the \texttt{rightpanel} and \texttt{leftpanel} given you a
+% vertical panel on the right and left, respectively. Use one of
+% these three options only, if any at all. Using none of these three
+% will just get you the default white background.
+%
+%There are certain ``standard'' page designs, or you can create your own using
+%the \cs{margins} and \cs{screensize}; the demo document has
+%\begin{verbatim}
+%\margins{.25in}{.25in}{24pt}{.25in} % left,right,top, bottom
+%\screensize{3.72in}{366.24bp} % height, width
+%\end{verbatim}
+% See the \textsf{Web} package documentation for details on these and other
+% options.
+%
+% \paragraph{Useful Exerquiz Package Options.}\hskip-\lastskip\
+% If you are not using multiple choice or fill-in questions, you should use
+% the \texttt{exercisesonly} option. This removes much of the document level JavaScript
+% from the PDF document.
+%
+% For authors that use the full Acrobat~5.0, or the newer Acrobat
+% 6.0 Standard or Acrobat 6.0 Professional, you can use the
+% \texttt{execJS} option. If this option is taken, then when the
+% document is first loaded into Acrobat (following distillation, or
+% creation using \textsf{dvipdfm} or \textsf{pdftex}), the document
+% will be automatically saved; this saves any imported document
+% level JavaScript in the document. The document always needs to be saved
+% after creation so save the scripts with the document, this does it automatically
+% so you can't forget to do it---as one of my colleagues once did.
+%
+% The \texttt{nosolutions} option removes the \texttt{response} environment
+% leaving only the questions. The \texttt{proofing} and \texttt{preview} options
+% can be useful for proofreading, as described in the \texttt{\hyperref[listing]{listing}}
+% option described above.
+%
+% \subsection{\texorpdfstring{\protect\cs{begin\{document\}}}{\textbackslash begin\{document\}}: Start creating Cards}
+%
+% The process of creating these electronic cards is quite simple, the sections below
+% describe the various environments used.
+%
+% \subsubsection{The \texttt{card} Environment}
+%
+% The main environment is the \texttt{card} environment, which is used for posing
+% questions, offering a hint, and an answer. The \hypertarget{cardsyntax}{syntax} is
+%\begin{verbatim}
+%\begin{card}
+% < a question >
+% \begin{response}
+% \begin{hint}
+% < a hint >
+% \end{hint}
+% \begin{answer}
+% < an answer >
+% \end{answer}
+% \end{response}
+%\end{card}
+%\end{verbatim}
+% \textcolor{red}{Important.} You can pose a question which requires
+% a verbal response, or one for which there is a choice of
+% alternatives, or a fill-in the blank (math or text). See the demo
+% file \texttt{ecardstst.tex} for examples.
+%
+% \subsubsection{The \texttt{response} Environment}
+%
+% Immediately following and nested within the \texttt{card} environment is the \texttt{response}
+% environment. This sets things up for the responses to the question: the hint
+% and the answer.
+%
+% \subsubsection{The \texttt{hint} Environment}\label{hint}
+%
+% The first environment to appear within the \texttt{response} is
+% the \texttt{hint} environment. Here you can provide additional
+% information to help the student answer the question successfully.
+% I've you've posed a multiple choice or fill-in question, you can simply
+% copy the multiple choice or fill-in into the hint, just as I have done
+% in the demo file \texttt{ecardstst.tex}.
+%
+% In this release, hints can be provided for \textbf{all} of the questions or for
+% \textbf{none} of the questions. You can enter hints using the
+% \texttt{hint} environment, illustrated \hyperlink{cardsyntax}{above}, or not include a
+% \texttt{hint} environment. When you do not want to include
+% hints---whether you've entered the environments or not---use the
+% \texttt{nohints} package option. This will convert the
+% \texttt{hint} environment into a \texttt{comments}, and redefined
+% some of the navigation buttons.
+%
+% \subsubsection{\texttt{answer} Environment}
+%
+% After the hint environment comes the answer environment where the answer to the original question
+% can be presented. At the end of this environment, you need to back out of your nest:
+% \verb+\end{answer}+, \verb+\end{response}+ and \verb+\end{card}+.
+%
+% \subsection{\texorpdfstring{\protect\cs{end\{document\}}}{\textbackslash end\{document\}}}
+%
+% \section{Main Code}
+%
+% \subsection{Declare Options}
+%
+% This package builds upon the \textbf{Acro\negthinspace\TeX{} eDucation Bundle}, the options of the
+% \textsf{web} and \textsf{exerquiz} packages can be used with with \textsf{eCards}. Additional options
+% are declared below.
+% The logo, if any, is read and re-read for each page on which it appears. Using the \texttt{memLogo}\IndexOpt{memLogo}
+% option, the logo is read once and saved in a box for use.
+% \begin{macrocode}
+\let\ec@YES=y \let\ec@NO=n
+\DeclareOption{memLogo}{\let\@memLogo\ec@YES}
+\let\@memLogo\ec@NO
+% \end{macrocode}
+% The \texttt{listing}\IndexOpt{listing} gives a listing of questions, hints, and answers. When used in conjunction
+% with various \textsf{exerquiz} options, this option can be used to review all cards and answers.
+% Suggested options:
+%\begin{verbatim}
+%\usepackage[<driver_option>,forpaper,tight]{web}
+%\usepackage[solutionsafter,proofing]{exerquiz}
+%\usepackage[memLogo,listing]{ecards}
+%\end{verbatim}
+% The boolean switch \cs{ecListing} can be used to get a better looking listing by removing
+% graphics---see the demo file \texttt{ecardstst.tex}.
+% \begin{macrocode}
+\DeclareOption{listing}{\ecListingtrue}
+\newif\ifecListing \ecListingfalse
+% \end{macrocode}
+% If \texttt{custom}\IndexOpt{custom} option is chosen, the package will look for and input a file \texttt{ecard.cus}.
+% This file can be used to customize the environments. This file should be kept in the
+% source directory, not in the {\LaTeX} search path.
+% \begin{macrocode}
+\DeclareOption{custom}{\let\@ecCustom\ec@YES}
+\let\@ecCustom\ec@NO
+% \end{macrocode}
+% In some applications, the author may not want to have hints provided, so, compile
+% the document with the \texttt{nohints}\IndexOpt{nohints} option.
+% \begin{macrocode}
+\DeclareOption{nohints}{\def\opts@ecNoHints{nohint}%
+\def\defaultecNoHints{\useNoHints}\defaultecNoHints}
+\newif\ifisQues \isQuesfalse
+% \end{macrocode}
+% \DescribeMacro{\useNoHints} is a user accessible command for changing the default setting of whether
+% to provide a hint or not. It must be expanded outside the \env{card} environment. The \cs{useNoHints}
+% command starts a new page unless the \texttt{listing} option has been taken. The \cs{newpage} enables
+% the navigation panel to get state of the hint correctly.
+% \begin{macrocode}
+\def\useNoHints{\ifecListing\else\newpage\fi\ecUseNoHints}
+% \end{macrocode}
+% \changes{v2.0a}{2016/07/23}{For the Hint page, changed the address to conform to what works
+% in the new exerquiz, \cs{hintDest} (\string\texttt{ex\cs{exnoCard}} rather than \string\texttt{ex.\cs{exnoCard}}),
+% same for \cs{solnDest}}
+% Changed the destinations for \cs{hintDest} and \cs{solnDest}.
+%
+% The \cs{ecUseNoHints} is an ``internal'' command used within the \env{card}
+% environment and in the solutions file; it is also the continuation of \cs{useNoHints}.
+% \changes{v2.0d}{2016/08/02}{Added \string\cs{ecUseNoHints} and \string\cs{ecUseHints}}
+% \begin{macrocode}
+\def\ecUseNoHints{\ifisQues
+ \expandafter\def\else\expandafter\gdef\fi\opts@ecNoHints{nohint}%
+ \global\let\@ecNoHints\ec@YES
+ \gdef\hintDest{ex\exnoCard}\gdef\solnDest{ex\exnoCard.s}%
+ \gdef\hintDestJS{ex.\exnoCard}\gdef\quesDestJS{ex.\exnoCard}%
+}
+% \end{macrocode}
+% \DescribeMacro{\useHints} is a user accessible command for changing the default setting of whether
+% to provide a hint or not. It must be expanded outside the \env{card} environment. The \cs{useHints}
+% command starts a new page unless the \texttt{listing} option has been taken. The \cs{newpage} enables
+% the navigation panel to get state of the hint correctly.
+% \begin{macrocode}
+\def\useHints{\ifecListing\else\newpage\fi\ecUseHints}
+% \end{macrocode}
+% The \cs{ecUseHints} is an ``internal'' command used within the \env{card}
+% environment and in the solutions file; it is also the continuation of \cs{useHints}.
+% \begin{macrocode}
+\def\ecUseHints{\ifisQues
+ \expandafter\def\else\expandafter\gdef\fi\opts@ecNoHints{hint}%
+ \global\let\@ecNoHints\ec@NO
+ \gdef\hintDest{ex\exnoCard}\gdef\solnDest{ex\exnoCard.s}%
+ \gdef\hintDestJS{ex.\exnoCard}\gdef\quesDestJS{qex.\exnoCard}%
+}
+\def\opts@ecNoHints{hint}
+\def\defaultecNoHints{\useHints}
+\defaultecNoHints
+% \end{macrocode}
+% To present the cards are presented to the user in their natural order, rather
+% than in a randomized order, use the \texttt{notrandomized}\IndexOpt{notrandomized} option.
+% \begin{macrocode}
+\DeclareOption{notrandomized}{\def\israndomized{false}
+ \def\cbInitState{Off}}
+\def\israndomized{true}
+\def\cbInitState{randomOrder}
+% \end{macrocode}
+% \subsection{ProcessOptions and Required Packages}
+% \begin{macrocode}
+\ProcessOptions
+\RequirePackage{web}
+\RequirePackage{exerquiz}[2016/04/18]
+% \end{macrocode}
+% \subsection{String Data}
+% \begin{macro}{\cardsFinishedMsg}
+% When user finishes the cards, a message appears announcing that event. The
+% \cs{cardsFinishedMsg} holds the content of that message.
+% \begin{macrocode}
+\newcommand{\cardsFinishedMsg}[1]{\def\CARDSFINISHED{#1}}
+\cardsFinishedMsg{You've seen all the cards!}
+% \end{macrocode}
+% \end{macro}
+% \subsection{Colors for Backgrounds}
+% Some definitions for coloring the background page for the question page, the
+% hint page and the answer page.
+% \begin{macrocode}
+\textBgColor{cornsilk}
+\def\cardColor#1{\def\@cardColor{#1}}
+\def\hintColor#1{\def\@hintColor{#1}}
+\def\solnColor#1{\def\@solnColor{#1}}
+% \end{macrocode}
+% Default colors
+% \begin{macrocode}
+\cardColor{vlightblue}
+\hintColor{cornsilk}
+\solnColor{webyellow}
+% \end{macrocode}
+% \subsection{Modifying Exerquiz Environments}
+% \begin{macrocode}
+% \let\web@copyright\@gobble
+\let\exnoCard\the@exno
+\let\web@rightheader\@empty
+\def\io#1{\immediate\write\@auxout{#1}}
+% \end{macrocode}
+% \subsubsection{Modify the \texttt{exercise} Environment}
+% The \cs{endsolnexerhookaux} macro gets executed just prior to the end of the
+% solution environment, but before the final trailer is written to the .sol file. Here,
+% we use it to insert a navigation bar at the bottom of the solution page.
+% \begin{macrocode}
+\def\endsolnexerhookaux{%
+ \ifnum\@panelconfig=0\relax
+ \immediate\write\verbatim@out
+ {\string\insNaviBar*{\hfil\string\NextCard\string\ %
+ \string\PrevCard\string\ \string\ToggleOrder\hfil}}%
+ \fi
+}
+\def\include@solutions{%
+ \let\webnewpage\relax
+ \immediate\closeout\ex@solns
+ \ifeq@nosolutions\else
+ \iftherearesolutions\newpage\markright{\exsecrunhead}%
+ \ifx\webnewpage\relax
+ \def\webnewpage{\let\webnewpage\newpage}%
+ \fi
+ \eqsolutionshook
+ \addcontentsline{toc}{section}
+ {\protect\numberline{}\exsectitle}%
+ \input{\jobname.sol}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Write the total number of questions (cards) to the aux file.
+% \begin{macrocode}
+\AtEndDocument{\io{\string\gdef\string\totalCards{\exnoCard}}\clearpage}
+% \end{macrocode}
+% This macro holds the number of cards composed.
+% \begin{macrocode}
+\def\theNumCards{\csname totalCards\endcsname}
+% \end{macrocode}
+% \cs{nMarker} identifies the type of page, 0 for a question, 1 for a hint, 2 for a solution
+% \begin{macrocode}
+\let\ec@Zero=0 \let\ec@One=1 \let\ec@Two=2
+\def\ec@Ques{0}\def\ec@Hint{1}\def\ec@Soln{2}
+\def\nMarkerSet#1{\gdef\nMarker{#1}}
+\nMarkerSet\ec@Ques
+% \end{macrocode}
+% Redefine \cs{ReturnTo} so there is no link, we encourage the user to use the navigation
+% buttons.
+% \begin{macrocode}
+\def\ReturnTo#1#2{\eq@fititin#2}
+% \end{macrocode}
+% Miscellaneous macro definitions associated with the \textsf{exercise} environment.
+% \begin{macrocode}
+\renewcommand\exsecrunhead{}
+\renewcommand\exlabel{}
+\renewcommand\exsectitle{}
+% \end{macrocode}
+%\changes{v2.0a}{2016/07/23}{Added modified formatting for the \string\texttt{proofing} option
+% of \string\textsf{exerquiz}}
+% Modified formatting for the \texttt{proofing} option of \textsf{exerquiz}. Added two new commands
+% \DescribeMacro{\leadAnsFmtForPaper}\cs{leadAnsFmtForPaper}
+% and \DescribeMacro\trailAnsFmtForPaper\cs{trailAnsFmtForPaper}.
+% \changes{v2.0c}{2016/07/29}{Added forpaper formatting}
+% \begin{macrocode}
+\newcommand{\leadAnsFmtForPaper}{\textbf{Ans:\thinspace[}}
+\newcommand{\trailAnsFmtForPaper}{\textbf{]}}
+\def\math@correctAnswer{\unskip\ifeqforpaper\leadAnsFmtForPaper\fi
+ {\ttfamily\color{\@proofingsymbolColor}\spaceskip=2pt\xspaceskip=2pt
+ \expandafter\gobbleMacro\meaning\eqCorrectAns}%
+ \ifeqforpaper\trailAnsFmtForPaper\fi
+}
+\def\txt@correctAnswer{\unskip\ifeqforpaper\textbf{Ans:\thinspace[}\fi
+ {\ttfamily\color{\@proofingsymbolColor}%
+ \spaceskip=2pt\xspaceskip=2pt
+ \expandafter\gobbleTxt\meaning\rbTxtAlt}\ifeqforpaper\textbf{]}\fi
+}
+% \end{macrocode}
+%
+% \subsubsection{The \texttt{multiChoice} Environment}
+%
+% The \texttt{multiChoice} environment is an \texttt{answer} environment (of \textsf{exerquiz} placed within
+% an \texttt{oQuestion} environment (\textsf{exerquiz}).
+%
+% \begin{environment}{multiChoice}
+% An environment for posing a multiple choice question, based on the \texttt{shortquiz} environment
+% of \textsf{exerquiz}.
+% \begin{macrocode}
+\newenvironment{multiChoice}[1]{\par
+ \if\nMarker\ec@Ques
+ \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3);
+ this.gotoNamedDest("\hintDestJS");}%
+ \fi
+% \end{macrocode}
+% \changes{v2.0}{2016/07/20}{\string\cs{sq@IDTxtField} in the new \string\textsf{exerquiz} is enclosed in an \string\cs{makebox},
+% text normally follows it, but here is does not, so we'll have to compensate.}
+% \changes{v2.0}{2016/07/20}{Remove \string\texttt{shortquiz} environment, replace with \string\texttt{oQuestion}}
+% \cs{sq@IDTxtField} in the new \textsf{exerquiz} is enclosed in an \cs{makebox},
+% text normally follows it, but here is does not, so we'll have to compensate.
+% \begin{macrocode}
+ \vskip-\baselineskip % dps
+ \begin{oQuestion}{\if\nMarker\ec@Ques\hintDest
+ \ifisHint.h\fi\else\solnDest\fi}%
+ \begin{answers}[\solnDest]{#1}%
+}{%
+ \end{answers}
+ \end{oQuestion}
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \subsubsection{The \texttt{fillIn} Environment}
+%
+% The \texttt{fillIn} environment is modified \texttt{oQuestion} environment (\textsf{exerquiz}),
+% within which the commands \cs{RespBoxMath} and \cs{RespBoxTxt} (\textsf{exerquiz}) are defined.
+%
+% Set the appearance of any text fields that the author might use.
+% \begin{macrocode}
+\ifecListing
+ \ifeq@proofing
+ \everyRespBoxTxt{\Ff\FfReadOnly\BG{}\BC{}}
+ \everyRespBoxMath{\Ff\FfReadOnly\BG{}\BC{}}\else
+ \everyRespBoxTxt{\BG{1 1 1}}\everyRespBoxMath{\BG{1 1 1}}\fi
+\else
+ \everyRespBoxTxt{\BG{1 1 1}}\everyRespBoxMath{\BG{1 1 1}}
+\fi
+% \end{macrocode}
+% \begin{environment}{fillIn}
+% The \texttt{fillIn} environment one to pose a fill in type question, either
+% text or math. Based on the \texttt{oQuestion} environment of \textsf{exerquiz}.
+% \begin{macrocode}
+\newenvironment{fillIn}{%
+ \def\RespBoxTxtOnBlur{ecOnBlurRespBox(retn, \exnoCard, \nMarker);}%
+ \begin{oQuestion}{\if\nMarker\ec@Ques\hintDest\else\solnDest\fi}%
+}{\end{oQuestion}}
+% \end{macrocode}
+% \end{environment}
+%
+% \subsection{New Environments}
+% \subsubsection{The \texttt{card} Environment}
+% \begin{environment}{card}
+% This is the main environment for writing questions, hints and answers. This environment
+% encloses all. It is based on the \texttt{exercise} environment of \textsf{exerquiz}.
+% \begin{macrocode}
+\def\ec@isHint{hint}
+\def\ec@isNoHint{nohint}
+\def\ec@HintsWarning{\PackageWarning{ecards}
+ {The use of \string\useHints\space and \string\useNoHints
+ \MessageBreak is prohibited, ignoring this use}}
+\def\ec@BadArgWarning{\PackageWarning{ecards}
+ {The argument `\ec@rgi' is not an acceptable option.\MessageBreak
+ Will use `hint' instead}}
+\def\ecInfoToSolns{\string\def\string\exnoCard{\exnoCard}%
+ \string\def\string\solndest{\solnDest}%
+ \expandafter\string\ec@thisHintOpt
+ \string\nMarkerSet{\ec@Hint}\string\defineSoln}
+\newenvironment{card}[1][\opts@ecNoHints]{\newpage\isQuestrue
+% \end{macrocode}
+% We redefine \cs{useHints} and \cs{useNoHints} to a warning message within the \env{card}
+% environment.
+% \begin{macrocode}
+ \let\useHints\ec@HintsWarning\let\useNoHints\ec@HintsWarning
+ \edef\ec@rgi{#1}\ifx\ec@rgi\ec@isHint
+ \def\ec@thisHintOpt{\ecUseHints}\else
+ \ifx\ec@rgi\ec@isNoHint
+ \def\ec@thisHintOpt{\ecUseNoHints}\else
+% \end{macrocode}
+% The user did not pass a recognized option (neither \texttt{hint} nor \texttt{nohint}),
+% use \texttt{hint} instead and send a warning to the log.
+% \begin{macrocode}
+ \def\ec@thisHintOpt{\ecUseHints}%
+ \ec@BadArgWarning
+ \fi
+ \fi
+ \xdef\ecLoc@lSt@te{\ec@rgi}%
+ \ec@thisHintOpt\nMarkerSet\ec@Ques
+ \def\eqexheader{\noindent}%
+ \renewcommand\exsllabelformat{\protect\noindent}%
+ \renewcommand\exrtnlabelformat{}%
+ \renewcommand\exsecrunhead{}%
+ \let\afterlabelhskip\@empty
+ \def\exersolnheadhook{\ecInfoToSolns}%
+ \begin{exercise}
+ \textBgColor{\@cardColor}%
+ \headCard
+}{%
+ \tailCard
+ \end{exercise}%
+ \ifnum\@panelconfig=0\relax\aftergroup\cardNaviBar\fi
+}
+% \end{macrocode}
+% \end{environment}
+% \DescribeMacro\headCard\cs{headCard} determines the design of the question page. Can re-design.
+% \changes{v2.0c}{2016/07/29}{Added after skips and widths for questions page}
+% Use \DescribeMacro\ecAfterQuesSkip\cs{ecAfterQuesSkip} to change the vertical distance after \textbf{QUESTIONS}
+% and the content below. Use \DescribeMacro\ecQuesWidth\cs{ecQuesWidth} to set the width of
+% the minipage on the question page.
+% \begin{macrocode}
+\def\ecAfterQuesSkip#1{{\setlength{\@tempdima}{#1}%
+ \xdef\ec@fterQuesSkip{\the\@tempdima}}}
+\ecAfterQuesSkip{.25in}
+\def\ecQuesWidth#1{\def\ec@QuesWidth{#1}}
+\ecQuesWidth{.85\linewidth}
+\def\ecSetQuesWidth{\setlength{\@tempdima}{\ec@QuesWidth}%
+ \edef\ec@QuesWidth{\the\@tempdima}}
+% \end{macrocode}
+% Use the \DescribeMacro{\ecQUESTION} command to format the question page.
+% \changes{v2.0c}{2016/07/29}{Added \string\cs{ecQUESTION}}
+% \begin{macrocode}
+\newcommand{\ecQUESTION}{\textbf{QUESTION}}
+\newcommand{\headCard}{%
+ \vspace*{\stretch{.1}}%
+ \begin{center}\ecSetQuesWidth
+ \Large\ecQUESTION\par\vspace*{\ec@fterQuesSkip}%
+ \begin{minipage}{\ec@QuesWidth}%
+ \large\noindent\ignorespaces
+}
+% \end{macrocode}
+% \begin{macro}{\tailCard}
+% Complete any environments begun by \cs{headCard}
+% \begin{macrocode}
+\newcommand{\tailCard}{%
+ \end{minipage}
+ \end{center}
+ \par\vspace{\stretch{2}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{The \texttt{response} Environment}
+% \begin{environment}{response}
+% Nested within the \texttt{card} environment is the
+% \texttt{response} environment, which, in turn, contains the
+% \texttt{hint} and \texttt{answer} environments. This basically
+% the \texttt{solution} environment for an \texttt{exercise} of
+% \textsf{exerquiz}.
+% \begin{macrocode}
+\newenvironment{response}{\solnexer@woparts[]} %dps
+ {\endsolnexer@woparts}
+% \end{macrocode}
+% \end{environment}
+% \begin{environment}{hint}
+% Place this environment within the \texttt{response}
+% environment and \textit{before} the \texttt{answer} environment.
+% \begin{macrocode}
+\newif\ifisHint \isHintfalse
+\newenvironment{hint}{%
+ \isHinttrue
+ \if\@ecNoHints\ec@YES\textBgColor{\@hintColor}\headHint
+ \centering\noHintProvided\tailHint\expandafter\ec@comment@hint
+ \else\expandafter\ec@hint\fi}{%
+ \if\@ecNoHints\ec@YES\expandafter\endec@comment@hint
+ \else\expandafter\endec@hint\fi}
+% \end{macrocode}
+% \begin{macro}{\noHintProvided}
+% A short typeset message that appears on hint pages when there is no hint
+% available.
+% \begin{macrocode}
+\newcommand{\noHintProvided}{No hint provided for this question.}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\newenvironment{ec@comment@hint}{\comment}{%
+ \endcomment
+ \ifnum\@panelconfig=0\relax
+ \insNaviBar{\hfill\hintSoln\ \hintNextCard\ %
+ \PrevCard\ \ToggleOrder\hfill}\fi
+ \newpage\nMarkerSet{\ec@Soln}\noindent\hypertarget{\solndest}{}%
+}
+\newenvironment{ec@hint}{%
+ \textBgColor{\@hintColor}%
+ \headHint
+}{%
+ \tailHint
+ \ifnum\@panelconfig=0\relax
+ \insNaviBar{\hfill\hintSoln\ \hintNextCard\ %
+ \PrevCard\ \ToggleOrder\hfill}\fi
+ \newpage\nMarkerSet{\ec@Soln}\noindent\hypertarget{\solndest}{}%
+}
+% \end{macrocode}
+% \end{environment}
+% Use \DescribeMacro\headHint\cs{headHint} to design he hint page. \DescribeMacro{\ecAfterHintSkip}\cs{ecAfterHintSkip}
+% sets the vertical skip following the header (HINT). \DescribeMacro\ecHintWidth\cs{ecHintWidth} sets the width
+% of the minipage on the HINT page.
+% \changes{v2.0c}{2016/07/29}{Added after skips and widths for hints page}
+% \begin{macrocode}
+\def\ecAfterHintSkip#1{{\setlength{\@tempdima}{#1}%
+ \xdef\ec@fterHintSkip{\the\@tempdima}}}
+\ecAfterHintSkip{.25in}
+\def\ecHintWidth#1{\def\ec@HintWidth{#1}}
+\ecHintWidth{.85\linewidth}
+\def\ecSetHintWidth{\setlength{\@tempdima}{\ec@HintWidth}%
+ \edef\ec@HintWidth{\the\@tempdima}}
+% \end{macrocode}
+% Use the \DescribeMacro{\ecHINT}\cs{ecHint} command to format the hint page.
+% \changes{v2.0c}{2016/07/29}{Added \string\cs{ecHINT}}
+% \begin{macrocode}
+\newcommand{\ecHINT}{\textbf{HINT}}
+\newcommand{\headHint}{%
+ \vspace*{\stretch{.1}}%
+ \begin{center}\ecSetHintWidth
+ \Large\ecHINT\par\vspace*{\ec@fterHintSkip}%
+ \begin{minipage}{\ec@HintWidth}%
+ \large\noindent\ignorespaces
+}
+% \end{macrocode}
+% \begin{macro}{\tailHint}
+% Close any environments begun in \cs{headHint}
+% \begin{macrocode}
+\newcommand{\tailHint}{%
+ \end{minipage}
+ \end{center}
+ \par\vspace{\stretch{2}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{The \texttt{answer} Environment}
+% \begin{environment}{answer}
+% The \texttt{answer} environment follows the \texttt{hint}, also listed within
+% the \texttt{response} environment.
+% \begin{macrocode}
+\newenvironment{answer}{%
+ \textBgColor{\@solnColor}%
+ \headAnswer
+}{\tailAnswer}
+% \end{macrocode}
+% \end{environment}
+% \DescribeMacro\headAnswer Use \cs{headAnswer} to design of the answer page. \DescribeMacro\ecAfterAnsSkip
+% \cs{ecAfterAnsSkip} sets the vertical skip following the header (ANSWER). \DescribeMacro\ecAnsWidth
+% sets the width of the minipage on the ANSWER page.
+% \changes{v2.0c}{2016/07/29}{Added after skips and widths for answers page}
+% \begin{macrocode}
+\def\ecAfterAnsSkip#1{{\setlength{\@tempdima}{#1}%
+ \xdef\ec@fterAnsSkip{\the\@tempdima}}}
+\ecAfterAnsSkip{.25in}
+\def\ecAnsWidth#1{\def\ec@AnsWidth{#1}}
+\ecAnsWidth{.85\linewidth}
+\def\ecSetAnsWidth{\setlength{\@tempdima}{\ec@AnsWidth}%
+ \edef\ec@AnsWidth{\the\@tempdima}}
+% \end{macrocode}
+% Use the \DescribeMacro{\ecANS} command to format the hint page.
+% \changes{v2.0c}{2016/07/29}{Added \string\cs{ecANS}}
+% \begin{macrocode}
+\newcommand{\ecANS}{\textbf{ANSWER}}
+\newcommand{\headAnswer}{%
+ \vspace*{\stretch{.1}}%
+ \begin{center}\ecSetAnsWidth
+ \Large\ecANS\par\vspace*{\ec@fterAnsSkip}%
+ \begin{minipage}[t]{\ec@AnsWidth}%
+ \large\noindent\ignorespaces}
+% \end{macrocode}
+% \begin{macro}{\tailAnswer}
+% Close any environments opened by \cs{headAnswer}
+% \begin{macrocode}
+\newcommand{\tailAnswer}{%
+ \end{minipage}
+ \end{center}
+ \vspace*{\stretch{2}}
+}
+% \end{macrocode}
+% \end{macro}
+% \subsection{Navigation Support}
+%
+% In this section we build navigation support. The \DescribeMacro\iconWidth\cs{iconWidth} and
+% \DescribeMacro\iconHeight\cs{iconHeight} are the width and height of the icons as they appear
+% on the bottom of the page. When using a panel option, the width vale is reset, see \cs{iconWidthPanel}
+% and \cs{panelGrpWidth}.
+% \begin{macrocode}
+\newcommand\iconWidth{40pt}\newcommand\iconHeight{15pt}
+% \end{macrocode}
+% \begin{macro}{\ecHomePage}
+% \begin{macro}{\ecLogo}
+% \begin{macro}{\ecLogoLink}
+% \cs{ecHomePage}, for the `Home' button, and \cs{ecLogo}, for the logo. The argument
+% for \cs{ecLogo} should be a LaTeX graphics command such as \cs{includegraphics}. See
+% the default for an example. With \cs{ecLogoLink}, you can optionally associate a link
+% with your logo.
+% \begin{macrocode}
+\def\ecHomePage{\hyper@normalise\ec@HomePage}
+\def\ec@HomePage#1{\def\@ecHomePage{#1}}
+\ecHomePage{http://www.math.uakron.edu/~dpstory/acrotex.html}
+\def\ecLogo#1{\def\@ecLogo{#1}}
+\ecLogo{\includegraphics[scale=.4]{graphics/uakron}}
+\def\ecLogoLink{\hyper@normalise\ec@LogoLink}
+\def\ec@LogoLink#1{\def\@ecLogoLink{#1}}
+\let\@ecLogoLink\@empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Toggle between Random and Nonrandom Delivery}
+%
+% \begin{macro}{\toggleRandomize}
+% \begin{macro}{\randomizedMsg}
+% \begin{macro}{\nonrandomizedMsg}
+% \begin{macro}{\toggleRandomizeTU}
+% We provide a push button for toggling between random mode and nonrandom mode.
+% The button resets the cards and alerts the user.
+% \begin{macrocode}
+\newcommand{\randomizedMsg}{The cards will be delivered
+ to you in random order.}
+\newcommand{\nonrandomizedMsg}{The cards will be delivered
+ to you in their natural order.}
+\newcommand{\toggleRandomizeTU}{%
+ Click to toggle between random and natural order.}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Define JS Actions for Icons}
+% Below are some JavaScript definitions that are used for navigation.
+% \begin{macrocode}
+\def\makeesc#1{\catcode`#1=0\relax}
+% \end{macrocode}
+% \DescribeMacro{\fsJS}\noindent
+% Action for the fullscreen button `FS'.
+% \begin{macrocode}
+\begin{defineJS}{\fsJS}
+if (app.viewerVersion < 5.0)
+ app.fullscreen = !app.fullscreen
+else {
+ app.fs.cursor = cursor.visible;
+ app.fs.defaultTransition = "";
+ app.fs.useTimer = false;
+ app.fs.isFullScreen = !app.fs.isFullScreen;
+}
+\end{defineJS}
+% \end{macrocode}
+% \subsubsection{Define Navigation Icons}
+% Some navigation icons, \cs{newNaviIcon} is defined in the \textsf{Web Package}.
+% \begin{macrocode}
+% if nohint option is used, this is the JS action when hint is clicked.
+\newcommand\noHintJSAction{}
+\def\NaviIconActionJS#1{\ifecListing
+ \if\nMarker\ec@Ques\else
+ this.gotoNamedDest("\quesDestJS");\fi
+ \else
+ #1;
+ \fi
+}
+% \end{macrocode}
+%\changes{v2.0c}{2016/07/29}{Added labels for navigation icons to make customization easier}
+% \begin{macro}{\ecSolnLabel}
+% \begin{macro}{\ecHintLabel}
+% \begin{macro}{\ecNextLabel}
+% \begin{macro}{\ecPrevLabel}
+% \begin{macro}{\ecHintNextLabel}
+% \begin{macro}{\ecHintSolnLabel}
+% \begin{macro}{\ecBeginLabel}
+% \begin{macro}{\ecHomeLabel}
+% \begin{macro}{\ecFinHomeLabel}
+% \begin{macro}{\ecFSLabel}
+% \begin{macro}{\ecCloseLabel}
+% \begin{macro}{\ecRandomLabel}
+% Define labels for navigation icons to make customization easier.
+% \begin{macrocode}
+\def\ec@defineLabel#1#2#3{\def#1{#2 #3}}
+\newcommand{\ecSolnLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@SolnLabel{#1}{#2}}
+\ecSolnLabel{Soln}
+\newcommand{\ecHintLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HintLabel{#1}{#2}}
+\ecHintLabel{Hint}
+\newcommand{\ecNextLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@NextLabel{#1}{#2}}
+\ecNextLabel{Next}
+\newcommand{\ecPrevLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@PrevLabel{#1}{#2}}
+\ecPrevLabel{Prev}
+\newcommand{\ecHintNextLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HintNextLabel{#1}{#2}}
+\ecHintNextLabel{Next}
+\newcommand{\ecHintSolnLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HintSolnLabel{#1}{#2}}
+\ecHintSolnLabel{Soln}
+\newcommand{\ecBeginLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@BeginLabel{#1}{#2}}
+\ecBeginLabel{Begin}
+\newcommand{\ecHomeLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HomeLabel{#1}{#2}}
+\ecHomeLabel{Home}
+\newcommand{\ecFinHomeLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@FinHomeLabel{#1}{#2}}
+\ecFinHomeLabel{Home}
+\newcommand{\ecFSLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@FSLabel{#1}{#2}}
+\ecFSLabel{FS}
+\newcommand{\ecCloseLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@CloseLabel{#1}{#2}}
+\ecCloseLabel{Close}
+\newcommand{\ecRandomLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@RandomLabel{#1}{#2}}
+\ecRandomLabel{Random}
+% \end{macrocode}
+% The definitions of the navigation icons, \cs{newNaviIcon} is defined in the \pkg{web} package.
+% \begin{macrocode}
+\newNaviIcon[j]{\Soln}\iconWidth\iconHeight{\ec@SolnLabel}
+ {\NaviIconActionJS{this.gotoNamedDest("\solnDest")}}
+\newNaviIcon[j]{\Hint}\iconWidth\iconHeight{\ec@HintLabel}
+ {\if\@ecNoHints\ec@YES\noHintJSAction\else
+ \NaviIconActionJS{this.gotoNamedDest("\hintDestJS")}\fi} % dps
+\newNaviIcon[j]{\NextCard}\iconWidth\iconHeight{\ec@NextLabel}
+ {\NaviIconActionJS{getNextCard()}}
+\newNaviIcon[j]{\PrevCard}\iconWidth\iconHeight{\ec@PrevLabel}
+ {\NaviIconActionJS{getPrevCard()}}
+\newNaviIcon[j]{\hintNextCard}\iconWidth\iconHeight
+ {\ec@HintNextLabel}{getNextCard();}
+\newNaviIcon[j]{\hintSoln}\iconWidth\iconHeight{\ec@HintSolnLabel}
+ {\NaviIconActionJS{this.gotoNamedDest("\solndest")}}
+\newNaviIcon[j]{\Begin}\iconWidth\iconHeight
+ {\ec@BeginLabel}{beginECards();}
+\newNaviIcon[l]{\Home}\iconWidth\iconHeight{\ec@HomeLabel}
+ {\ifnum\arabic{page}=1\relax\def\ec@next{\href{\@ecHomePage}}\else
+ \def\ec@next{\hyperlink{page.1}}\fi\ec@next}
+\newNaviIcon[j]{\Finished}\iconWidth\iconHeight{\ec@FinHomeLabel}
+ {resetToFirstPage();}
+\newNaviIcon[j]{\FullScreen}\iconWidth\iconHeight
+ {\ec@FSLabel}{\fsJS}
+\newNaviIcon[j]{\Close}\iconWidth\iconHeight{\ec@CloseLabel}
+ {closeCards=true; app.execMenuItem("Close")}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+\def\ec@CB@toggleOrder{%
+ \checkBox[\A{\JS{toggleOrder();}}\DV{\cbInitState}\V{\cbInitState}%
+ \TU{\toggleRandomizeTU}\textSize{0}\textColor{1 0 0}
+ \BC{0 0 .8}]{eccbtoggleorder}{9bp}{9bp}{randomOrder}}
+\providecommand{\nopNaviIcon}[4]{%
+ \def#1{{\setlength{\fboxsep}{0pt}%
+ \web@colorbox@w@transparency{\@menuBgColor}%
+ {\parbox[c][#3][c]{#2}%
+ {\normalsize\centering\color{\@menucolor}#4}}%
+ }}%
+}
+\nopNaviIcon{\fpToggleOrder}\iconWidth\iconHeight
+ {\ec@RandomLabel\space\ec@CB@toggleOrder}
+\nopNaviIcon{\ToggleOrder}\iconWidth\iconHeight
+ {\footnotesize\ec@CB@toggleOrder}
+% \end{macrocode}
+% If \cs{@memLogo} has a value of `y', then the logo is put in a box and copied
+% onto each page; otherwise, the logo is read from its file on each page.
+% \begin{macrocode}
+\edef\@@Logo{\if\@memLogo\ec@YES\relax
+ \noexpand\unhcopy\noexpand\Logo\else\noexpand\@ecLogo\fi}
+% \end{macrocode}
+% Build the button panel for the navigation bar. Can re-design as desired.
+% \changes{v2.0b}{2016/07/27}{Added \string\cs{iconWidthPanel} and \string\cs{panelGrpWidth}}
+% Use \DescribeMacro{\iconWidthPanel}\cs{iconWidthPanel} to set the width of a panel button, and
+% \DescribeMacro\panelGrpWidth\cs{panelGrpWidth} to set the width of the group of buttons.
+% \begin{macrocode}
+\newcommand\iconWidthPanel{28pt}
+\newcommand\panelGrpWidth{57pt}
+\ifnum\@panelconfig>0\relax
+% \end{macrocode}
+% if \cs{@panelconfig} (a macro defined in \textsf{web}, is positive, then the author has chosen
+% a left or a right navigation panel. So, we must build a panel.
+% \begin{macro}{\panelNaviGroup}
+% This is the group of panel buttons used for navigation purposes.
+% \begin{macrocode}
+ \renewcommand\panelNaviGroup {%
+ \def\iconWidth{\iconWidthPanel}%
+ \ifnum\thepage=1\relax
+ \parbox[c]{\panelGrpWidth}
+ {%
+ \Begin\hfill\FullScreen\\
+ \Close\hfill\Home\\
+ \let\iconWidth\linewidth
+ \fpToggleOrder
+ }%
+ \else
+ \parbox[c]{\panelGrpWidth}
+ {%
+ {\ifecListing\else\if\nMarker\ec@Ques
+ \if\@ecNoHints\ec@YES
+ \navibarTextColor{lightblue}\fi
+ \else
+ \navibarTextColor{lightblue}\fi\fi\Hint}\hfill
+ {\if\nMarker\ec@Soln
+ \navibarTextColor{lightblue}\fi\Soln}\\
+ \NextCard\hfill\PrevCard\\
+ \ToggleOrder\hfill\Finished
+ }%
+ \fi
+ }
+% \end{macrocode}
+% \end{macro}
+% If \cs{@memLogo} is `y', create a new box, read logo with \cs{@ecLogo}, and store
+% in box
+% \begin{macrocode}
+ \newbox\Logo
+ \if\@memLogo\ec@YES\relax
+ \AtBeginDocument{\global\setbox\Logo=\hbox{\@ecLogo}}%
+ \fi
+% \end{macrocode}
+% \begin{macro}{\buildpanel}
+% The \cs{buildpanel} command is defined in the \pkg{web} package and determines the layout of
+% the vertical navigation panel. You can re-design your own. \DescribeMacro{\raiseLogoBy}\cs{raiseLogoBy}
+% may be used to adjust the vertical position of the logo.
+% \changes{v2.0b}{2016/07/27}{Added \string\cs{raiseLogoBy}}
+% \begin{macrocode}
+\def\raiseLogoBy#1{{\setlength\@tempdima{#1}%
+ \xdef\r@iseLogoBy{\the\@tempdima}}}\raiseLogoBy{0pt}
+ \buildpanel{\raisebox{\r@iseLogoBy}{\ifx\@ecLogoLink\@empty\@@Logo
+ \else\href{\@ecLogoLink}{\@@Logo}\fi}%
+ \par\vspace{\stretch{1}}%
+ \rotatebox{-90}{\aebLogo}%
+ \par\vspace{\stretch{1}}%
+ \panelNaviGroup
+ }
+% \end{macrocode}
+% \end{macro}
+% Delay the expansion of the \cs{newNaviIcon} macro for the solution page
+% \begin{macrocode}
+ \def\defineSoln{\newNaviIcon[j]{\Soln}\iconWidth\iconHeight
+ {\ec@SolnLabel}{%
+ \NaviIconActionJS{this.gotoNamedDest("\solndest")}}%
+ \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3);
+ this.gotoNamedDest("\solndest");}%
+ }
+\else
+% \end{macrocode}
+% \begin{macro}{\cardNavibar}
+% \cs{@panelconfig} must be zero, the author does not want a navigation panel, so well
+% put buttons at the bottom of each page to navigate by.
+% Standard navigation bar.
+% \begin{macrocode}
+ \def\cardNaviBar{\insNaviBar{\hfill
+ \if\@ecNoHints\ec@NO\Hint\ \fi\Soln\ \NextCard\
+ \PrevCard\ \ToggleOrder\ \Home\hfill}}
+ \def\defineSoln{\newNaviIcon[j]{\Soln}\iconWidth\iconHeight
+ {\ec@SolnLabel}{%
+ \NaviIconActionJS{this.gotoNamedDest("\solndest")}}%
+ \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3);
+ this.gotoNamedDest("\solndest");}%
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+%\subsection{Close Page Action}
+%
+% We tap into \textsf{eforms} through the \cs{@CloseAction} macro. If \texttt{aeb\_pro}
+% is used, the document author may overwrite this definition.
+%
+% \begin{macrocode}
+\newcommand{\pressBeginMsg}{Press the \eqbs\eqbs"Begin\eqbs\eqbs"
+ button to begin viewing the cards.}
+\ifecListing\else
+\thisPageAction{\JS{}}{\JS{if (!closeCards&&!beginPressed){\jsR\jsT
+ var b=app.setTimeOut("this.pageNum=0;
+ app.alert(pressBeginMsg);",50);\jsR}}}
+\fi
+% \end{macrocode}
+% \subsection{Document Level JavaScript}
+% Insert document level JavaScripts to get the functionality of randomly selected questions.
+%
+% \smallskip\noindent If author has used the \texttt{nodljs} or \texttt{exercises} only, then
+% we need to turn the \textsf{insdljs} package back on by emitting
+% \begin{macrocode}
+\let\importdljs=y
+% \end{macrocode}
+% This is the JavaScript to control the eCards action. Some global variables followed by the
+% \texttt{getNextCard()} method.
+% \begin{macrocode}
+\begin{insDLJS}[isCardloaded]{flashcrd}{Flash Card JS}
+var isCardloaded=true;
+var closeCards=false;
+var beginPressed=false;
+var maxNumberCards = Math.pow(10,Math.ceil(%
+Math.LOG10E*Math.log(\theNumCards)));
+var aCardsNaturalOrder=new Array();
+var aCardsRandomOrder=new Array();
+var aCardsViewOrder;
+var ptrCards=0;
+var cardsFinished = "\CARDSFINISHED";
+var pressBeginMsg = "\pressBeginMsg";
+var isRandomized=\israndomized;
+% \end{macrocode}
+% Get the next card, and notify the user if all cards have been viewed.
+% \begin{macrocode}
+function getNextCard() {
+ numCards = \theNumCards;
+ if ( ptrCards == numCards ) {
+ app.alert(cardsFinished,3);
+ resetToFirstPage();
+ } else {
+ ptrCards+=1;
+ this.gotoNamedDest("qex."+aCardsViewOrder[ptrCards]);
+ }
+}
+% \end{macrocode}
+% Get the previous card.
+% \begin{macrocode}
+function getPrevCard() {
+ if ( ptrCards <= 1 ) {
+% this.gotoNamedDest("page.1");
+ resetToFirstPage();
+ } else {
+ ptrCards-=1;
+ this.gotoNamedDest("qex."+aCardsViewOrder[ptrCards]);
+ }
+}
+% \end{macrocode}
+% We also define a function \texttt{ecOnBlurRespBox()} to
+% correctly control the page changes: If a wrong answer is given, then we go to
+% the hint or the solution depending on whether user is responding to the original
+% question or to the hint.
+% \begin{macrocode}
+function ecOnBlurRespBox (retn, exnoCard, nMarker) {
+ if (retn != null) {
+ if (retn) {
+ app.alert(\eqsqrtmsg,3);
+ var dest = "ex" + exnoCard + ".s"; // dps
+ this.gotoNamedDest(dest);
+ } else {
+ app.alert(\eqsqwgmsg,3);
+ if (nMarker==0) {
+ var dest = "ex." + exnoCard; // dps
+ this.gotoNamedDest(dest);
+ }
+ else {
+ var dest = "ex" + exnoCard + ".s"; // dps
+ this.gotoNamedDest(dest);
+ }
+ }
+ } else {
+ var str = event.target.value.toString();
+ if (str.replace(/\s/g,"") == "")
+ event.target.strokeColor = \defaultColorJSDef; // dps
+ }
+}
+% \end{macrocode}
+% This executes when the user clicks the begin link.
+% \begin{macrocode}
+function beginECards() {
+ PrepareViewingOrder();
+ beginPressed=true;
+ getNextCard();
+ var f, g, bState;
+ f=this.getField("eccbtoggleorder");
+ bState=f.isBoxChecked(0);
+ this.resetForm();
+ f.checkThisBox(0,bState);
+ for (var card=1; card<=\theNumCards; card++) {// dps
+ f = this.getField("obj.ex"+card);
+ if ( f != null ) {
+ g = f.getArray();
+ for (var i = 0; i < g.length; i++)
+ g[i].strokeColor = \defaultColorJSDef; // dps
+ }
+ }
+}
+% \end{macrocode}
+% Sets \texttt{ptrCards} to 0, then builds two new matrices,
+% \texttt{aCardsNaturalOrder} consisting of the numbers 1,2,...\cs{theNumCards},
+% and \texttt{aCardsRandomOrder}. If \texttt{isRandomized} is \texttt{true},
+% \texttt{aCardsViewOrder} is set to \texttt{aCardsRandomOrder}, otherwise it is set
+% to \texttt{aCardsNaturalOrder}.
+% \begin{macrocode}
+function PrepareViewingOrder() {
+ ptrCards=0;
+ var i, rand;
+ for (i=0; i<=\theNumCards; i++) {
+ aCardsNaturalOrder[i]=i;
+ aCardsRandomOrder[i]=i;
+ }
+% \end{macrocode}
+% We randomize the entries in \texttt{aCardsRandomOrder}, which at this moment
+% is the same as \texttt{aCardsNaturalOrder}.
+% \begin{macrocode}
+ for (i=1; i<=\theNumCards; i++) {
+ var rand = Math.random();
+ rand *= maxNumberCards;
+ rand = Math.ceil(rand);
+ rand = rand \% \theNumCards;
+ rand += 1;
+ temp = aCardsRandomOrder[i];
+ aCardsRandomOrder[i]=aCardsRandomOrder[rand];
+ aCardsRandomOrder[rand]=temp;
+ }
+ aCardsViewOrder=(isRandomized)?aCardsRandomOrder:aCardsNaturalOrder;
+}
+% \end{macrocode}
+% Toggles between viewing the cards in random order and their natural order.
+% \begin{macrocode}
+function toggleOrder() {
+ isRandomized=!isRandomized;
+ if (aCardsNaturalOrder.length==0) PrepareViewingOrder();
+ if (isRandomized) {
+ for (var i=1; i<=\theNumCards; i++)
+ if (aCardsRandomOrder[i]==ptrCards) break;
+ ptrCards=i;
+ aCardsViewOrder=aCardsRandomOrder;
+ app.alert("\randomizedMsg");
+ } else {
+ ptrCards=aCardsViewOrder[ptrCards];
+ aCardsViewOrder=aCardsNaturalOrder;
+ app.alert("\nonrandomizedMsg");
+ }
+}
+function resetToFirstPage() {
+ this.gotoNamedDest("page.1");
+ beginPressed=false;
+}
+\end{insDLJS}
+% \end{macrocode}
+% If we have the \texttt{listing} option taken, then we import the \texttt{ecardslist.def}
+% file to redefine portions of the \texttt{card} environment.
+% just the Adobe Reader.
+% \begin{macrocode}
+\ifecListing\input{ecardslist.def}\fi
+% \end{macrocode}
+% If document author wants to modify these environments, s/he can place redefinitions in
+% \texttt{ecard.cus}.
+% \begin{macrocode}
+\if\@ecCustom\ec@YES\InputIfFileExists{ecard.cus}{}{}\fi
+%</package>
+% \end{macrocode}
+% \subsection{Support for the \texttt{listing} option}
+% When the \texttt{listing} option is taken, we list out the questions, hints, and answers.
+% In this section, a number of environments and commands are defined, the name of each
+% begin with `\texttt{listing@}'. The document author can \cs{renewcommand} there to
+% create a printed listing of easy review. If you say
+%\begin{verbatim}
+%\usepackage[forpaper,tight]{web}
+%\usepackage[solutionsafter,proofing]{exerquiz}
+%\usepackage[memLogo,listing]{ecards}
+%\end{verbatim}
+% then the multiple choice and fill-in questions will display the correct answers. Place any
+% customizations in a text field named \texttt{ecard.cus}, and use the \texttt{custom}
+% option.
+% \subsubsection{The \texttt{card} Environment}
+% \begin{macrocode}
+%<*listing>
+% \end{macrocode}
+% \begin{environment}{card}
+% This is the main environment for writing questions, hints and answers. This environment
+% encloses all.
+% \begin{macrocode}
+\newcounter{ecCnt}
+\let\exsolafter\@empty
+\eqexerskip{0pt}
+\newenvironment{listing@card}[1][\opts@ecNoHints]{%
+ \isQuestrue\let\useHints\ec@HintsWarning
+ \let\useNoHint\ec@HintsWarning\edef\ec@rgi{#1}%
+ \ifx\ec@rgi\ec@isHint
+ \def\ec@thisHintOpt{\ecUseHints}\else
+ \ifx\ec@rgi\ec@isNoHint
+ \def\ec@thisHintOpt{\ecUseNoHints}\else
+ \def\ec@thisHintOpt{\ecUseHints}\ec@BadArgWarning
+ \fi\fi
+ \ec@thisHintOpt\nMarkerSet{\ec@Ques}%
+ \stepcounter{ecCnt}%
+ \def\eqexheader{\noindent}%
+ \renewcommand\exsllabelformat{\protect\noindent}%
+ \renewcommand\exrtnlabelformat{}%
+ \renewcommand\exsecrunhead{}%
+ \let\afterlabelhskip\@empty
+ \def\exersolnheadhook{\ecInfoToSolns}%
+ \begin{exercise}%
+ \textBgColor{\@cardColor}%
+ \headCard
+}{%
+ \tailCard
+ \end{exercise}%
+}
+% \end{macrocode}
+% \end{environment}
+% \begin{macro}{\headCard}
+% The design of the question page. Can re-design.
+% \begin{macrocode}
+\newcommand{\listing@headCard}{\ifeqforpaper
+ \makebox[0pt][r]{\textbf{\arabic{ecCnt}.\thinspace}}\else
+ \makebox[0pt][r]{\textbf{\hyperlink{ex.\exnoCard}%
+ {\arabic{ecCnt}.\thinspace}}}\fi\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\tailCard}
+% Complete any environments begun by \cs{headCard}
+% \begin{macrocode}
+\newcommand{\listing@tailCard}{\removelastskip\par} % dps
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{The \texttt{response} Environment}
+% \begin{environment}{response}
+% Nested within the \texttt{card} environment is the
+% \texttt{response} environment, which, in turn, contains the
+% \texttt{hint} and \texttt{answer} environments. This basically
+% the \texttt{solution} environment for an \texttt{exercise} of
+% \textsf{exerquiz}.
+% \begin{macrocode}
+\def\setSolutionsAfterSkip{\expandafter
+ \def\expandafter\solutionsafterSkip
+ \expandafter{\solutionsafterSkip\kern0pt}}
+\AtBeginDocument{\setSolutionsAfterSkip}
+\newenvironment{listing@response}
+ {\solutionsafterSkip\solnexer@woparts[]}{\endsolnexer@woparts}
+% \end{macrocode}
+% \end{environment}
+% \begin{environment}{hint}
+% Right now, a hint is required. Place this environment within the \texttt{response}
+% environment and \textit{before} the \texttt{answer} environment.
+% \begin{macrocode}
+\newenvironment{listing@hint}{%
+ \textBgColor{\@hintColor}%
+ \headHint
+}{\tailHint}
+% \end{macrocode}
+% \end{environment}
+% \begin{macro}{\headHint}
+% The design of the hint page. Can re-design.
+% \begin{macrocode}
+\newcommand{\listing@headHint}{%
+ \par\textit{Hint}:\space\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\tailHint}
+% Close any environments begun in \cs{headHint}
+% \begin{macrocode}
+\newcommand{\listing@tailHint}{}
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{The \texttt{answer} Environment}
+% \begin{macro}{\headAnswer}
+% The design of the answer page. Can re-design.
+% \end{macro}
+% \begin{environment}{answer}
+% The \texttt{answer} environment follows the \texttt{hint}, also listed within
+% the \texttt{response} environment.
+% \begin{macrocode}
+\newenvironment{listing@answer}{%
+ \textBgColor{\@solnColor}%
+ \headAnswer
+}{\tailAnswer}
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+\newcommand{\listing@headAnswer}{%
+ \par\textit{Answer}:\space\ignorespaces}
+% \end{macrocode}
+% \begin{macro}{\tailAnswer}
+% Close any environments opened by \cs{headAnswer}
+% \begin{macrocode}
+\newcommand{\listing@tailAnswer}{}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\def\ec@redefForListing{%
+ \let\card\listing@card
+ \let\endcard\endlisting@card
+ \let\headCard\listing@headCard
+ \let\tailCard\listing@tailCard
+ \let\response\listing@response % dps
+ \let\endresponse\endlisting@response % dps
+ \let\headhint\listing@hint
+ \let\endhint\listing@endhint
+ \let\headHint\listing@headHint
+ \let\tailHint\listing@tailHint
+ \let\answer\listing@answer
+ \let\endanswer\listing@endanswer
+ \let\headAnswer\listing@headAnswer
+ \let\tailAnswer\listing@tailAnswer
+}
+\AtBeginDocument{\ec@redefForListing}
+%</listing>
+% \end{macrocode}
+\endinput
diff --git a/texmf-dist/source/latex/ecards/ecards.ins b/texmf-dist/source/latex/ecards/ecards.ins
new file mode 100644
index 00000000..2ff91dbe
--- /dev/null
+++ b/texmf-dist/source/latex/ecards/ecards.ins
@@ -0,0 +1,65 @@
+%%
+%% 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-2002 D. P. Story
+%%
+%% This file is part of the `Web and Exerquiz Distribution'.
+%% -------------------------------------------
+%%
+%% 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{2001/05/26}
+\def\batchfile{ecards.ins}
+%
+% If you can assume that the target audience for the document all have
+% Acrobat Reader 5.0 or later, then chance the following switch to true,
+% else, leave it as false.
+
+\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{ecards.sty}{\from{ecards.dtx}{copyright,package}}
+ \file{ecardslist.def}{\from{ecards.dtx}{copyright,listing}}
+}
+
+\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/texmf-dist/source/latex/fc-arith/docs/fc_arithman.tex b/texmf-dist/source/latex/fc-arith/docs/fc_arithman.tex
new file mode 100644
index 00000000..5a770dd4
--- /dev/null
+++ b/texmf-dist/source/latex/fc-arith/docs/fc_arithman.tex
@@ -0,0 +1,1140 @@
+% makeindex < aebpro_man.idx > aebpro_man.ind
+\documentclass{article}
+\usepackage[fleqn]{amsmath}
+\usepackage[%
+ web={centertitlepage,designv,
+ forcolorpaper,latextoc,pro,useui},
+ exerquiz,aebxmp
+]{aeb_pro}
+\usepackage{aeb_mlink}
+\usepackage[altbullet]{lucidbry}
+%\usepackage{myriadpro}
+
+\usepackage{graphicx,array,longtable}
+%\usepackage[usecmtt]{myriadpro}
+
+%\def\uif#1{\textbf{\textsf{{#1}}}}
+\let\uif\textsf
+
+\newdimen\totaltextwidth
+\totaltextwidth=\fullscreenwidth
+\advance\totaltextwidth\oddsidemargin
+\renewcommand{\webheadwrapper}[1]{%
+ \hspace{-\oddsidemargin}%
+ \makebox[\totaltextwidth][s]{#1}\hss
+}
+
+\setlongtables
+
+\usepackage{acroman}
+
+\usepackage[active]{srcltx}
+
+\urlstyle{rm}
+
+\newcommand{\prodName}{\textsf{PDF Flash Card}}
+\newcommand{\sprodName}{\textsf{Flash Card}}
+\newcommand{\ssprodName}{\textsf{Builder}}
+
+\DeclareDocInfo
+{
+ university={\AcroTeX.Net},
+ title={\prodName: Arithmetic},
+ author={D. P. Story},
+ email={dpstory@acrotex.net},
+ subject={Documentation for AeB Exam Builder},
+ talksite={\url{www.acrotex.net}},
+ version={v1.0f, 2017/01/16},
+ keywords={LaTeX, PDF, AcroTeX, PDF Flash Card, Arithmetic},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) \the\year, D. P. Story},
+ copyrightInfoURL={http://www.acrotex.net}
+}
+
+\renewcommand\hproportionwebtitle{.75}
+\universityLayout{fontsize=Large,fontfamily=sffamily}
+\titleLayout{fontsize=LARGE,fontfamily=sffamily}
+\authorLayout{fontsize=Large,fontfamily=sffamily}
+\tocLayout{fontsize=Large,color=aeb,fontfamily=sffamily}
+\sectionLayout{indent=-62.5pt,fontsize=large,color=aeb,fontfamily=sffamily}
+\subsectionLayout{indent=-31.25pt,color=aeb,fontfamily=sffamily}
+\subsubsectionLayout{indent=0pt,color=aeb,fontfamily=sffamily}
+\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}}
+
+\def\verygoodbreak{%
+\vskip0pt plus1in\goodbreak\vskip0pt plus-1in}
+
+\hyphenation{Java-Script}
+
+\def\AcroT{Acro\!\TeX}\def\cAcroT{{\textcolor{blue}{\AcroT}}}
+\def\AcroEB{\AcroT{} eDucation Bundle}\def\cAcroEB{\textcolor{blue}{\AcroEB}}
+\def\AcroB{\AcroT{} Bundle}\def\cAcroB{\textcolor{blue}{\AcroB}}
+\def\bUrl{http://www.math.uakron.edu/~dpstory}
+
+\makeatletter
+\let\bslash=\@backslashchar
+\renewcommand{\paragraph}{\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}}
+
+% Begin definition of \appendixsubsection
+\newcounter{appendixsubsection} %\setcounter{appendixsubsection}{0}
+\def\theappendixsubsection{\Alph{appendixsubsection}}
+\def\theHappendixsubsection{\Alph{appendixsubsection}}
+\newcommand\appendixsubsection{%
+ \renewcommand{\@seccntformat}[1]{\csname the##1\endcsname.\enspace}%
+ \@startsection{appendixsubsection}{1}{\z@}%
+ {-2.5ex\@plus -1ex \@minus -.2ex}%
+ {1ex \@plus .2ex}%
+ {\normalfont\normalsize\bfseries\color{blue}}}
+\let\appendixsubsectionmark=\@gobble
+\expandafter\def\csname toclevel@appendixsubsection\endcsname{1}
+
+\let\l@appendixsubsection=\l@section
+\def\web@appendixsubsection#1#2#3{\web@parse#1\\\par\penalty-50 \hspace*{\@tempdima}\mbox{}%
+ \textbf{\makebox[0pt][r]{\makebox[\@tempdima][r]{\hyperlink{#3}{\numberline.\enspace}}}\web@title}\endgraf}
+% end definition of appendixsubsection
+
+\makeatother
+
+\hypersetup{linktocpage}
+
+%\newenvironment{sverbatim}
+%{\par\footnotesize\verbatim}{\endverbatim}
+
+%\newcommand\redpoint{\par\ifdim\lastskip>0pt\relax\vskip-\lastskip\fi
+%\vskip\medskipamount\noindent
+% \makebox[\parindent][l]{\large\color{red}$\blacktriangleright$}}
+%\newcommand\handpoint{\par\ifdim\lastskip>0pt\relax\vskip-\lastskip\fi
+%\vskip\medskipamount\noindent
+% \makebox[\parindent][l]{\large\color{blue}\ding{042}}}
+%\newcommand\newtopic{\par\ifdim\lastskip>0pt\relax\vskip-\lastskip\fi
+%\vskip\medskipamount\noindent
+%}
+
+\def\cs#1{\texttt{\bslash#1}}
+\def\Cs#1{\hyperlink{#1}{\cs{#1}}}
+\def\tableCs#1{\hyperlink{table#1}{\cs{#1}}}
+\def\targ#1#2?{\hypertarget{#2}{\bslash#2}#1}
+
+\def\dps{$\mbox{$\mathfrak D$\kern-.3em\mbox{$\mathfrak P$}%
+ \kern-.6em \hbox{$\mathcal S$}}$}
+
+\def\eForm{\textsf{eForm}}
+
+
+\def\OpenToHere{\OpenAction{\JS{this.gotoNamedDest("Here")}}}
+\def\OpenHere{\hypertarget{Here}{\strut}}%\OpenToHere
+
+\nocopyright
+\norevisionLabel
+\makeatletter
+%\let\web@copyright\@gobble
+\let\web@revision\@gobble
+\renewcommand\webdirectory
+{%
+ \par\ifeqforpaper\else\minimumskip\fi\vspace{\stretch{1}}%
+ \begin{flushleft}\textbf{\large\web@directory}%
+ \vspace{-3pt}
+ \begin{itemize}\setlength{\itemsep}{-3pt}%
+ \bfseries
+ \item \leavevmode\hyperlink{webtoc}{\web@toc}%
+ \item \web@article
+ \item[] \rule[2pt]{2.25in}{.4pt}
+ \item \textsf{\href{apb_man.pdf}{APB}} Documentation
+ \item \href{webeqman.pdf}{\AcroEB} Documentation
+ \end{itemize}
+ \end{flushleft}
+}
+\renewcommand\titlepageTrailer
+{%
+ \webversion
+% \web@copyright\ \copyright\ \webcopyrightyears\ \webversion
+ \hfill\url{http://www.acrotex.net}\\
+ \web@revision\ \@date \hfill\href{mailto:\webemail}{\webemail}
+}
+\renewcommand\titlepageTrailer
+{%
+ \href{mailto:\webemail}{\webemail}
+% \web@copyright\ \copyright\ \webcopyrightyears\ \webversion
+ \hfill\url{http://www.acrotex.net}\\
+ \web@revision\ \@date \hfill\webversion
+}
+\makeatother
+
+\newcounter{exampleno}
+\def\theexampleno{\arabic{exampleno}}
+\newcommand\Example{\refstepcounter{exampleno}%
+\paragraph*{Example~\arabic{exampleno}.}}
+
+\definecolor{aeb}{rgb}{0.24,0.38,0.68}%bleu
+\universityColor{aeb}
+\tocColor{aeb}
+
+\everyCheckBox{\BC{.690 .769 .871}\BG{.941 1 .941}\textColor{1 0 0}}
+\everyRadioButton{\BC{.690 .769 .871}\BG{.941 1 .941}\textColor{0 0 1}\symbolchoice{star}}
+
+%\optionalPageMatter{%
+%\begin{center}
+%\hspace*{1in}\fbox{\begin{minipage}{.4\linewidth}\huge\bfseries
+%Documentation still\\under construction
+%\end{minipage}}
+%\end{center}
+%}
+
+
+%\definePath\bgPath{"C:/Users/Public/Documents/ManualBGs/Manual_BG_Print_AeB.pdf"}
+%\definePath\bgPath{"C:/Users/Public/Documents/ManualBGs/Manual_BG_Print_Games.pdf"}
+
+\chngDocObjectTo{\newDO}{doc}
+\begin{docassembly}
+var titleOfManual="The fc_arith MANUAL";
+var manualfilename="Manual_BG_Print_fetchbib.pdf";
+var manualtemplate="Manual_BG_Brown.pdf"; // Blue, Green, Brown
+var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate;
+var doc;
+var buildIt=false;
+if ( buildIt ) {
+ console.println("Creating new " + manualfilename + " file.");
+ doc = \appopenDoc({cPath: _pathToBlank, bHidden: true});
+ var _path=this.path;
+ var pos=_path.lastIndexOf("/");
+ _path=_path.substring(0,pos)+"/"+manualfilename;
+ \docSaveAs\newDO ({ cPath: _path });
+ doc.closeDoc();
+ doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true});
+ f=doc.getField("ManualTitle");
+ f.value=titleOfManual;
+ doc.flattenPages();
+ \docSaveAs\newDO({ cPath: manualfilename });
+ doc.closeDoc();
+} else {
+ console.println("Using the current "+manualfilename+" file.");
+}
+var _path=this.path;
+var pos=_path.lastIndexOf("/");
+_path=_path.substring(0,pos)+"/"+manualfilename;
+\addWatermarkFromFile({
+ bOnTop:false,
+ bOnPrint:false,
+ cDIPath:_path
+});
+\executeSave();
+\end{docassembly}
+\begin{document}
+
+\maketitle
+
+
+\selectColors{linkColor=black}
+
+\tableofcontents
+
+\selectColors{linkColor=webgreen}
+
+
+\section{Introduction}
+
+The \textsf{fc\_arith} package is used to create an electronic ``flash card'' used to drill a student on elementary arithmetic, addition, subtraction, multiplication, and division. There are options for setting the range of the numbers to be used to randomly select numbers that appear in the arithmetic problem. Numbers can be set to 0, 1, or 2 decimal places. There is an optional timing mechanism that can be used to test a student's quickness in solving problems. There is a collection of fields used to tally the student's work on the arithmetic problems.
+
+\paragraph*{History.} This is a re-work of an earlier PDF on drilling arithmetic problems. At that time, I took a blank PDF page and used the user interface of Acrobat to build the flash card.
+
+In this version, I've taken the original flash card and developed a {\LaTeX} package for generating the flash card, added a number of customization options, and many other enhancements.
+
+\begin{figure}[htb]
+\begin{center}\setlength{\fboxsep}{0pt}
+\fbox{\includegraphics[scale=.9]{graphics/fc04_a}}\\
+\caption{\prodName: Arithmetic}\label{fcaritha}
+\end{center}
+\end{figure}
+
+\section{Requirements and Options}
+
+In this section, we review the requirements to build your own custom
+flash card, and describe the package options available.
+
+\subsection{Requirements}
+
+The package is designed to be used with either a \textsf{Acrobat Distiller}
+or a \textsf{pdflatex} workflow. The only true requirements are
+\begin{itemize}
+\item The \textsf{eforms} package (version 2.5c or later, 2010/03/21 or
+later), a package distributed with AeB (the {Acro\!\TeX} eDucation Bundle%
+\footnote{\url{http://www.math.uakron.edu/~dpstory/webeq.html}}
+
+\item The \textsf{popupmenu} package
+ \footnote{\url{http://mirror.ctan.org/macros/latex/contrib/popupmenu/}}
+ which creates a menu system.
+
+\end{itemize}
+
+\redpoint Sample files: \texttt{fc-acrobat.tex} and \texttt{fc-noacrobat.tex}.
+
+\newtopic\noindent I recommend the use of the \textsf{web} package to design your
+page, just as the sample files do. Enhancements include the use of the
+\textsf{aeb\_pro} package; see the sample file \texttt{fc-acrobat.tex} for an
+illustration of the use of \textsf{aeb\_pro}.
+
+\subsection{PDF Creators}
+
+Any of the PDF creators used by the {\LaTeX} community
+(\app{dvips/Distiller}, \app{pdflatex}, \app{lualatex}, and \app{xelatex})
+may be used to build a {\prodName} document, as is demonstrated by the sample files
+\texttt{fc-acrobat.tex} and \texttt{fc-noacrobat.tex}. Users who prefer
+\app{pdflatex}, \app{lualatex}, and \app{xelatex} but own the \app{Acrobat}
+application may want to look at the sample file \texttt{fc-acrobat.tex}.
+
+\subsection{Options}
+
+\begin{enumerate}
+
+\item\texttt{allownegsub}: The original arithmetic flash card did not allow
+ a negative difference, if this option is used, the differences are
+ allowed to be negative. The default is to not to allow negative
+ differences.
+
+\item \texttt{nomenu}: There is a menu, labeled \uif{Settings},
+ that allows the user change the range of the numbers generated by the
+ flash card, set the number of decimal places, allows the user to toggle
+ the \uif{Keypad} on and off, and so on. For further details
+ see \Nameref{settings}.
+
+ If this option is used, the menu does not appear. The default is for it to appear.
+
+\item \texttt{showkeypadlink}: The \texttt{showkeypadlink} option generates
+ a link with a label of \uif{Toggle Keypad} just above the
+ keypad. Clicking the link toggles the visibility of the keypad.
+
+ This option is useful if the \texttt{nomenu} option is taken, but
+ you want the keypad available to users.
+
+\item \texttt{operations}: Gives the ability to declare what operations
+ flash card should show. Supported operations are \texttt{add},
+ \texttt{sub}, \texttt{mul}, \texttt{div}. For example,
+\begin{Verbatim}[xleftmargin=\amtIndent]
+operations={add,sub}
+\end{Verbatim}
+ creates a flash card in which only addition and subtraction problems
+ are available.
+
+ The default is to make available all operations.
+
+
+\item \texttt{notimedscores}: As can be seen in
+ \hyperref[fcaritha]{Figure~\ref*{fcaritha}}, page~\pageref*{fcaritha},
+ the flash card has many fields that key of the user's performance. One
+ of these is the \uif{Timed Scores} row; this row gives a
+ score based on time required to answer the problem correctly. Some
+ teachers may not want such pressure placed on their students, so if
+ this option is taken, the row is not generated.
+
+\end{enumerate}
+
+\section{The Components of the \sprodName}
+
+We describe the elements of the flash card as they appear, from top to
+bottom, in \hyperref[fcaritha]{Figure~\ref*{fcaritha}},
+page~\pageref*{fcaritha}.
+
+\subsection{Settings}\label{settings}
+
+The \uif{Settings} menu, which can be removed with the
+\texttt{nomenu} option, consists of five menu items:
+\uif{Options}, \uif{Toggle Keypad},
+\uif{Mouse Friendly Keypad}, \uif{Touch Friendly
+Keypad}, and \uif{About PDF Flash Cards}, see the figure below.
+
+\begin{figure}[htb]
+\begin{center}\setlength{\fboxsep}{0pt}
+\fbox{\includegraphics[scale=.75]{graphics/menu_settings}}\\
+\caption{The \texorpdfstring{\protect\uif{Settings}}{Settings} menu}\label{menuSettings}
+\end{center}
+\end{figure}
+
+The labeling for the \uif{Settings} menu is modified using the
+command \cs{fcSettings}, the default definition is
+\verb!\newcommand{\fcSettings}{Settings}!. The color of the link is set by
+the command \cs{fcSettingsColor}, the default definition of which is
+\verb!\newcommand{\fcSettingsColor}{black}!.
+
+\paragraph*{The \env{MenuFC} environment.} The \uif{Settings} menu is created by the environment seen below and found the
+the demonstration files of this distribution. The \env{MenuFC} is a special environment
+defined in \pkg{fc\_arith} to enclose the menu items.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\begin{MenuFC}
+ \fcOptionsMenuItem
+ \fcToggleKeypadMenuItem
+ \fcMouseKPMenuItem
+ \fcTouchKPMenuItem
+ \fcAboutFC
+\end{MenuFC}
+\end{Verbatim}
+You can exclude some of the menu items listed above. From
+Figure~\ref{menuSettings}, the \uif{Mouse Friendly Keypad} and
+\uif{Touch Friendly Keypad} items are initially grayed out. They
+become active when \uif{Toggle Keypad} is selected. The
+\uif{Touch Friendly Keypad} is larger than the
+\uif{Mouse Friendly Keypad} and fits fat fingers better. See
+\mlNameref{toggleKp} for additional information on the keypad.
+
+The names of the menu items may be localized to your own language.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\renewcommand\fcOptionsMenuItemTitle{Options}
+\renewcommand\fcToggleKeypadMenuItemTitle{Toggle Keypad}
+\renewcommand\fcMouseKPMenuItemTitle{Touch Friendly Keypad}
+\renewcommand\fcTouchKPMenuItemTitle{Mouse Friendly Keypad}
+\renewcommand\fcAboutFCTitle{About PDF Flash Cards}
+\end{Verbatim}
+The default English title defines are shown. All can be redefined in the preamble or in the
+customization file \texttt{fc\_custom.def}, discussed in \hyperref[s:CusStrs]{Section~\ref*{s:CusStrs}}.
+
+\subparagraph*{Adding custom menu items.} You can also add custom menu items,
+but some effort. Suppose we want to add an item titled \uif{AcroTeX.Net}. The
+special environment generates a \env{popupmenu} environment, as defined by
+the \pkg{popupmenu} package. We use the \cs{item} command, as defined within
+a \env{popupmenu} environment and assign values for \texttt{title} and
+\texttt{return}. The value of \texttt{return} is any string, but
+\pkg{fc\_arith} puts a restriction on its value: it must not be 0, 1, 2, 3,
+or 4, for these values are used by the preexistent menu items.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\begin{MenuFC}
+ \fcOptionsMenuItem
+ \fcToggleKeypadMenuItem
+ \fcMouseKPMenuItem
+ \fcTouchKPMenuItem
+ \item{title=AcroTeX.Net Home,return=acrotexhome}
+ \item{title=AcroTeX.Net Blog,return=acrotexblog}
+ \fcAboutFC
+\end{MenuFC}
+\end{Verbatim}
+The \env{MenuFC} environment occurs in the preamble of your document. Then to associate an action
+with the use selecting this new item, add the following code to the preamble as well:
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\begin{insDLJS}{cmfc}{Custom Menu Events}
+function processCustomFcMenu(n) {
+ // n=the return value of the selected item
+ switch(n) {
+ case "acrotexhome":
+ app.launchURL("http://www.acrotex.net",false);
+ break;
+ case "acrotexblog":
+ app.launchURL("http://blog.acrotex.net",false);
+ break;
+ }
+}
+\end{insDLJS}
+\end{Verbatim}
+Here I use the JavaScript \texttt{switch} operator to take the incoming
+argument \texttt{n} (the return value) and associating an action. If the
+user-defined \texttt{processCustomerFcMenu()} is created, \pkg{fc\_arith}
+passes the code scream from the function \texttt{processFcMenu()}, which
+handles all the predefined menu items, to \texttt{processCustomerFcMenu()}.
+
+With these definitions, when the user selects `\uif{AcroTeX.Net Home}', the
+default browser opens and loads the page \url{http://www.acrotex.net}. This
+technique is illustrated in the file \texttt{fc\_noacrobat.tex}.
+
+
+
+\subsubsection{Options}\label{options}
+
+The \uif{Options} menu item calls forth the
+\uif{Options} dialog box,
+\hyperref[menuOptions]{Figure~\ref*{menuOptions}},
+page~\pageref*{menuOptions}. Through this dialog box, you can set the
+intervals from which random numbers are drawn, and their precision.
+
+\paragraph*{Addition, Subtraction, Multiplication.} We handle these three
+operations in the same way, so we explain them together. For these three
+we have a top number and a bottom number.
+\begin{quote}%\large
+\begin{tabular}{rc@{ }rc@{ }rc@{ }r}
+top & & $14$ & & $17$ & & $12$ \\
+bottom &$+$& $2$ &$-$& $4$ &$\times$& $7$ \\
+\end{tabular}
+\end{quote}
+In the dialog box, you can set the range (the interval) of numbers from which
+randomly generated numbers are taken. For example, the
+\hyperref[menuOptions]{Figure~\ref*{menuOptions}} on
+page~\pageref*{menuOptions} specifies that for \textsf{Addition} problems, the top
+value should come from a range of $2$ to $20$, the bottom range is $5$ to
+$30$, and there should be no decimal places (hence, for this example, we
+deal with integer arithmetic). {\prodName} supports at most two decimal places.
+
+\begin{figure}[htb]
+\begin{center}\setlength{\fboxsep}{0pt}
+\fbox{\includegraphics[scale=.75]{graphics/options}}\\
+\caption{The \texorpdfstring{\protect\uif{Options}}{Options} dialog box}\label{menuOptions}
+\end{center}
+\end{figure}
+
+\paragraph*{Division.} Division is handled separately because of the way the
+problem is generated. Rather than randomly generating the top and bottom
+values as is done for addition, subtraction, and multiplication, the
+\textsf{fc\_arith} package randomly generates the \emph{quotient} and
+\emph{divisor}, then calculates the dividend
+\begin{equation*}
+ \text{dividend}=\text{quotient}\times\text{divisor}
+\end{equation*}
+This leads to the assurance of a clean division problem with no nasty
+rounding, or infinite decimal expansions ($ 1/3 0.33333\dots $). It is a
+design decision made for the original \prodName, where the targeted audience was
+elementary school age students.
+
+The top is now the dividend and the bottom is the divisor, but in the
+\uif{Options} dialog box, \uif{Range Top} and
+\uif{Range Bottom} is replaced by \uif{Range
+Quotient} and \uif{Range Divisor} to reflect the different way
+of generating the division problem.
+
+\redpoint The dialog box retains the settings only during the current session
+of Adobe Reader. The Reader does not have the ability to save data so once
+the {\sprodName} is closed, the data is lost.
+
+\subsubsection{Toggle Keypad}\label{toggleKp}
+
+Selecting the \uif{Toggle Keypad} submenu item toggles the
+keypad, which is initially hidden, see
+\hyperref[menuKeypad]{Figure~\ref*{menuKeypad}}. The keyboard input region is
+changed to read only, the student can only enter through the keypad.
+
+The touch friendly keypad is larger by an amount of 5 points. This can be changed
+if you feel the touch friendly is not large enough by the command \cs{amtChngMouToTou}.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand\amtChngMouToTou{5}
+\end{Verbatim}
+The default definition is given above, use \cs{renewcommand} to change this,
+keeping in mind a larger keypad may go beyond the page. Some positioning
+adjustments may be needed.
+
+\begin{figure}[htb]
+\begin{center}\setlength{\fboxsep}{0pt}
+\fbox{\includegraphics[scale=1]{graphics/keypad}}\\
+\caption{The \texorpdfstring{\protect\uif{Keypad}}{Keypad}}\label{menuKeypad}
+\end{center}
+\end{figure}
+
+\subsubsection{About PDF Flash Card}\label{aboutFC}
+
+Some information about the {\prodName}.
+
+\subsection{The \texorpdfstring{\protect\cs{arithProb}}
+{\CMD{arithProb}} Command}
+
+The \cs{arithProb} command is a trio of form fields laid out to display an
+arithmetic problem, see
+\hyperref[arithprob]{Figure~\ref*{arithprob}},\begin{NoHyper}\footnote{Figure~\ref*{arithprob}
+shows an outline of the fields so you can see their relative
+positions.}\end{NoHyper} and \hyperref[fcannot]{Figure~\ref*{fcannot}},
+page~\pageref*{fcannot}.
+
+\begin{figure}[htb]
+\begin{center}\setlength{\fboxsep}{0pt}
+\fbox{\includegraphics[scale=1]{graphics/arithprob}}\\
+\caption{The \cs{arithProb} Command}\label{arithprob}
+\end{center}
+\end{figure}
+
+The three fields and their descriptions follow:
+\begin{itemize}
+ \item \texttt{top}: The name of this text field is \texttt{top}, and it
+ holds the upper most number in the problem (this number is called
+ by different names depending on the operation, we'll just call it
+ the top number).
+ \item \texttt{bottom}: The name of this text field is \texttt{bottom},
+ and it holds the lower number in the problem.
+ \item \texttt{operation}: The name of this text field is
+ \texttt{operation}.
+\end{itemize}
+The top and bottom fields use a monospace font (courier-bold) so that when
+there are decimal numbers involved, the numbers will align properly.
+
+\begin{figure}[htb]
+\begin{center}\setlength{\fboxsep}{0pt}
+\fbox{\includegraphics[scale=.5]{graphics/fc_annot}}\\
+\caption{The \prodName, Annotated}\label{fcannot}
+\end{center}
+\end{figure}
+
+
+
+\paragraph*{Appearance Parameters for \cs{arithProb}.} The three fields are
+bundled together as a unit, which makes it difficult to set the appearance of
+each individual field, unless you want to redefine \cs{arithProb}. There are,
+however, several commands available to make some adjustments to meet your
+needs.
+\begin{itemize}
+ \item \cs{tBGNoBorder}: This is a command that holds various
+ \textsf{eform} key-value pairs that are passed to these three
+ fields. The default definition of \cs{tBGNoBorder} is
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\tBGNoBorder}{\BC{}\BG{}\autoCenter{n}
+ \textSize{0}\textColor{1 0 0}\Ff\FfReadOnly}
+\end{Verbatim}
+ This set of parameters gives a field with transparent border and
+ background, auto-adjusting font size, red text, and with a readonly
+ attribute. This command can be redefined.
+ \item \cs{monoSpaceFont}: These three fields use a monospace font, you
+ can change this font using \cs{monoSpaceFont}. The default
+ definition is
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\monoSpaceFont}{CoBo}
+\end{Verbatim}
+ which is courier-bold.
+ \item \cs{setDimOf}: The \cs{setDimOf} can be used to set the
+ dimensions of these fields. The command takes three parameters,
+ field name, width and height. The default definitions for these
+ three fields are
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\setDimOf{top}{1in}{0.62in}
+\setDimOf{operation}{.38in}{.62in}
+\setDimOf{bottom}{1in}{0.62in}
+\end{Verbatim}
+Note that the dimensions of \texttt{top} and \texttt{bottom} are the same,
+as they are supposed to align vertically.
+\end{itemize}
+
+\subsection{The \texorpdfstring{\protect\cs{inputRegion}} {\CMD{inputRegion}} Command}
+
+When the keypad field is hidden (see the \Nameref{keypad}), the user inputs
+the response to the arithmetic problem into the field titled \texttt{result}.
+This field is placed on the flash card using the \cs{inputRegion} command;
+this field is usually placed immediately beneath the \cs{arithProb} command
+so that the \texttt{result} field is aligned vertically with the \texttt{top}
+and \texttt{bottom} fields.
+
+The syntax for \cs{inputRegion} is
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\inputRegion[!ameta(eform_parameters)]
+\end{Verbatim}
+The default appearance properties are pre-defined as
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\cBGNoBorder}{\Q{1}\BC{}\BG{}\autoCenter{n}
+ \textSize{0}\textColor{0 0 0}\BG{.75 .75 .75}
+ \Ff\FfReadOnly}
+\end{Verbatim}
+You can redefine \cs{cBGNoBorder}, or you can introduce a few changes through
+the optional parameter.
+
+The dimensions of the \texttt{result} fields can be set using \cs{setDimOf}.
+The default definition is
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\setDimOf{result}{1.38in}{0.62in}
+\end{Verbatim}
+The \texttt{0.62in} is the same width used for the \texttt{top} and \texttt{bottom} fields.
+
+\subsection{The \texorpdfstring{\protect\cs{startAgain}}{\CMD{startAgain}}
+ and \texorpdfstring{\protect\cs{newCard}} {\CMD{newCard}} Command}\label{startAgainnewCard}
+
+The \cs{newCard} command generates a push button named \texttt{NewProblem},
+when pushed, a new arithmetic is randomly generated. The \cs{startAgain}
+command creates a push button named \texttt{StartAgain}, when pushed, all
+fields are cleared, and any JS variables are re-initialized. The syntax for
+these two fields is
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\startAgain[!ameta(eform_parameters)]
+\newCard[!ameta(eform_parameters)]
+\end{Verbatim}
+The default appearance properties are pre-defined as
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\tBGNoBorderI}{\BC{}\BG{}\autoCenter{n}
+ \textSize{0}\textColor{1 0 0}}
+\end{Verbatim}
+You can redefine \cs{tBGNoBorderI}, or you can introduce a few changes
+through the optional parameter.
+
+The dimensions of \texttt{NewProblem} and \texttt{StartAgain} can be set
+using \cs{setDimOf}. The default definition is
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\setDimOf{StartAgain}{0.88in}{0.62in}
+\setDimOf{NewProblem}{0.88in}{0.62in}
+\end{Verbatim}
+The text font used by these two fields is determined by the command
+\cs{fieldFont}. The default definition of \cs{fieldFont} is
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\fieldFont}{Helv}
+\end{Verbatim}
+The name for the font should be one of the 13 basic fonts, or a PostScript
+font. In the latter case, most likely, the Acrobat Distiller is needed for
+PDF creation.
+
+\subsection{The \texorpdfstring{\protect\cs{alertbox}}{\CMD{alertbox}} Command}\label{alertbox}
+
+The \cs{alertbox} command creates a transparent text field named
+\texttt{alertbox}, which displays \uif{Right!} and \uif{Wrong!}
+messages. The syntax for this field is
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\alertbox[!ameta(eform_parameters)]
+\end{Verbatim}
+The default appearance properties are pre-defined as
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\tBGNoBorder}{\BC{}\BG{}\autoCenter{n}
+ \textSize{0}\textColor{1 0 0}\Ff\FfReadOnly}
+\end{Verbatim}
+You can redefine \cs{tBGNoBorder}, or you can introduce a few changes through
+the optional parameter.
+
+The dimensions of \texttt{alertbox} can be set using \cs{setDimOf}. The default definition is
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\setDimOf{alertbox}{.88in}{.62in}
+\end{Verbatim}
+
+\subsection{The \texorpdfstring{\protect\cs{Keypad}}{\CMD{Keypad}} Command}\label{keypad}
+
+The \cs{Keypad} creates a number of fields in the form of a keypad, see
+\hyperref[keypad]{Figure~\ref*{keypad}}. When the keypad is visible, the
+result field (created by \cs{inputRegion}) is read-only.
+
+\begin{figure}[htb]
+\begin{quote}
+\settowidth{\totaltextwidth}{Figure 0: The Keypad}
+\begin{minipage}{\totaltextwidth}\centering
+\setlength{\fboxsep}{0pt}
+\fbox{\includegraphics[scale=.6]{graphics/keypad}}\\
+\caption{The Keypad}\label{keypad}
+\end{minipage}
+\end{quote}
+\end{figure}
+
+\newtopic\noindent
+The default appearance properties are pre-defined as
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\tBGNoBorder}{\BC{}\BG{}\autoCenter{n}
+ \textSize{0}\textColor{1 0 0}\Ff\FfReadOnly}
+\end{Verbatim}
+You can redefine \cs{tBGNoBorder}, or you can introduce a few changes through the optional parameter.
+
+The dimension of each key is based on the value of \cs{szNum}, the default definition is
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\szNum}{14bp}
+\end{Verbatim}
+The default appearance properties are pre-defined as
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\myNumPadI}{\F\FHidden\autoCenter{n}
+ \textSize{8}\textFont{\fieldFont}\S{S}}
+\end{Verbatim}
+You can redefine \cs{myNumPadI}.
+
+The labeling for the \uif{Enter} and \uif{Back} keys can be redefined as well, their definitions are
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\kpBack}{Back}
+\newcommand{\kpEnter}{Enter}
+\end{Verbatim}
+
+\subsection{The \texorpdfstring{\protect\cs{cbTiming}}{\CMD{cbTiming}} Command}\label{cbTiming}
+
+The \cs{cbTiming} command creates a combo box, named \texttt{TimeDelay}, that
+lists a menu of time values for the user to practice against. The default is
+\uif{No Timing}.
+
+\paragraph*{Rules for Timed Responses.} When \uif{No Timing} is in effect,
+if the student correctly answers the problem in the time allotted, credit is
+awarded; otherwise, no credit is given. When another time setting is in
+effect, the same rule applies as above, except no credit is awarded if the
+time is up, even if the response is correct. Click on the push button labeled
+\uif{Timed Scores} to see the rules for awarding the points, depicted in Figure~\ref*{fig:timedscores}.
+
+\begin{figure}[htb]\centering
+\setlength{\fboxsep}{0pt}
+\fbox{\includegraphics[scale=.6]{graphics/timedscores}}\\
+\caption{The timed scores dialog box}\label{fig:timedscores}
+\end{figure}
+
+The strings of this dialog box may be localize to another language, refer to \hyperref[s:CusStrs]{Section~\ref*{s:CusStrs}}
+for details.
+
+\newtopic\noindent\textbf{Note:} The original idea behind the timed scores is to have
+students compete against each other. For example, for addition, let each
+student attempt $10$ problems, the highest score wins! Try this with
+\uif{No Timing} first, then start decreasing the time value
+progressively down to $5\,\text{sec}$. Who is the fastest with the mostest!
+
+The syntax for \cs{cbTiming} is
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\cbTiming[!ameta(eform_parameters)]
+\end{Verbatim}
+The default appearance properties are pre-defined as
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\cBGBorder}{\BC{0 0 0}\BG{.75 .75 .75}
+ \autoCenter{n}\textSize{0}\textColor{0 0 0}}
+\end{Verbatim}
+You can redefine \cs{cBGBorder}, or you can introduce a few changes through
+the optional parameter.
+
+The dimensions of \texttt{TimeDelay} field can be set using \cs{setDimOf}:
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\setDimOf{TimeDelay}{0.9in}{0.24in}
+\end{Verbatim}
+The font used in the list box is determined by the value of \cs{fieldFont},
+the default definition is \verb!\newcommand{\fieldFont}{Helv}!.
+
+The string \uif{No Timing} can be modified using \cs{fcNoTiming}:
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\fcNoTiming}{No Timing}
+\end{Verbatim}
+
+
+\subsection{The \texorpdfstring{\protect\cs{ansField}}{\CMD{ansField}} Command}\label{ansField}
+
+The \cs{ansField} creates a text field named \texttt{ansregion}; the field
+holds the correct answer to the problem.
+
+The syntax for \cs{cbTiming} is
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\ansField[!ameta(eform_parameters)]
+\end{Verbatim}
+The appearance of this field can be modified using \cs{cBGNoBorder}; the default definition is,
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\cBGNoBorder}{\Q{1}\BC{}\BG{}\autoCenter{n}
+ \textSize{0}\textColor{0 0 0}\BG{.75 .75 .75}\Ff\FfReadOnly}
+\end{Verbatim}
+This can be redefined as desired.
+
+The dimensions of \texttt{ansregion} can be set be \cs{setDimOf}:
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\setDimOf{ansregion}{.87in+10bp}{.24in}
+\end{Verbatim}
+Notice that a little arithmetic on dimensions is used, this is because the
+\textsf{fc\_arith} package inputs the \textsf{calc} package.
+
+The \texttt{ansregion} has a formatting string, it prepends \texttt{Answer:}
+to the correct answer. You can change this word using the command
+\cs{fmtAnswer} the definition of which is
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\fmtAnswer}{Answer:}
+\end{Verbatim}
+
+\subsection{The \texorpdfstring{\protect\cs{cbOperation}}{\CMD{cbOperation}} Command}\label{cbOperation}
+
+The \cs{cbOperation} command creates a combo box, named
+\texttt{ChooseOperation}, that lists a menu of arithmetic operations for the
+user to select.
+
+The syntax for \cs{cbOperation} is
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+\cbOperation[!ameta(eform_parameters)]
+\end{Verbatim}
+The default appearance properties are pre-defined as
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\cBGBorder}{\BC{0 0 0}\BG{.75 .75 .75}
+ \autoCenter{n}\textSize{0}\textColor{0 0 0}}
+\end{Verbatim}
+You can redefine \cs{cBGBorder}, or you can introduce a few changes through
+the optional parameter.
+
+The dimensions of \texttt{ChooseOperation} field can be set using \cs{setDimOf}:
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\setDimOf{ChooseOperation}{1.38in-10bp}{0.24in}
+\end{Verbatim}
+The font used in the list box is determined by the value of \cs{fieldFont},
+the default definition is \verb!\newcommand{\fieldFont}{Helv}!.
+
+The strings used in the combo box can be modified by redefining the following commands:
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\fcAddition}{Addition}
+\newcommand{\fcSubtraction}{Subtraction}
+\newcommand{\fcMultiplication}{Multiplication}
+\newcommand{\fcDivision}{Division}
+\end{Verbatim}
+
+\subsection{The \texorpdfstring{\protect\cs{statsFields}}{\CMD{statsFields}} Command}\label{statsFields}
+
+The \cs{statsField} command creates a number of fields that hold the
+statistics of the user's attempts at answering arithmetic problems.
+
+The following definitions are used.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\setDimOf{fcSF}{0.37in}{0.25in}
+\newcommand{\statsFieldOpColor}{1 0 0}
+\newcommand{\statsFieldColor}{blue}
+\end{Verbatim}
+The first is to set the dimensions of each field, they all have the same
+dimension. The second sets the color for the operations of $+$, $-$, $\times$
+and \char247; the default color for the labeling of these operations is red
+(\verb!{1 0 0}! in the RGB color space. The \cs{statsFieldColor} is a color
+of typeset content and its default is \texttt{blue}. (\cs{statsFieldOpColor}
+is used in form fields, while \cs{statsFieldColor} is {\LaTeX}ed.)
+
+\section{Other Customizations}
+
+In this section, we itemize various other customizations not already mentioned.
+
+\subsection{Setting the Range and Decimal}
+
+The command \cs{DeclareArithParams}---executed in the preamble only---is
+used to set the start-up parameters of the \uif{Options} menu
+\hyperref[menuOptions]{Figure~\ref*{menuOptions}} on
+page~\pageref*{menuOptions}.\footnote{If the \texttt{nomenu} option is
+taken, the parameters are still used, but user has no way of changing
+them.}
+
+The \cs{DeclareArithParams} takes a series of key-values. We classify the
+keys by function: setting the intervals and setting the decimal places.
+\begin{itemize}
+ \item \textbf{Setting the intervals.} Each of these keys takes an
+ interval of the form \texttt{[a,b]}. Because there is a comma in the
+ interval notation, the interval needs to be enclosed in braces, like
+ so \verb!{[a,b]}!.
+ \begin{itemize}
+ \item \textbf{Addition:} \verb!addT={[a,b]}!, \verb!addB={[a,b]}!
+ \item \textbf{Subtraction:} \verb!subT={[a,b]}!, \verb!subB={[a,b]}!
+ \item \textbf{Multiplication:} \verb!mulT={[a,b]}!, \verb!mulB={[a,b]}!
+ \item \textbf{Division:} \verb!divQ={[a,b]}!, \verb!divB={[a,b]}!
+ \end{itemize}
+ \item {Setting the decimal places.} The value of these keys take any
+ of three values \texttt{none}, \texttt{1}, or \texttt{2}. In all
+ cases, the default is \texttt{none}.
+ \begin{itemize}
+ \item \textbf{Addition:} \verb!addDecT=none|1|2!, \verb!addDecB=none|1|2!
+ \item \textbf{Subtraction:} \verb!subDecT=none|1|2!, \verb!subDecB=none|1|2!
+ \item \textbf{Multiplication:} \verb!mulT=none|1|2!, \verb!mulDecB=none|1|2!
+ \item \textbf{Division:} \verb!divDecQ=none|1|2!, \verb!divDecB=none|1|2!
+ \end{itemize}
+\end{itemize}
+
+The default definitions are
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\DeclareArithParams
+{%
+ addT={[0,100]},addB={[0,100]},
+ subT={[0,100]},subB={[0,100]},
+ mulT={[0,100]},mulB={[0,10]},
+ divQ={[0,10]},divB={[0,10]},
+}
+\end{Verbatim}
+The decimal points are all set to \texttt{none}, by default.
+
+\newtopic\noindent Below is a complete example of setting all parameters.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\DeclareArithParams
+{%
+ addT={[2,20]},addB={[5,30]},
+ addDecT=none,addDecB=2,
+ subT={[1,5]},subB={[5,10]},
+ subDecT=1,subDecB=2,
+ mulT={[1,12]},mulB={[1,10]},
+ mulDecT=1,mulDecB=2,
+ divQ={[1,4]},divB={[1,10]},
+ divDecQ=1,divDecB=2,
+}
+\end{Verbatim}
+
+\subsection{Customization Strings}\label{s:CusStrs}
+
+The following English strings are used in {\sprodName}. These can all be redefined.
+
+\newtopic\noindent The following is a message that appears in an alert box when your time is up.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\timeUpMsg}{Your Time is UP!}
+\end{Verbatim}
+These next two are the default messages in the \texttt{alertbox} text field.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\rightMsg}{Right!}
+\newcommand{\wrongMsg}{Wrong!}
+\end{Verbatim}
+The text on the \texttt{StartAgain} and \texttt{NewProblem}.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\startAgainMsg}{Start Again}
+\newcommand{\newCardMsg}{New Card}
+\end{Verbatim}
+The formatting of the \texttt{ansfield}.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\fmtAnswer}{Answer:}
+\end{Verbatim}
+Labels that appear on the key pad.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\kpBack}{Back}
+\newcommand{\kpEnter}{Enter}
+\end{Verbatim}
+The default setting for the \texttt{TimeDelay} combo box.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\fcNoTiming}{No Timing}
+\end{Verbatim}
+The listing of arithmetic operations in to combo box titled \texttt{ChooseOperation}.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\fcAddition}{Addition}
+\newcommand{\fcSubtraction}{Subtraction}
+\newcommand{\fcMultiplication}{Multiplication}
+\newcommand{\fcDivision}{Division}
+\end{Verbatim}
+The text of the menu that, by default, appears in the upper left-corner.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\fcSettings}{Settings}
+\renewcommand\fcOptionsMenuItemTitle{Options}
+\renewcommand\fcToggleKeypadMenuItemTitle{Toggle Keypad}
+\renewcommand\fcMouseKPMenuItemTitle{Touch Friendly Keypad}
+\renewcommand\fcTouchKPMenuItemTitle{Mouse Friendly Keypad}
+\renewcommand\fcAboutFCTitle{About PDF Flash Cards}
+\end{Verbatim}
+Some text strings that are part of the \cs{statsField} set.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand{\toggleKeypad}{Toggle Keypad}
+\newcommand{\operation}{Operation}
+\newcommand{\numCorrect}{Number Correct}
+\newcommand{\numAttempted}{Number Attempted}
+\newcommand{\percentCorrect}{Percentage Correct}
+\newcommand{\timedScores}{Timed Scores}
+\end{Verbatim}
+Some strings in the timed scores dialog box (Figure~\ref{fig:timedscores}).
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\def\fctCharWidth{22}
+\def\fctInstr{"Points are awarded, based on time,
+ for successfully solving a problem:"}
+\def\fctTimeElapsed{"Time elapsed"}
+\def\fctPoints{"Points"}
+\def\fctLessThanV{"Less than 5 sec"}
+\def\fctLessThanVPoints{6}
+\def\fctBtwnVAndX{"Between 5 and 10 sec"}
+\def\fctBtwnVAndXPoints{5}
+\def\fctBtwnXAndXV{"Between 10 and 15 sec"}
+\def\fctBtwnXAndXVPoints{4}
+\def\fctBtwnXVAndXX{"Between 15 and 20 sec"}
+\def\fctBtwnXVAndXXPoints{3}
+\def\fctBtwnXXAndXXV{"Between 20 and 25 sec"}
+\def\fctBtwnXXAndXXVPoints{2}
+\def\fctGtrXXV{"Greater than 25 sec"}
+\def\fctGtrXXVPoints{1}
+\end{Verbatim}
+The following are the strings used for the naming the clusters of the \uif{Settings > Options} menu.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand\fcAdditionName{\fcAddition}
+\newcommand\fcSubtractionName{\fcSubtraction}
+\newcommand\fcMultiplicationName{\fcMultiplication}
+\newcommand\fcDivisionName{\fcDivision}
+\end{Verbatim}
+If the \uif{Settings} control is available, but the \env{MenuFC} environment was not
+used to create any menu items, an alert box appears when the use presses the
+\uif{Settings} control with the following message on it.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand\fcMenuFCMsg{No menu items to display}
+\end{Verbatim}
+Various tool tips that appear on various controls.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand\toggleKeyPadBtnColor{0 0 1}
+\newcommand\toggleKeyPadBtnTooltip{Click to toggle keypad,
+ shift-click to toggle between mouse and touch keypads}
+\newcommand{\fcSettingsTooltip}{Click for a dropdown menu
+ of menu choices}
+\newcommand{\cbTimingToolip}{Select a time challenge from
+ the dropdown menu}
+\newcommand{\cbOperationTooltip}{Choose an arithmetic
+ operation to practice}
+\newcommand{\timeScoresTooltip}{Click to see how points
+ are assigned}
+\end{Verbatim}
+The strings to localize the \uif{Timed Scores} dialog box. You may have to increase
+the value of \cs{fcOptTextWidth} from 80 (pixels) to something larger if your language strings
+are much longer than their English counterparts.
+\begin{Verbatim}[xleftmargin=\amtIndent]
+\newcommand\fcOptTextWidth{80}
+\newcommand\fcOptTopRange{Range Top}
+\newcommand\fcOptBottomRange{Range Bottom}
+\newcommand\fcOptTopRangeDiv{Range Quotient}
+\newcommand\fcOptBottomRangeDiv{Range Divisor}
+\newcommand\fcOptTo{ to }
+\newcommand\fcOptAllowNegNumber{Allow Negative Subtraction}
+\newcommand\fcOptDecimal{Decimals:}
+\newcommand\fcOptDecimalNone{none}
+\end{Verbatim}
+All this customization commands are listed in \texttt{fc-strings.txt}. There they can be
+redefined and copy and pasted into the file \texttt{fc\_custom.def}.
+
+\newtopic\noindent\textbf{\textcolor{red}{Customization.}} Any change in language
+strings can be put in the file \texttt{fc\_custom.def}. Such a file is input,
+if found, at the end of the package.
+
+\section{Suggested Layout}
+
+The files \texttt{fc-acrobat.tex} and \texttt{fc-noacrobat.tex} contain the
+original layout of {\prodName}. We include that layout in this manual for
+completeness sake.
+
+\begin{Verbatim}[fontsize=\small]
+%
+% Design your own title
+%
+\begin{center}
+{%
+ \LARGE\bfseries\color{blue}PDF Flash Cards\\[1ex]
+ Elementary Arithmetic
+}
+
+%
+% The arithmetic problem, \arithProb: top, bottom and operation.
+% This command is REQUIRED. This command generates three text fields
+% stacked so that form a standard arithmetic
+%
+
+\arithProb
+
+%
+% \alertbox is a text field where a right or wrong message is
+% written--REQUIRED
+%
+% \startAgain clears the statistics field, re-initializes a
+% variables--REQUIRED
+%
+% \inputRegion is where the user enters his/her answer--REQUIRED
+%
+% \Keypad allows user to enter answer with mouse--OPTIONAL
+%
+% \newCard random selects a new arithmetic problem (add, sub, mul, div)
+% depending on the combo box \cbOperation, described below--REQUIRED
+%
+% These components can be moved around to a new design, though I don't
+% know what that would be. I have no imagination for design myself.
+%
+\mbox{\vbox{\smash{\alertbox}\startAgain}\fcSep
+ \inputRegion\fcSep\vbox{\smash{\raisebox{4bp}{\Keypad}}\newCard}}
+
+\medskip
+%
+% \cbTiming is combo box use to set a time limit on answer the
+% problem--OPTIONAL
+%
+% There is also a package option, notimedscores, that removes timing
+% calculations from the PDF, no statistics, no alerts. The option
+% notimedscores makes the combo box created y \cbTiming into a readonly
+% field.
+%
+% \ansField is the field the user enters his/her answer into---REQUIRED
+%
+% \cbOperation a combo box to select what operation to use---REQUIRED
+%
+\mbox{\cbTiming\fcSep\ansField\fcSep\cbOperation}
+
+\medskip
+
+%
+% This calculation computes the width of the previous row of fields, and
+% sets \fcWidth, a dimension in this package, to that width.
+%
+\settowidth{\fcWidth}{\cbTiming\fcSep\ansField\fcSep\cbOperation}
+%
+% \statsFields is a collection of text fields to display user
+% statistics---OPTIONAL
+%
+\makebox[\fcWidth][s]{\statsFields}
+
+\end{center}
+\end{Verbatim}
+\end{document}
+
+Added
+\newcommand\toggleKeyPadBtnColor{0 0 1}
+\newcommand\toggleKeyPadBtnTooltip{Click to toggle keypad, shift-click
+ to toggle between mouse and touch keypads}
+\newcommand{\fcSettingsTooltip}{Click for a dropdown menu of menu choices}
+\newcommand{\cbTimingToolip}{Select a time challenge from the dropdown menu}
+\newcommand{\cbOperationTooltip}{Choose an arithmetic operation to practice}
+\newcommand{\timeScoresTooltip}{Click to see how points are assigned}
+
+\newcommand\fcOptTextWidth{80}
+\newcommand\fcOptTopRange{Range Top}
+\newcommand\fcOptBottomRange{Range Bottom}
+\newcommand\fcOptTopRangeDiv{Range Quotient}
+\newcommand\fcOptBottomRangeDiv{Range Divisor}
+\newcommand\fcOptTo{ to }
+\newcommand\fcOptAllowNegNumber{Allow Negative Subtraction}
+\newcommand\fcOptDecimal{Decimals:}
+\newcommand\fcOptDecimalNone{none}
+
+\newcommand\fcMenuFCMsg{No menu items to display}
diff --git a/texmf-dist/source/latex/fc-arith/fc_arith.dtx b/texmf-dist/source/latex/fc-arith/fc_arith.dtx
new file mode 100644
index 00000000..bb32ebba
--- /dev/null
+++ b/texmf-dist/source/latex/fc-arith/fc_arith.dtx
@@ -0,0 +1,2186 @@
+%\iffalse
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% fc_arith.sty package, %%
+%% Copyright (C) 1999-2017 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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.2 of %%
+%% the License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</copyright>
+%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+%<package>\ProvidesPackage{fc_arith}
+%<package> [2017/01/16 v1.0f fc_arith: PDF flash cards for arithmetic drill (dps)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex=false]{hyperref}
+%\def\texorpdfstring#1#2{#1}
+%\pdfstringdefDisableCommands{\let\\\textbackslash}
+\OnlyDescription % comment out for implementation details
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\InputIfFileExists{aebdocfmt.def}{\PackageInfo{fc_arith}{Inputting aebdocfmt.def}}
+ {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax
+ \PackageInfo{fc_arith}{aebdocfmt.def cannot be found}}
+\begin{document}
+\def\CMD#1{\textbackslash#1}
+ \GetFileInfo{fc_arith.sty}
+ \title{fc\_arith: Flash Cards for Arithmetic}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@uakron.edu}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \DocInput{fc_arith.dtx}
+\IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here.\\Execute
+ \texttt{makeindex -s gind.ist -o fc\_arith.ind fc\_arith.idx} on the command line and recompile
+ \texttt{fc\_arith.dtx}.}
+\IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here.\\Execute
+ \texttt{makeindex -s gglo.ist -o fc\_arith.gls fc\_arith.glo} on the command line and recompile
+ \texttt{fc\_arith.dtx}.}
+\end{document}
+%</driver>
+% \fi
+% \MakeShortVerb{|}
+% \InputIfFileExists{aebdonotindex.def}{\PackageInfo{web}{Inputting aebdonotindex.def}}
+% {\PackageInfo{web}{cannot find aebdonotindex.def}}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%\section{Package Options}
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+\RequirePackage{ifxetex}
+\RequirePackage{calc}
+\let\fc@YES=y \let\fc@NO=n
+% \end{macrocode}
+% The original\IndexOpt{allownegsub} arithmetic flash cards did not allow a negative difference,
+% if this option is used, the differences are allowed to be negative.
+% \changes{v1.0}{2016/12/03}{Put Allow Subtraction in Options menu}
+% \changes{v1.0f}{2017/01/16}{Incorporated \string\cs{olBdry} into code, using eforms dated 2017/01/15}
+% \begin{macrocode}
+\DeclareOptionX{allownegsub}{\def\fcAllowNegSub{true}}
+\def\fcAllowNegSub{false}
+% \end{macrocode}
+% \begin{macro}{nomenu}
+% The menu allows to user to change the range of the numbers, using this
+% option removes the menu.
+% \begin{macrocode}
+\DeclareOptionX{nomenu}{\let\fc@usemenu\fc@NO}
+\let\fc@usemenu\fc@YES
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{operations}
+% Give the ability to declare what operations FC should show. Supported operations
+% are add, sub, mul, div. The default is all operations.
+% \begin{macrocode}
+\DeclareOptionX{operations}[add,sub,mul,div]{\def\fc@operations{#1}}
+\def\fc@operations{add,sub,mul,div}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{showkeypadlink}
+% If the \texttt{nomenu} option is taken, you can select the \texttt{showkepadlink} so the
+% user can toggle the keypad.
+% \begin{macrocode}
+\DeclareOptionX{showkeypadlink}{\let\fc@keypadlink\fc@YES}
+\let\fc@keypadlink\fc@NO
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{notimedscores}
+% Do not tally timed scores. Some may not want the pressure!
+% \begin{macrocode}
+\DeclareOptionX{notimedscores}{%
+ \def\fcTimedScores{false}
+ \let\fc@timedscores\fc@NO
+}
+\def\fcTimedScores{true}
+\let\fc@timedscores\fc@YES
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\ProcessOptionsX
+\RequirePackage{eforms}[2017/01/15]
+\RequirePackage{popupmenu}
+% \end{macrocode}
+%\section{Main Code}
+% \begin{macrocode}
+\newdimen\fcWidth
+% \end{macrocode}
+% The keys for the \texttt{fcopera} family are defined here. These are used
+% with the \texttt{operations} option. These define the \texttt{add},
+% \texttt{sub}, \texttt{mul}, and \texttt{div} operations.
+% \begin{macrocode}
+\define@boolkey{fcopera}{add}[true]{}
+\define@boolkey{fcopera}{sub}[true]{}
+\define@boolkey{fcopera}{mul}[true]{}
+\define@boolkey{fcopera}{div}[true]{}
+% \end{macrocode}
+% We take the macro \cs{fc@operations} defined by the \texttt{operations} option, set
+% the corresponding keys for the \texttt{fcopera} family.
+% \begin{macrocode}
+\edef\fc@expand{\noexpand\setkeys{fcopera}{\fc@operations}}\fc@expand
+% \end{macrocode}
+% \begin{macro}{\DeclareArithParams}
+% The builder of this arithmetic flash cards can hard-wire the ranges. Here is an
+% example of usage:
+%\begin{verbatim}
+%\DeclareArithParams
+%{%
+% addT={[2,20]},addB={[5,30]},
+% addDecT=none,addDecB=2,
+% subT={[1,5]},subB={[5,10]},
+% subDecT=1,subDecB=2,
+% mulT={[1,12]},mulB={[1,10]},
+% mulDecT=1,mulDecB=2,
+% divQ={[1,4]},divB={[1,10]},
+% divDecQ=1,divDecB=2
+%}
+%\end{verbatim}
+% Below are defined the keys used by \cs{DeclareArithParams}.
+% \begin{macrocode}
+\define@key{fcarithparams}{addT}[{[0,100]}]{\def\fcAddTParams{#1}}
+\define@key{fcarithparams}{addB}[{[0,100]}]{\def\fcAddBParams{#1}}
+\define@choicekey{fcarithparams}{addDecT}[\val\nr]{none,1,2}[none]{%
+ \edef\fcaddDecT{\nr}}{}
+\define@choicekey{fcarithparams}{addDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcaddDecB{\nr}}{}
+\define@key{fcarithparams}{subT}[{[0,100]}]{\def\fcSubTParams{#1}}
+\define@key{fcarithparams}{subB}[{[0,100]}]{\def\fcSubBParams{#1}}
+\define@choicekey{fcarithparams}{subDecT}[\val\nr]{none,1,2}[none]{%
+ \edef\fcsubDecT{\nr}}{}
+\define@choicekey{fcarithparams}{subDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcsubDecB{\nr}}{}
+\define@key{fcarithparams}{mulT}[{[0,100]}]{\def\fcMulTParams{#1}}
+\define@key{fcarithparams}{mulB}[{[0,10]}]{\def\fcMulBParams{#1}}
+\define@choicekey{fcarithparams}{mulDecT}[\val\nr]{none,1,2}[none]{%
+ \edef\fcmulDecT{\nr}}{}
+\define@choicekey{fcarithparams}{mulDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcmulDecB{\nr}}{}
+\define@key{fcarithparams}{divQ}[{[0,10]}]{\def\fcDivQParams{#1}}
+\define@key{fcarithparams}{divB}[{[0,10]}]{\def\fcDivBParams{#1}}
+\define@choicekey{fcarithparams}{divDecQ}[\val\nr]{none,1,2}[none]{%
+ \edef\fcdivDecQ{\nr}}{}
+\define@choicekey{fcarithparams}{divDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcdivDecB{\nr}}{}
+% \end{macrocode}
+% We set the defaults for these keys.
+% \begin{macrocode}
+\setkeys{fcarithparams}{addT,addB,subT,subB,mulT,mulB,divQ,divB,%
+ addDecT,addDecB,subDecT,subDecB,mulDecT,mulDecB,divDecQ,divDecB}
+\newcommand{\DeclareArithParams}[1]{\setkeys{fcarithparams}{#1}}
+\@onlypreamble\DeclareArithParams
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\timeUpMsg}
+% \begin{macro}{\rightMsg}
+% \begin{macro}{\wrongMsg}
+% \begin{macro}{\startAgainMsg}
+% \begin{macro}{\newCardMsg}
+% Strings that can be redefined; the meanings are obvious.
+% \begin{macrocode}
+\newcommand{\timeUpMsg}{Your Time is UP!}
+\newcommand{\rightMsg}{Right!}
+\newcommand{\wrongMsg}{Wrong!}
+\newcommand{\startAgainMsg}{Start Again}
+\newcommand{\newCardMsg}{New Card}
+\newcommand{\toggleKeypad}{Toggle Keypad}
+\newcommand{\operation}{Operation}
+\newcommand{\numCorrect}{Number Correct}
+\newcommand{\numAttempted}{Number Attempted}
+\newcommand{\percentCorrect}{Percentage Correct}
+\newcommand{\timedScores}{Timed Scores}
+\newcommand{\fmtAnswer}{Answer:}
+\newcommand{\kpDec}{.}
+\newcommand{\kpMinus}{-}
+\newcommand{\kpBack}{Back}
+\newcommand{\kpEnter}{Enter}
+\newcommand{\fcNoTiming}{No Timing}
+\newcommand{\fcAddition}{Addition}
+\newcommand{\fcSubtraction}{Subtraction}
+\newcommand{\fcMultiplication}{Multiplication}
+\newcommand{\fcDivision}{Division}
+\newcommand{\fcSettings}{Settings}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\FCMenu}
+% This is the menu system, it is normally placed in the running header
+% on the left, though this can be changed.
+% \begin{macrocode}
+\newcommand{\fcSettingsColor}{0 0 0}
+\newcommand{\fcSettingsTooltip}{Click for a dropdown menu
+ of menu choices}
+\newcommand{\FCMenu}{\smash{\hbox{\pushButton[\textSize{8}\H{O}
+ \textColor{\fcSettingsColor}
+ \CA{\fcSettings\space}\S{S}\BC{}\BG{}\TU{\fcSettingsTooltip}
+ \A{\JS{processFcMenu();}}]{fcSettingsBtn}{}{11bp}\kern0pt}}}
+%\newcommand{\FCMenu}{\mbox{\setLinkText[\linktxtcolor{\fcSettingsColor}
+% \A{\JS{processFcMenu();}}]{\fcSettings}}}
+ \ifx\fc@usemenu\fc@YES\lheader{\FCMenu}\rheader{}\else
+\lheader{}\rheader{}\fi
+% \end{macrocode}
+% \begin{environment}{MenuFC}
+% We set up a \texttt{fcMenu} environment for specifying menu items. This is to be sure
+% the name of the popup menu is correct, we expect a name of `fcMenu'
+% as the argument of \texttt{popupmenu} environment.
+% \changes{v0.99}{2016/12/02}{Added new environment}
+% \begin{macrocode}
+\newenvironment{MenuFC}{\begin{popupmenu}{fcMenu}}
+{\end{popupmenu}}
+\def\fcMenu{// No menu items selected in the MenuFC environment}
+% \end{macrocode}
+% \end{environment}
+% We set up some standard menu items, these are referred by their command names:
+%\begin{verbatim}
+% \begin{fcMenu}
+% \fcOptionsMenuItem
+% \fcToggleKeypadMenuItem
+% \fcMouseKPMenuItem
+% \fcTouchKPMenuItem
+% \fcAboutFC
+% \end{fcMenu}
+%\end{verbatim}
+%The five commands listed above and defined below should not be redefined; however their
+%title fields are accessible through the commands ending in `\texttt{Title}' below.
+%\changes{v0.99}{2016/12/02}{Add commands to customize the menu}
+% \begin{macrocode}
+\def\fcOptionsMenuItem{\item{title=\fcOptionsMenuItemTitle,return=0}}
+% \end{macrocode}
+% \DescribeMacro{\fcOptionsMenuItemTitle} is the title for the `Options' menu item
+% \begin{macrocode}
+\newcommand\fcOptionsMenuItemTitle{Options}
+\def\fcToggleKeypadMenuItem{\item{title=\fcToggleKeypadMenuItemTitle,%
+ marked=false,return=1}}
+% \end{macrocode}
+% \DescribeMacro{\fcToggleKeypadMenuItemTitle} is the title for the `Keypad' menu item
+% \begin{macrocode}
+\newcommand\fcToggleKeypadMenuItemTitle{Toggle Keypad}
+\def\fcTouchKPMenuItem{\item{title=\fcTouchKPMenuItemTitle,%
+ marked=false,enabled=false,return=3}}
+% \end{macrocode}
+% \DescribeMacro{\fcTouchKPMenuItemTitle} is the title for the `Touch keypad' menu item
+% \begin{macrocode}
+\newcommand\fcTouchKPMenuItemTitle{Touch Friendly Keypad}
+\def\fcMouseKPMenuItem{\item{title=\fcMouseKPMenuItemTitle,%
+ marked=true,enabled=false,return=4}}
+% \end{macrocode}
+% \DescribeMacro{\fcMouseKPMenuItemTitle} is the title for the `Mouse keypad' menu item
+% \begin{macrocode}
+\newcommand\fcMouseKPMenuItemTitle{Mouse Friendly Keypad}
+\def\fcAboutFC{\item{title=\fcAboutFCTitle, return=2}}
+% \end{macrocode}
+% \DescribeMacro{\fcAboutFCTitle} is the title for the `About' menu item
+% \begin{macrocode}
+\newcommand\fcAboutFCTitle{About PDF Flash Cards}
+% \end{macrocode}
+% \end{macro}
+% \subsection{The form fields}
+% \begin{macro}{\tBGNoBorder}
+% \begin{macro}{\tBGNoBorderI}
+% \begin{macro}{\cBGNoBorder}
+% \begin{macro}{\cBGBorder}
+% \begin{macro}{\myNumPad}
+% Some preset formatting for the various fields. May be redefined.
+% \begin{macrocode}
+\newcommand{\tBGNoBorder}{\BC{}\BG{}\autoCenter{n}\textSize{0}
+ \textColor{1 0 0}\Ff\FfReadOnly}
+\newcommand{\tBGNoBorderI}{\BC{}\BG{}\autoCenter{n}\textSize{0}
+ \textColor{0 0 0}}
+\newcommand{\cBGNoBorder}{\Q{1}\BC{}\BG{}\autoCenter{n}\textSize{0}
+ \textColor{0 0 0}\BG{.75 .75 .75}\Ff\FfReadOnly}
+\newcommand{\cBGBorder}{\BC{0 0 0}\BG{.75 .75 .75}\autoCenter{n}
+ \textSize{0}\textColor{0 0 0}}
+\newcommand{\myNumPadI}{\F\FHidden\autoCenter{n}\textSize{8}
+ \textFont{\fieldFont}\S{S}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\setDimOf}
+% \begin{macro}{\monoSpaceFont}
+% \begin{macro}{\fieldFont}
+% The following are some customization commands, used for setting field properties that
+% are not included in the presets.
+% \begin{macrocode}
+\newcommand{\setDimOf}[3]{\@namedef{widthOf#1}{#2}%
+ \@namedef{heightOf#1}{#3}}
+\newcommand{\monoSpaceFont}{CoBo}
+\newcommand{\fieldFont}{Helv}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\arithProb}
+% \cs{arithProb} consists of three fields: \texttt{top}, \texttt{operation}, and \texttt{bottom},
+% these three fields are bundled together as a single unit. We use \textbf{courier-bold} for the \texttt{top} and \texttt{bottom}
+% so we can align the decimal points, if there are any.
+% \begin{macrocode}
+\setDimOf{top}{1in}{0.62in}
+\setDimOf{operation}{.38in}{.62in}
+\setDimOf{bottom}{1in}{0.62in}
+\newcommand{\arithProb}{\mbox{\vbox{\offinterlineskip
+ \hbox{\hspace*{\@nameuse{widthOfoperation}}%
+ \textField[\presets{\tBGNoBorder}
+ \textFont{\monoSpaceFont}\Q{2}]{top}%
+ {\@nameuse{widthOf\Fld@name}}{\@nameuse{heightOf\Fld@name}}%
+ }%
+ \hbox{%
+ \textField[\presets{\tBGNoBorder}
+ \textSize{25}\Q{1}]{operation}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}%
+ \textField[\presets{\tBGNoBorder}
+ \textFont{\monoSpaceFont}\Q{2}]{bottom}%
+ {\@nameuse{widthOf\Fld@name}}{\@nameuse{heightOf\Fld@name}}%
+ }}}%
+}
+% \end{macrocode}
+% \end{macro}
+% More components of these flash cards and can be placed anywhere.
+% \begin{macro}{\alertbox}
+% displays the ``Right/Wrong'' message;
+% \begin{macro}{\startAgain}
+% is a button for starting all over again, it takes an icon;
+% \begin{macro}{\inputRegion}
+% is where the user inputs his/her answer;
+% \begin{macro}{\newCard}
+% is a push button for randomly geneating a new problem. These different elements
+% \begin{macrocode}
+\setDimOf{alertbox}{.88in}{.62in}
+\setDimOf{StartAgain}{0.88in}{0.62in}
+\setDimOf{result}{1.38in}{0.62in}
+\setDimOf{NewProblem}{0.88in}{0.62in}
+\newcommand{\alertbox}[1][]{\hbox{\textField[\presets{\tBGNoBorder}
+ \textSize{0}#1]{alertbox}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+\@ifundefined{if@useacrobat}{\let\placeImageOpts\@empty}
+{\def\placeImageOpts{\FB{false}\I{null}\TP{2}}}
+\newcommand{\startAgain}[1][]{\hbox{%
+ \expandafter\pushButton\expandafter[\placeImageOpts
+ \presets{\tBGNoBorderI}\textFont{\fieldFont}\S{S}
+ \textSize{12}\CA{\startAgainMsg}\AC{\startAgainMsg}#1
+ \A{\JS{startAgain();}}]{StartAgain}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+\newcommand{\inputRegion}[1][]{\hbox{\textField[\presets{\cBGNoBorder}
+ \Ff{-\FfReadOnly}\Q{2}#1\AA{\AAValidate{validateResult();}
+ \AAKeystroke{fcNumber_Keystroke(numDecimals,1,0,0,"",true);}
+ \AAFormat{try{%
+ fcNumber_Format(numDecimals,1,0,0,"",true);}catch(e){}}}
+ ]{result}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+\newcommand{\newCard}[1][]{\hbox{%
+ \expandafter\pushButton\expandafter[\placeImageOpts
+ \textSize{12}\presets{\tBGNoBorderI}\textFont{\fieldFont}\S{S}
+ \CA{\newCardMsg}\AC{\newCardMsg}#1\A{\JS{newCard();}}
+ ]{NewProblem}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\cbTiming}
+% \begin{macro}{\ansField}
+% \begin{macro}{\cbOperation}
+% \cs{cbTiming} is a dropdown menu for timing; \cs{ansField} is a text field where
+% the correct answers are written; \cs{cbOperation} is a dropdown menu of operations.
+% \changes{v0.99}{2016/12/02}{Corrected problem with \string\cs{cbOperation} due to
+% changes in \string\textsf{eforms}.}
+% \begin{macrocode}
+% {\@nameuse{widthOf\Fld@name}}{\@nameuse{heightOf\Fld@name}}
+\setDimOf{TimeDelay}{0.9in}{0.24in}
+\setDimOf{ansregion}{.87in+10bp}{.24in}
+\setDimOf{ChooseOperation}{1.38in-10bp}{0.24in}
+\edef\isReadOnlyTiming{\ifx\fc@timedscores\fc@NO
+ \noexpand\Ff{\FfReadOnly}\fi}
+\newcommand{\cbTimingToolip}{Select a time challenge
+ from the dropdown menu}
+\newcommand{\cbTiming}[1][]{\hbox{%
+ \expandafter\comboBox\expandafter[\isReadOnlyTiming
+ \presets{\cBGBorder}\textFont{\fieldFont}\V{600000}\DV{600000}#1
+ \TU{\cbTimingToolip}\AA{\AAKeystroke{%
+ if (!event.willCommit) timelimit=event.changeEx;}}
+ ]{TimeDelay}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}{%
+ [(600000)(\fcNoTiming)][(30)(30 sec)][(25)(25 sec)][(20)(20 sec)]%
+ [(15)(15 sec)][(10)(10 sec)][(5)(\space\space 5 sec)]}}%
+}
+\newcommand{\ansField}[1][]{\hbox{\textField[\presets{\cBGNoBorder}\Q{2}
+ #1\AA{\AAFormat{%
+ if (event.value!="") {\r
+ try{fcNumber_Format(numDecimals,1,0,0,"",true);\r
+ event.value=("\fmtAnswer\space")+event.value;}catch(e){};}}}
+ ]{ansregion}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}%
+}
+% \end{macrocode}
+% \DescribeMacro{\cbOpDefault} is used to set the default operation
+% correct values are \texttt{a}, \texttt{s}, \texttt{m}, \texttt{d}
+% \begin{macrocode}
+\let\fc@addAbbr=a\let\fc@subAbbr=s
+\let\fc@mulAbbr=m\let\fc@divAbbr=d
+\newcommand{\cbOpDefault}[1]{\def\cbOpDef@ult{#1}%
+ \if\cbOpDef@ult\fc@addAbbr\else\if\cbOpDef@ult\fc@subAbbr\else
+ \if\cbOpDef@ult\fc@mulAbbr\else\if\cbOpDef@ult\fc@divAbbr\else
+ \ifKV@fcopera@add\def\cbOpDef@ult{a}\else
+ \ifKV@fcopera@sub\def\cbOpDef@ult{s}\else
+ \ifKV@fcopera@mul\def\cbOpDef@ult{m}\else
+ \ifKV@fcopera@div\def\cbOpDef@ult{d}\else
+ \PackageError{fc_arith}{There are no selected arithmetic
+ operations}{}\fi\fi\fi\fi
+ \PackageWarning{fc_arith}{Value of \string\cbOpDefault\space
+ not recognized,\MessageBreak will use `\cbOpDef@ult'}%
+ \fi\fi\fi\fi
+}
+\cbOpDefault{a}
+\newcommand{\cbOperationTooltip}{Choose an arithmetic operation
+ to practice}
+\newcommand{\cbOperation}[1][]{%
+ \edef\cbvOptChoices{\ifKV@fcopera@add[(a)(\fcAddition)]\fi
+ \ifKV@fcopera@sub[(s)(\fcSubtraction)]\fi
+ \ifKV@fcopera@mul[(m)(\fcMultiplication)]\fi
+ \ifKV@fcopera@div[(d)(\fcDivision)]\fi}%
+ \hbox{\comboBox[\presets{\cBGBorder}\textFont{\fieldFont}
+ \TU{\cbOperationTooltip}
+ \V{\cbOpDef@ult}\DV{\cbOpDef@ult}#1]{ChooseOperation}%
+ {\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}{\cbvOptChoices}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \cs{szNum} is the width and height of a keypad button.
+% \begin{macrocode}
+\newcommand{\szNum}{14bp}
+% \end{macrocode}
+% \begin{macro}{\Keypad}
+% A keypad for the user to enter responses using the mouse only. Cool!
+% \begin{macrocode}
+\newcommand\toggleKeyPadBtnColor{0 0 1}
+\newcommand\toggleKeyPadBtnTooltip{Click to toggle keypad, shift-click
+ to toggle between mouse and touch keypads}
+\def\toggleKeyPadBtn{\pushButton[\textSize{6}\CA{\toggleKeypad}\H{O}
+ \TU{\toggleKeyPadBtnTooltip}\textColor{\toggleKeyPadBtnColor}
+ \S{S}\BC{}\BG{}\A{\JS{%
+ if (event.shift)\r\t
+ if (bTouchFriendly)\r\t\t
+ makeMouseFriendly();\r\t
+ else\r\t\t
+ makeTouchFriendly();\r\t
+ else\r\t
+ ToggleKeyPad();\r
+}}]{toggleKeyPadBtn}{}{8bp}}%
+\newcommand{\Keypad}{%
+ \vbox{\offinterlineskip\ifx\fc@keypadlink\fc@YES
+ \setlength{\fcWidth}{4bp+\szNum*4}%
+ \hbox to\fcWidth{\hfill\toggleKeyPadBtn\hfill}\vskip2bp\fi
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{7}
+ \A{\JS{addDigit(7)}}]{num7}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{8}
+ \A{\JS{addDigit(8)}}]{num8}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{9}
+ \A{\JS{addDigit(9)}}]{num9}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{4}
+ \A{\JS{addDigit(4)}}]{num4}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{5}
+ \A{\JS{addDigit(5)}}]{num5}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{6}
+ \A{\JS{addDigit(6)}}]{num6}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{1}
+ \A{\JS{addDigit(1)}}]{num1}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{2}
+ \A{\JS{addDigit(2)}}]{num2}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{3}
+ \A{\JS{addDigit(3)}}]{num3}{\szNum}{\szNum}}\olBdry
+ \hbox{\edef\w@dj{\ifmakeXasPD1bp\else\ifxetex-1bp\else-1bp\fi\fi}%
+ \pushButton[\presets{\myNumPadI}\CA{0}
+ \A{\JS{addDigit(0)}}]{num0}{\w@dj+\szNum*2}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{\kpDec}
+ \A{\JS{addDigit("Dec")}}]{Dec}{\szNum}{\szNum}\olBdry
+ \smash{\vbox{\edef\w@dj{\ifmakeXasPD1bp\else\ifxetex-1bp\else-1bp\fi\fi}%
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpMinus}
+ \A{\JS{addDigit("Minus")}}
+ ]{Minus}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpBack}
+ \textSize{0}\A{\JS{addDigit("Back")}}
+ ]{Back}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpEnter}
+ \textSize{0}\A{\JS{addDigit("Enter")}}
+ ]{Enter}{\szNum}{\w@dj+\szNum*2}}%
+ }}}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \cs{fcSep} is a standard separation between elements.
+% \begin{macrocode}
+\def\fcSep{\quad}
+% \end{macrocode}
+% \begin{macro}{\statsFields}
+% A collection of fields that summarize the attempts at responding to the arithmetic
+% problem.
+% \begin{macrocode}
+\setDimOf{fcSF}{0.37in}{0.25in}
+\newcommand{\statsFieldOpColor}{1 0 0}
+\newcommand{\statsFieldColor}{blue}
+\newcommand{\timeScoresTooltip}{Click to see how points are assigned}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\statsFields}{%
+% \end{macrocode}
+% The Addition column
+% \begin{macrocode}
+\ifKV@fcopera@add
+ \vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}\V{+}\DV{+}\Q{1}
+ ]{AddScore1}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore2}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore3}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore4}{\widthOffcSF}{\heightOffcSF}}%
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore5}{\widthOffcSF}{\heightOffcSF}}%
+\fi
+ }\fcSep
+\fi
+% \end{macrocode}
+% The Subtraction column
+% \begin{macrocode}
+\ifKV@fcopera@sub
+\vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}\V{-}\DV{-}\Q{1}
+ ]{SubScore1}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore2}%
+ {\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore3}%
+ {\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore4}{\widthOffcSF}%
+ {\heightOffcSF}}
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore5}{\widthOffcSF}%
+ {\heightOffcSF}}
+\fi
+ }\fcSep
+\fi
+% \end{macrocode}
+% The Multiplication column
+% \begin{macrocode}
+\ifKV@fcopera@mul
+\vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}\V{x}\DV{x}\Q{1}
+ ]{MulScore1}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore2}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore3}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore4}{\widthOffcSF}%
+ {\heightOffcSF}}
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore5}{\widthOffcSF}%
+ {\heightOffcSF}}
+\fi
+ }\fcSep
+\fi
+% \end{macrocode}
+% The Division column
+% \begin{macrocode}
+\ifKV@fcopera@div
+\vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}
+ \uV{FEFF00F7}\uDV{FEFF00F7}\Q{1}
+ ]{DivScore1}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore2}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore3}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore4}{\widthOffcSF}%
+ {\heightOffcSF}}
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore5}{\widthOffcSF}%
+ {\heightOffcSF}}
+\fi
+ }\fcSep
+\fi
+% \end{macrocode}
+% Description column
+% \begin{macrocode}
+\vbox{\offinterlineskip
+ \hbox{\parbox[b][.25in][c]{.75in}{%
+ \textcolor{blue}{\operation}\hfill}}
+ \hbox{\parbox[b][.25in][c]{1.25in}{%
+ \textcolor{blue}{\numCorrect}\hfill}}
+ \hbox{\parbox[b][.25in][c]{1.25in}{%
+ \textcolor{blue}{\numAttempted}\hfill}}
+ \hbox{\parbox[b][.25in][c]{1.25in}{%
+ \textcolor{blue}{\percentCorrect}\hfill}}
+\ifx\fc@timedscores\fc@YES
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}
+ ]{ScoreTotal}{.51in}{.25in}\kern1bp
+ \makebox[0pt][l]{\pushButton[\presets{\tBGNoBorder}
+ \Ff{-\FfReadOnly}\S{S}\H{I}\textSize{10}
+ \TU{\timeScoresTooltip}
+ \A{\JS{docTimeScores();}}]{Descrip5}{1in}{.25in}}%
+ \parbox[b][.25in][c]{1in}{%
+ \centering\textcolor{blue}{\timedScores}}}%
+\fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%\section{JavaScript Code}
+% \begin{macrocode}
+\edef\bFCa{/\ifKV@fcopera@add/\else*\fi}
+\edef\eFCa{\ifKV@fcopera@add/\else*\fi/}
+\edef\bFCs{/\ifKV@fcopera@sub/\else*\fi}
+\edef\eFCs{\ifKV@fcopera@sub/\else*\fi/}
+\edef\bFCm{/\ifKV@fcopera@mul/\else*\fi}
+\edef\eFCm{\ifKV@fcopera@mul/\else*\fi/}
+\edef\bFCd{/\ifKV@fcopera@div/\else*\fi}
+\edef\eFCd{\ifKV@fcopera@div/\else*\fi/}
+% \end{macrocode}
+% Language localizations for \cs{fcTimedScoresDialog}
+% \begin{macrocode}
+\def\fctCharWidth{22}
+\def\fctInstr{"Points are awarded, based on time,
+ for successfully solving a problem:"}
+\def\fctTimeElapsed{"Time elapsed"}
+\def\fctPoints{"Points"}
+\def\fctLessThanV{"Less than 5 sec"}
+\def\fctLessThanVPoints{6}
+\def\fctBtwnVAndX{"Between 5 and 10 sec"}
+\def\fctBtwnVAndXPoints{5}
+\def\fctBtwnXAndXV{"Between 10 and 15 sec"}
+\def\fctBtwnXAndXVPoints{4}
+\def\fctBtwnXVAndXX{"Between 15 and 20 sec"}
+\def\fctBtwnXVAndXXPoints{3}
+\def\fctBtwnXXAndXXV{"Between 20 and 25 sec"}
+\def\fctBtwnXXAndXXVPoints{2}
+\def\fctGtrXXV{"Greater than 25 sec"}
+\def\fctGtrXXVPoints{1}
+% \end{macrocode}
+% \DescribeMacro{\amtChngMoToTou} is the amount of increase on dimensions of the transition
+% from the mouse keypad to the touch keypad.
+% \begin{macrocode}
+\newcommand\amtChngMouToTou{5}
+% \end{macrocode}
+% Language localizations for \texttt{fcDialog}.
+% \begin{macrocode}
+\newcommand\fcOptTextWidth{80}
+\newcommand\fcOptTopRange{Range Top}
+\newcommand\fcOptBottomRange{Range Bottom}
+\newcommand\fcOptTopRangeDiv{Range Quotient}
+\newcommand\fcOptBottomRangeDiv{Range Divisor}
+\newcommand\fcOptTo{ to }
+\newcommand\fcOptAllowNegNumber{Allow Negative Subtraction}
+\newcommand\fcOptDecimal{Decimals:}
+\newcommand\fcOptDecimalNone{none}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\fcMenuFCMsg{No menu items to display}
+% \end{macrocode}
+% Cluster names
+% \begin{macrocode}
+\newcommand\fcAdditionName{\fcAddition}
+\newcommand\fcSubtractionName{\fcSubtraction}
+\newcommand\fcMultiplicationName{\fcMultiplication}
+\newcommand\fcDivisionName{\fcDivision}
+% \end{macrocode}
+% Now for the \textbf{Document JavaScript} for this document
+% \begin{macrocode}
+\begin{insDLJS*}{fcjs}
+\begin{newsegment}{data}
+var _loadfcjs=true;
+var t, b, o, r, c, oAlert;
+function getFieldObjects()
+{
+ t=this.getField("top");
+ b=this.getField("bottom");
+ o=this.getField("operation");
+ r=this.getField("result");
+ c=this.getField("ChooseOperation");
+ oAlert=this.getField("alertbox");
+ useKeyPad = (this.getField("Enter").display==display.visible);
+}
+var turnoff=false;
+var bUpdateField=true;
+var timedScores=\fcTimedScores;
+var fcAllowNegSub=\fcAllowNegSub;
+var useKeyPad = false;
+var decimalPressed = false;
+var keypadInput=false;
+var operand='a';
+var NumAddCorr=0;
+var NumAddTried=0;
+var NumSubCorr=0;
+var NumSubTried=0;
+var NumMulCorr=0;
+var NumMulTried=0;
+var NumDivCorr=0;
+var NumDivTried=0;
+timelimit=600000;
+var mybegin;
+getFieldObjects();
+var numDecimals=0;
+var addDecT = \fcaddDecT, addDecB = \fcaddDecB;
+var addT_a = Number(\fcAddTParams[0]);
+var addT_b = Number(\fcAddTParams[1]);
+var addB_a = Number(\fcAddBParams[0]);
+var addB_b = Number(\fcAddBParams[1]);
+var subDecT = \fcsubDecT, subDecB = \fcsubDecB;
+var subT_a = Number(\fcSubTParams[0]);
+var subT_b = Number(\fcSubTParams[1]);
+var subB_a = Number(\fcSubBParams[0]);
+var subB_b = Number(\fcSubBParams[1]);
+var mulDecT = \fcmulDecT, mulDecB = \fcmulDecB;
+var mulT_a = Number(\fcMulTParams[0]);
+var mulT_b = Number(\fcMulTParams[1]);
+var mulB_a = Number(\fcMulBParams[0]);
+var mulB_b = Number(\fcMulBParams[1]);
+% \end{macrocode}
+% Here, Q corresponds to the quotient, and B corresponds to the divisor
+% \begin{macrocode}
+var divDecQ = \fcdivDecQ, divDecB = \fcdivDecB;
+var divQ_a = Number(\fcDivQParams[0]);
+var divQ_b = Number(\fcDivQParams[1]);
+var divB_a = Number(\fcDivBParams[0]);
+var divB_b = Number(\fcDivBParams[1]);
+\end{newsegment}
+\begin{newsegment}{updatescore}
+function updatescore(f,t) {
+ // console.println(t);
+ var points=0;
+ if(t<=5) points=6;
+ if((t>5)&&(t<=10)) points=5;
+ if((t>10)&&(t<=15)) points=4;
+ if((t>15)&&(t<=20)) points=3;
+ if((t>20)&&(t<=25)) points=2;
+ if(t>25) points=1;
+ var oField=this.getField(f);
+ if ( oField != null ) {
+ oField.value+=points;
+ this.getField("ScoreTotal").value+=points;
+ }
+}
+function docTimeScores() {
+ app.execDialog(fcTimedScoresDialog);
+}
+var fcTimedScoresDialog =
+{
+ // set a default value for radio button field
+ initialize: function(dialog) {
+ },
+ // when user presses "Ok", this handler will execute first
+ commit: function(dialog) {
+ },
+ // The Dialog Description
+ description:
+ {
+ name: "PDF Flash Cards - Timed Scores",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "instr",
+ name: \fctInstr
+ }
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "hr01",
+ char_width: \fctCharWidth,
+ font: "dialog",
+ bold: true,
+ name: \fctTimeElapsed
+ },
+ {
+ type: "static_text",
+ item_id: "hr02",
+ font: "dialog",
+ bold: true,
+ name: \fctPoints
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st11",
+ char_width: \fctCharWidth,
+ name: \fctLessThanV
+ },
+ {
+ type: "static_text",
+ item_id: "st12",
+ name: " \fctLessThanVPoints"
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st21",
+ char_width: \fctCharWidth,
+ name: \fctBtwnVAndX
+ },
+ {
+ type: "static_text",
+ item_id: "st22",
+ name: " \fctBtwnVAndXPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st31",
+ char_width: \fctCharWidth,
+ name: \fctBtwnXAndXV
+ },
+ {
+ type: "static_text",
+ item_id: "st32",
+ name: " \fctBtwnXAndXVPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st41",
+ char_width: \fctCharWidth,
+ name: \fctBtwnXVAndXX
+ },
+ {
+ type: "static_text",
+ item_id: "st42",
+ name: " \fctBtwnXVAndXXPoints"
+ },
+ ]
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st51",
+ char_width: \fctCharWidth,
+ name: \fctBtwnXXAndXXV
+ },
+ {
+ type: "static_text",
+ item_id: "st52",
+ name: " \fctBtwnXXAndXXVPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st61",
+ char_width: \fctCharWidth,
+ name: \fctGtrXXV
+ },
+ {
+ type: "static_text",
+ item_id: "st62",
+ name: " \fctGtrXXVPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ alignment: "align_right",
+ type: "ok",
+ }
+ ]
+ }
+ ]
+ }
+}
+function validateResult()
+{
+ var oField, MsgFlag, calculation;
+ if (!turnoff && !keypadInput) {
+ MsgFlag=false;
+ this.delay=true;
+ var mynow=new Date();
+ var elapsedtime = (Date.parse(mynow)-Date.parse(mybegin))/1000;
+ var timeelapsed = (elapsedtime>timelimit);
+ switch (operand) {
+ case 'a':
+ oField = this.getField("AddScore2");
+ bUpdateField = ( oField != null );
+ calculation=util.printf("\%."+numDecimals+"f",%
+(t.value+b.value));
+% calculation=t.value+b.value;
+% calculation=Number(t.value)+Number(b.value);
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumAddCorr;
+ } else {
+% if(Number(event.value)==calculation) {
+ if((1*event.value)==calculation) {
+ MsgFlag=true;
+ if ( bUpdateField ) {
+ oField.value=++NumAddCorr;
+ updatescore("AddScore5",elapsedtime);
+ }
+ }
+ else
+ if ( bUpdateField ) oField.value=NumAddCorr;
+ }
+ oField = this.getField("AddScore3");
+ if (oField != null ) oField.value=++NumAddTried;
+ oField = this.getField("AddScore4");
+ if (oField != null ) oField.value = util.printf("\%.0f",%
+(NumAddCorr/NumAddTried)*100);
+ break;
+ case 's':
+ oField=this.getField("SubScore2");
+ bUpdateField = ( oField != null );
+ calculation=util.printf("\%."+numDecimals+"f",
+ (t.value-b.value));
+% calculation=t.value-b.value;
+% calculation=Number(t.value)-Number(b.value);
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumSubCorr;
+ } else {
+% if(Number(event.value)==calculation) {
+ if((1*event.value)==calculation) {
+ MsgFlag=true;
+ if ( bUpdateField ) {
+ oField.value=++NumSubCorr;
+ updatescore("SubScore5",elapsedtime);
+ }
+ } else
+ if ( bUpdateField ) oField.value=NumSubCorr;
+ }
+ oField=this.getField("SubScore3");
+ if (oField != null) oField.value=++NumSubTried;
+ oField=this.getField("SubScore4");
+ if (oField != null) oField.value=util.printf("\%.0f",%
+(NumSubCorr/NumSubTried)*100);
+ break;
+ case 'm':
+ oField=this.getField("MulScore2");
+ bUpdateField = ( oField != null );
+ calculation=util.printf("\%."+numDecimals+"f",%
+(t.value*b.value));
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumMulCorr;
+ } else {
+ if((1*event.value)==calculation) {
+% if(Number(event.value)==Number(calculation)) {
+ MsgFlag=true;
+ if (bUpdateField) {
+ oField.value=++NumMulCorr;
+ updatescore("MulScore5",elapsedtime);
+ }
+ } else
+ if (bUpdateField) oField.value=NumMulCorr;
+ }
+ oField=this.getField("MulScore3");
+ if (oField != null) oField.value=++NumMulTried;
+ oField=this.getField("MulScore4");
+ if (oField != null) oField.value=util.printf("\%.0f",%
+(NumMulCorr/NumMulTried)*100);
+ break;
+ case 'd':
+ oField=this.getField("DivScore2");
+ bUpdateField = ( oField != null );
+% calculation=t.value/b.value;
+ calculation=util.printf("\%."+numDecimals+"f",%
+t.value/b.value);
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumDivCorr;
+ } else {
+% if(Number(event.value)==Number(calculation)) {
+ if((1*event.value)==calculation) {
+ MsgFlag=true;
+ if (bUpdateField) {
+ oField.value=++NumDivCorr;
+ updatescore("DivScore5",elapsedtime);
+ }
+ } else
+ if ( bUpdateField ) oField.value=NumDivCorr;
+ }
+ oField = this.getField("DivScore3");
+ if (oField != null) oField.value=++NumDivTried;
+ oField = this.getField("DivScore4");
+ if (oField != null) oField.value=util.printf("\%.0f",%
+(NumDivCorr/NumDivTried)*100);
+ break;
+ }
+ if(!timeelapsed) {
+ if(MsgFlag) {
+ oAlert.textColor=color.blue;
+ oAlert.value="\rightMsg";
+ } else {
+ oAlert.textColor=color.red;
+ oAlert.value="\wrongMsg";
+ }
+ }
+ this.getField("ansregion").value=calculation;
+ this.getField("NewProblem").setFocus() ;
+ this.delay=false;
+ }
+}
+function startAgain() {
+ getFieldObjects();
+ turnoff=true;
+ this.resetForm();
+% \end{macrocode}
+% (2016/12/10) Added \texttt{timelimit} to list of variables to reset
+% \changes{v1.0e}{2016/12/10}{Added \string\texttt{timelimit} to list of variables to reset}
+% \begin{macrocode}
+ timelimit=600000;
+ event.rc=false;
+ operand='+';
+ NumAddCorr=0;
+ NumAddTried=0;
+ NumSubCorr=0;
+ NumSubTried=0;
+ NumMulCorr=0;
+ NumMulTried=0;
+ NumDivCorr=0;
+ NumDivTried=0;
+}
+function newCard() {
+ turnoff=true;
+ this.resetForm(["result","top","bottom","ansregion","alertbox"]);
+ operand = c.value;
+ switch (operand)
+ {
+ case 'a':
+ {
+ o.value='+'; // addDecT
+ numDecimals = Math.max(addDecT,addDecB);
+ var topTemplate = "\%."+addDecT+"f";
+ var botTemplate = "\%."+addDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var m=util.printf(topTemplate,%
+(addT_b-addT_a)*Math.random()+addT_a);
+ var n=util.printf(botTemplate,%
+(addB_b-addB_a)*Math.random()+addB_a);
+ m=util.printf(matchTemplate,m);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ t.value=util.printf(commonTemplate,m);
+ b.value=util.printf(commonTemplate,n);
+ break;
+ }
+ case 's':
+ {
+ o.value="-";
+ numDecimals = Math.max(subDecT,subDecB);
+ var topTemplate = "\%."+subDecT+"f";
+ var botTemplate = "\%."+subDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var m=util.printf(topTemplate,%
+(subT_b-subT_a)*Math.random()+subT_a);
+ var n=util.printf(botTemplate,%
+(subB_b-subB_a)*Math.random()+subB_a);
+ m=util.printf(matchTemplate,m);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ var bSwitch=( (!fcAllowNegSub) && (n-m>0) );
+ t.value=util.printf(commonTemplate,(bSwitch)?n:m);
+ b.value=util.printf(commonTemplate,(bSwitch)?m:n);
+ break;
+ }
+ case 'm':
+ {
+ o.value='x';
+ numDecimals=Math.max(mulDecT,mulDecB);
+ var topTemplate = "\%."+mulDecT+"f";
+ var botTemplate = "\%."+mulDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var m=util.printf(topTemplate,%
+(mulT_b-mulT_a)*Math.random()+mulT_a);
+ var n=util.printf(botTemplate,%
+(mulB_b-mulB_a)*Math.random()+mulB_a);
+ m=util.printf(matchTemplate,m);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ t.value=util.printf(commonTemplate,m);
+ b.value=util.printf(commonTemplate,n);
+ numDecimals = mulDecT + mulDecB;
+ break;
+ }
+ case 'd':
+ {
+ o.value='\string\367'
+ numDecimals=divDecQ+divDecB;
+% numDecimals=Math.max(divDecQ,divDecB);
+ var topTemplate = "\%."+divDecQ+"f";
+ var botTemplate = "\%."+divDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var n,m;
+ var quotient=util.printf(topTemplate,%
+divQ_a + (divQ_b-divQ_a)*Math.random());
+ for(n=util.printf(botTemplate,%
+divB_a + (divB_b-divB_a)*Math.random());
+ n==0; n=util.printf("\%.0f",%
+divB_a + (divB_b-divB_a)*Math.random()));
+ m=util.printf(matchTemplate,quotient*n);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ t.value=util.printf(commonTemplate,m);
+ b.value=util.printf(commonTemplate,n);
+ numDecimals = divDecQ;
+ break;
+ }
+ }
+ // console.println("operation = " + o.value);
+ turnoff=false;
+ if (!useKeyPad) r.readonly=false;
+ mybegin=new Date();
+ try{ r.setFocus(); } catch(e) {}
+}
+function addDigit(n) {
+ if (oAlert.value != "") return;
+ switch (n) {
+ case "Enter":
+ var tmp_value=r.valueAsString;
+ this.resetForm(["result"]);
+ keypadInput=false;
+ r.value = tmp_value;
+ break;
+ case "Back":
+ keypadInput=true;
+ var tmp_value=r.valueAsString;
+ if (tmp_value != "")
+ r.value = tmp_value.substring(0,tmp_value.length-1);
+ break;
+ case "Dec":
+ keypadInput=true;
+ var v=r.valueAsString;
+ v = v + ".";
+ r.value = v;
+ break;
+ case "Minus":
+ keypadInput=true;
+ var v=r.valueAsString;
+ if (r.value < 0 ) {
+ v = String(Math.abs(v));
+ } else v = "-" + v;
+ r.value = v;
+ break;
+ default:
+ keypadInput=true;
+ v=r.valueAsString;
+ v = v + String(n);
+ r.value = v;
+ }
+}
+function ToggleKeyPad() {
+ useKeyPad = !useKeyPad;
+ if ( typeof fcMenu == "object") {
+ for (var i=0; i<fcMenu.length; i++) {
+ if (fcMenu[i].cReturn=="1") fcMenu[i].bMarked=useKeyPad;
+ if (fcMenu[i].cReturn=="3") fcMenu[i].bEnabled=useKeyPad;
+ if (fcMenu[i].cReturn=="4") fcMenu[i].bEnabled=useKeyPad;
+ }
+ }
+ this.delay=true;
+ if (useKeyPad) {
+ for (var i=0; i<= 9; i++)
+ this.getField("num"+i).display=display.visible;
+ this.getField("Back").display=display.visible;
+ this.getField("Enter").display=display.visible;
+ this.getField("Dec").display=display.visible;
+ this.getField("Minus").display=display.visible;
+ this.getField("result").readonly=true;
+ } else {
+ for (var i=0; i<= 9; i++)
+ this.getField("num"+i).display=display.hidden;
+ this.getField("Back").display=display.hidden;
+ this.getField("Enter").display=display.hidden;
+ this.getField("Dec").display=display.hidden;
+ this.getField("Minus").display=display.hidden;
+ this.getField("result").readonly=false;
+ }
+ this.delay=false;
+ getFieldObjects();
+
+}
+\end{newsegment}
+\begin{newsegment}{Custom Keystroke for Numbers}
+function fcNumber_Keystroke(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend) {
+ if (turnoff) return;
+ var v = t.valueAsString;
+ if ( v == "")
+ { event.rc=false; this.resetForm(["result"]); }
+ else
+ if ( event.value != "-" && event.value != ".")
+ AFNumber_Keystroke(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend);
+}
+function fcNumber_Format(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend) {
+ if ( !useKeyPad && event.value != "-" && event.value != ".")
+ AFNumber_Format(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend);
+}
+\end{newsegment}
+\begin{newsegment}{Touch or Mouse Friendly}
+var aKPFieldNames=new Array ("num0",
+ "num1","num4","num7","Dec","Enter",
+ "num2","num5","num8","num3","num6","num9",
+ "Back","Minus");
+var _tDlt=\amtChngMouToTou;
+var bTouchFriendly=false;
+function makeTouchFriendly() {
+ if (!useKeyPad||bTouchFriendly) return;
+ bTouchFriendly=true;
+ var indexTouch=-1, indexMouse;
+ if ( typeof fcMenu == "object") {
+ for ( var i=0; i<fcMenu.length; i++) {
+ if (fcMenu[i].cReturn=="3") indexTouch=i;
+ if (fcMenu[i].cReturn=="4") indexMouse=i;
+ }
+ if (indexTouch!=-1) {
+ fcMenu[indexTouch].bMarked=bTouchFriendly;
+ fcMenu[indexMouse].bMarked=!bTouchFriendly;
+ }
+ }
+ var r;
+ this.delay=true;
+ var TKP=this.getField("toggleKeyPadBtn");
+ var bMovTKP=(TKP!=null);
+ if (bMovTKP) {
+ var tkpRect=TKP.rect;
+ tkpRect=[tkpRect[0]+2*_tDlt,tkpRect[1]+%
+4*_tDlt,tkpRect[2]+2*_tDlt,tkpRect[3]+4*_tDlt];
+ TKP.rect=tkpRect;
+ }
+ for (var i=0; i<aKPFieldNames.length; i++) {
+ f=this.getField(aKPFieldNames[i]);
+ r=f.rect;
+ switch(i) {
+ case 0:
+ r=[r[0],r[1]+_tDlt,r[2]+2*_tDlt,r[3]];
+ break;
+ case 1: // num1 left edge
+ r=[r[0],r[1]+2*_tDlt,r[2]+_tDlt,r[3]+_tDlt];
+ break;
+ case 2: // num4 left edge
+ r=[r[0],r[1]+3*_tDlt,r[2]+_tDlt,r[3]+2*_tDlt];
+ break;
+ case 3: // num7 left edge
+ r=[r[0],r[1]+4*_tDlt,r[2]+_tDlt,r[3]+3*_tDlt];
+ break;
+ case 4: // Dec
+ r=[r[0]+2*_tDlt,r[1]+_tDlt,r[2]+3*_tDlt,r[3]];
+ break;
+ case 5: // Enter lower edge
+ r=[r[0]+3*_tDlt,r[1]+2*_tDlt,r[2]+4*_tDlt,r[3]];
+ break;
+ case 6: // num2
+ r=[r[0]+_tDlt,r[1]+2*_tDlt,r[2]+2*_tDlt,r[3]+_tDlt];
+ break;
+ case 7: // num5
+ r=[r[0]+_tDlt,r[1]+3*_tDlt,r[2]+2*_tDlt,r[3]+2*_tDlt];
+ break;
+ case 8: // num8
+ r=[r[0]+_tDlt,r[1]+4*_tDlt,r[2]+2*_tDlt,r[3]+3*_tDlt];
+ break;
+ case 9: // num2
+ r=[r[0]+2*_tDlt,r[1]+2*_tDlt,r[2]+3*_tDlt,r[3]+_tDlt];
+ break;
+ case 10: // num6
+ r=[r[0]+2*_tDlt,r[1]+3*_tDlt,r[2]+3*_tDlt,r[3]+2*_tDlt];
+ break;
+ case 11: // num9
+ r=[r[0]+2*_tDlt,r[1]+4*_tDlt,r[2]+3*_tDlt,r[3]+3*_tDlt];
+ break;
+ case 12: // Back (right edge)
+ r=[r[0]+3*_tDlt,r[1]+3*_tDlt,r[2]+4*_tDlt,r[3]+2*_tDlt];
+ break;
+ case 13: // Minus (right edge)
+ r=[r[0]+3*_tDlt,r[1]+4*_tDlt,r[2]+4*_tDlt,r[3]+3*_tDlt];
+ break;
+ }
+ f.rect=r;
+ }
+ this.delay=false;
+}
+function makeMouseFriendly() {
+ if (!useKeyPad||!bTouchFriendly) return;
+ bTouchFriendly=false;
+ var indexTouch=-1, indexMouse;
+ if ( typeof fcMenu == "object") {
+ for ( var i=0; i<fcMenu.length; i++) {
+ if (fcMenu[i].cReturn=="3") indexTouch=i;
+ if (fcMenu[i].cReturn=="4") indexMouse=i;
+ }
+ if (indexTouch != -1) {
+ fcMenu[indexTouch].bMarked=bTouchFriendly;
+ fcMenu[indexMouse].bMarked=!bTouchFriendly;
+ }
+ }
+ var r;
+ this.delay=true;
+ var TKP=this.getField("toggleKeyPadBtn");
+ var bMovTKP=(TKP!=null);
+ if (bMovTKP) {
+ var tkpRect=TKP.rect;
+ tkpRect=[tkpRect[0]-2*_tDlt,tkpRect[1]-%
+4*_tDlt,tkpRect[2]-2*_tDlt,tkpRect[3]-4*_tDlt];
+ TKP.rect=tkpRect;
+ }
+ for (var i=0; i<aKPFieldNames.length; i++) {
+ f=this.getField(aKPFieldNames[i]);
+ r=f.rect;
+ switch(i) {
+ case 0: // 0
+ r=[r[0],r[1]-_tDlt,r[2]-2*_tDlt,r[3]];
+ break;
+ case 1: // num1 left edge
+ r=[r[0],r[1]-2*_tDlt,r[2]-_tDlt,r[3]-_tDlt];
+ break;
+ case 2: // num4 left edge
+ r=[r[0],r[1]-3*_tDlt,r[2]-_tDlt,r[3]-2*_tDlt];
+ break;
+ case 3: // num7 left edge
+ r=[r[0],r[1]-4*_tDlt,r[2]-_tDlt,r[3]-3*_tDlt];
+ break;
+ case 4: // Dec
+ r=[r[0]-2*_tDlt,r[1]-_tDlt,r[2]-3*_tDlt,r[3]];
+ break;
+ case 5: // Enter lower edge
+ r=[r[0]-3*_tDlt,r[1]-2*_tDlt,r[2]-4*_tDlt,r[3]];
+ break;
+ case 6: // num2
+ r=[r[0]-_tDlt,r[1]-2*_tDlt,r[2]-2*_tDlt,r[3]-_tDlt];
+ break;
+ case 7: // num5
+ r=[r[0]-_tDlt,r[1]-3*_tDlt,r[2]-2*_tDlt,r[3]-2*_tDlt];
+ break;
+ case 8: // num8
+ r=[r[0]-_tDlt,r[1]-4*_tDlt,r[2]-2*_tDlt,r[3]-3*_tDlt];
+ break;
+ case 9: // num2
+ r=[r[0]-2*_tDlt,r[1]-2*_tDlt,r[2]-3*_tDlt,r[3]-_tDlt];
+ break;
+ case 10: // num6
+ r=[r[0]-2*_tDlt,r[1]-3*_tDlt,r[2]-3*_tDlt,r[3]-2*_tDlt];
+ break;
+ case 11: // num9
+ r=[r[0]-2*_tDlt,r[1]-4*_tDlt,r[2]-3*_tDlt,r[3]-3*_tDlt];
+ break;
+ case 12: // Back (right edge)
+ r=[r[0]-3*_tDlt,r[1]-3*_tDlt,r[2]-4*_tDlt,r[3]-2*_tDlt];
+ break;
+ case 13: // Minus (right edge)
+ r=[r[0]-3*_tDlt,r[1]-4*_tDlt,r[2]-4*_tDlt,r[3]-3*_tDlt];
+ break;
+ }
+ f.rect=r;
+ }
+ this.delay=false;
+% getFieldObjects();
+}
+\end{newsegment}
+\begin{newsegment}{Option Dialog Box}
+var fcDialog =
+{
+ // set a default value for radio button field
+ initialize: function(dialog) {
+ var addDT="AT0" + String(addDecT);
+ var addDB="AB0" + String(addDecB);
+ var subDT="ST0" + String(subDecT);
+ var subDB="SB0" + String(subDecB);
+ var mulDT="MT0" + String(mulDecT);
+ var mulDB="MB0" + String(mulDecB);
+ var divDQ="DQ0" + String(divDecQ);
+ var divDB="DB0" + String(divDecB);
+ var radioString = addDT +": true, " + addDB +": true, "
+ + subDT + ": true, " + subDB + ": true, "
+ + mulDT + ": true, " + mulDB + ": true, "
+ + divDQ + ": true, " + divDB + ": true ";
+//console.println("radioString="+radioString);
+ eval("dialog.load({" + radioString + "})");
+ dialog.load({
+ // Populate the addition first
+ "aT_a": util.printf("\%.0f",addT_a),
+ "aT_b": util.printf("\%.0f",addT_b),
+ "aB_a": util.printf("\%.0f",addB_a),
+ "aB_b": util.printf("\%.0f",addB_b),
+ // subtraction
+ "sT_a": util.printf("\%.0f",subT_a),
+ "sT_b": util.printf("\%.0f",subT_b),
+ "sB_a": util.printf("\%.0f",subB_a),
+ "sB_b": util.printf("\%.0f",subB_b),
+ "nsCB": fcAllowNegSub,
+ // multiplication
+ "mT_a": util.printf("\%.0f",mulT_a),
+ "mT_b": util.printf("\%.0f",mulT_b),
+ "mB_a": util.printf("\%.0f",mulB_a),
+ "mB_b": util.printf("\%.0f",mulB_b),
+ // division
+ "dQ_a": util.printf("\%.0f",divQ_a),
+ "dQ_b": util.printf("\%.0f",divQ_b),
+ "dB_a": util.printf("\%.0f",divB_a),
+ "dB_b": util.printf("\%.0f",divB_b)
+ });
+ },
+ // when user presses "Ok", this handler will execute first
+ commit: function(dialog) {
+ var results = dialog.store();
+ addT_a = Math.round(results["aT_a"]);
+ addT_b = Math.round(results["aT_b"]);
+ addB_a = Math.round(results["aB_a"]);
+ addB_b = Math.round(results["aB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["AT0"+i]) { addDecT = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["AB0"+i]) { addDecB = i; break; }
+ // subtraction
+ subT_a = Math.round(results["sT_a"]);
+ subT_b = Math.round(results["sT_b"]);
+ subB_a = Math.round(results["sB_a"]);
+ subB_b = Math.round(results["sB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["ST0"+i]) { subDecT = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["SB0"+i]) { subDecB = i; break; }
+ fcAllowNegSub = results["nsCB"];
+ // multiplication
+ mulT_a = Math.round(results["mT_a"]);
+ mulT_b = Math.round(results["mT_b"]);
+ mulB_a = Math.round(results["mB_a"]);
+ mulB_b = Math.round(results["mB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["MT0"+i]) { mulDecT = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["MB0"+i]) { mulDecB = i; break; }
+ // division
+ divQ_a = Math.round(results["dQ_a"]);
+ divQ_b = Math.round(results["dQ_b"]);
+ divB_a = Math.round(results["dB_a"]);
+ divB_b = Math.round(results["dB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["DQ0"+i]) { divDecQ = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["DB0"+i]) { divDecB = i; break; }
+ },
+ // The Dialog Description
+ description:
+ {
+ name: "PDF Flash Cards - Options",
+ align_children: "align_left",
+ elements:
+ [
+\bFCa
+ { // The Addition Cluster
+ type: "cluster",
+ name: "\fcAdditionName",
+ item_id: "add",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "addRngT",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRange"
+ },
+ {
+ item_id: "aT_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "addRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "aT_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "aDcT",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "AT00",
+ group_id: "AddT",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "AT01",
+ group_id: "AddT",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "AT02",
+ group_id: "AddT",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "addRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRange"
+ },
+ {
+ item_id: "aB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "addRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "aB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "aDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "AB00",
+ group_id: "AddB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "AB01",
+ group_id: "AddB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "AB02",
+ group_id: "AddB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ }
+ ]
+ }, // End Addition Cluster
+\eFCa
+\bFCs
+ { // The Subtraction Cluster
+ type: "cluster",
+ name: "\fcSubtractionName",
+ item_id: "sub",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "subRngT",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRange"
+ },
+ {
+ item_id: "sT_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "subRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "sT_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "sDT",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "ST00",
+ group_id: "SubT",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "ST01",
+ group_id: "SubT",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "ST02",
+ group_id: "SubT",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "subRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRange"
+ },
+ {
+ item_id: "sB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "subRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "sB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "sDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "SB00",
+ group_id: "SubB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "SB01",
+ group_id: "SubB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "SB02",
+ group_id: "SubB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+//--
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "nSub",
+ name: "\fcOptAllowNegNumber"
+ },
+ {
+ type:"check_box",
+ item_id: "nsCB"
+ }
+ ]
+ }
+//--
+ ]
+ }, // End Subtraction Cluster
+\eFCs
+\bFCm
+ { // The Multiplication Cluster
+ type: "cluster",
+ name: "\fcMultiplicationName",
+ item_id: "mul",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mulRngT",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRange"
+ },
+ {
+ item_id: "mT_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "mulRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "mT_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mDcT",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "MT00",
+ group_id: "MulT",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "MT01",
+ group_id: "MulT",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "MT02",
+ group_id: "MulT",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mulRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRange"
+ },
+ {
+ item_id: "mB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "mulRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "mB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "MB00",
+ group_id: "MulB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "MB01",
+ group_id: "MulB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "MB02",
+ group_id: "MulB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ }
+ ]
+ }, // End Multiplication Cluster
+\eFCm
+\bFCd
+ { // The Division Cluster
+ type: "cluster",
+ name: "\fcDivisionName",
+ item_id: "div",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "divRngQ",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRangeDiv"
+ },
+ {
+ item_id: "dQ_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "divRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "dQ_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "dDcQ",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "DQ00",
+ group_id: "DivQ",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "DQ01",
+ group_id: "DivQ",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "DQ02",
+ group_id: "DivQ",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "divRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRangeDiv"
+ },
+ {
+ item_id: "dB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "divRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "dB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "dDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "DB00",
+ group_id: "DivB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "DB01",
+ group_id: "DivB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "DB02",
+ group_id: "DivB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ }
+ ]
+ }, // End Division Cluster
+\eFCd
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ alignment: "align_right",
+ type: "ok_cancel",
+ }
+ ]
+ }
+ ]
+ }
+}
+\end{newsegment}
+\end{insDLJS*}
+\begin{insDLJS}[fcMenu]{fcmd}{Menu Data}
+\fcMenu
+function processFcMenu() {
+ if ( (typeof fcMenu == "object") && fcMenu.length!=0 ) {
+ var cChoice = \popUpMenu(fcMenu);
+ if ( cChoice != null ) {
+ switch(cChoice) {
+ case "0": app.execDialog(fcDialog);
+ break;
+ case "1": ToggleKeyPad();
+ break;
+ case "2": app.execMenuItem("GeneralInfo");
+ break;
+ case "3": makeTouchFriendly();
+ break;
+ case "4": makeMouseFriendly();
+ break;
+ default:
+ if ( typeof processCustomFcMenu == "function" )
+ processCustomFcMenu(cChoice);
+ return;
+ }
+ }
+ } else app.alert("\fcMenuFCMsg");
+}
+\end{insDLJS}
+% \end{macrocode}
+% \begin{macrocode}
+\InputIfFileExists{fc_custom.def}{}{}
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
diff --git a/texmf-dist/source/latex/fc-arith/fc_arith.ins b/texmf-dist/source/latex/fc-arith/fc_arith.ins
new file mode 100644
index 00000000..dcf5c0c2
--- /dev/null
+++ b/texmf-dist/source/latex/fc-arith/fc_arith.ins
@@ -0,0 +1,62 @@
+%%
+%% 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{2010/03/17}
+\def\batchfile{fc_arith.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
+%\askonceonly
+%\usedir{tex/latex/hyperref}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\preamble
+\endpreamble
+
+\generate{%
+ \file{fc_arith.sty}{\from{fc_arith.dtx}{copyright,package}}
+ \file{fc_arith.drv}{\from{fc_arith.dtx}{copyright,driver}}
+}
+
+\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/texmf-dist/source/latex/fldigigal/fldigigal.dtx b/texmf-dist/source/latex/fldigigal/fldigigal.dtx
new file mode 100644
index 00000000..520d1bdf
--- /dev/null
+++ b/texmf-dist/source/latex/fldigigal/fldigigal.dtx
@@ -0,0 +1,452 @@
+%\iffalse
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% fldigigal.sty package, 2010-23-10 %%
+%% Copyright (C) 2010 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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{fldigigal}
+%<package> [2010/12/29 v0.5c fldigigal: Create a Flash Digital Gallery, Acrobat Distiller only (dps)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex]{hyperref}
+%\pdfstringdefDisableCommands{\let\\\textbackslash}
+%\EnableCrossrefs \CodelineIndex
+\begin{document}
+\def\CMD#1{\textbackslash#1}
+ \GetFileInfo{fldigigal.sty}
+ \title{\textsf{fldigigal}: Package for creating a Flash Digital Gallery}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@uakron.edu}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \let\Email\texttt
+ \DocInput{fldigigal.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}
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+\RequirePackage{rmannot}[2010/12/22]
+% \end{macrocode}
+%
+% \section{Introduction}
+%
+% \section{Implementation}
+% This package offers the \LaTeX/Distiller user the ability to create
+% \emph{Flash Photo Galleries}. There are several photo gallery layouts
+% to select from, and some dynamic options that can be specified. The
+% digital photographs (\textsf{JPG}, \textsf{PNG}, or \textsf{GIF}) may
+% be embedded in the PDF document, or may reside online and referenced by
+% an \textsf{URL}.
+%
+% \begin{macro}{\fdgFolder} The path to the folder containing
+% the the \textsf{SWF} files of this distribution. This path is set through
+% the \texttt{fldigigal.cfg} file.
+% \begin{macrocode}
+\newcommand{\fdgFolder}{C:/Users/Public/Documents/My TeX Files/%
+ tex/latex/aeb/aebpro/fldigigal/swf}
+% \end{macrocode}
+% \end{macro}
+% We input the file \texttt{fldigigal.cfg} which should contain a re-definition
+% of the command \cs{fdgFolder}, the path to the Flash Digital Gallery \textsf{SWFs}.
+% \begin{macrocode}
+\InputIfFileExists{fldigigal.cfg}{}{}
+% \end{macrocode}
+% \subsection{Main Code}
+% In this section we define the \cs{fdgXmlList} and \cs{fgRmAnnot}, and their
+% supporting cast of characters.
+% \begin{macrocode}
+% \end{macrocode}
+% An internal command for getting the rma object based on the current page and the
+% name of the annot.
+% \begin{macrocode}
+\def\fdg@namegdef#1{\expandafter\gdef\csname #1\endcsname}
+\def\fdg@namexdef#1{\expandafter\xdef\csname #1\endcsname}
+% \end{macrocode}
+% We define \cs{fdg@iso}, which, within the \cs{image} command, we declare that
+% \verb!\let\iso\fdg@iso!, defining the \cs{iso} command to enter special characters
+% in the \texttt{caption} attribute.
+% \begin{macrocode}
+{\catcode`\#=12 \catcode`\&=12 \catcode`\!=6
+ \gdef\fdg@iso!1{&#!1;}
+}
+% \end{macrocode}
+% \begin{macro}{\fdgXmlList}
+% The \cs{fdgXmlList} command describes the photos to be displayed in the
+% digital gallery. Here is an example of the structure:
+%\begin{verbatim}
+%\fdgXmlList[showcount]{myDigis}{%
+% \image{path=\myPhotosLocal/Chrysanthemum.jpg,caption=Chrysanthemum}
+% \image{path=\myPhotosLocal/Desert.jpg,caption=Desert}
+% \image{path=\myPhotosOnline/Hydrangeas.jpg,caption=Hydrangeas,online}
+% \image{path=\myPhotosOnline/Jellyfish.jpg,caption=Jellyfish,online}
+% \image{path=\myPhotosOnline/Koala.jpg,caption=Koala,online}
+% \image{path=\myPhotosOnline/Lighthouse.jpg,caption=Lighthouse,online}
+% \image{path=\myPhotosOnline/Penguins.jpg,caption=Penguins,online}
+% \image{path=\myPhotosOnline/Tulips.jpg,caption=Tulips,online}
+%}
+%\end{verbatim}
+% The first optional argument takes any optional arguments; at this time, the
+% only option is \texttt{showcount}, where the photo number and total number of
+% photos is displayed, e.g. \texttt{(2 of 8)}. The default is not to show the count.
+% The second parameter is the unique name of the gallery. The third parameter consists
+% of any number of image specifications. The \cs{image} command has three properties:
+% \texttt{path}, \texttt{caption}, and \texttt{online}. These are describe
+% in more detail below.
+% \begin{macro}{path} The absolute path (url) to the photo; the path may be on a local
+% hard drive, or on the Internet. Paths may (should) be defined using the
+% the \cs{definePath}, defined in the \texttt{eforms} package.
+%\begin{verbatim}
+% \definePath{\myPhotosOnline}{%
+% http://www.math.uakron.edu/~dpstory/photos/pa_demo}
+% \definePath{\myPhotosLocal}{%
+% C:/Users/Public/Pictures/Sample Pictures}
+%\end{verbatim}
+% \begin{macrocode}
+\define@key{fdgxml}{path}[]{\def\fdg@pa@path{#1}}
+% \end{macrocode}
+% \end{macro}
+% \DescribeMacro{caption} A (short) string that describes the photo. If the
+% \texttt{caption} key is not present, the filename of the digital photo is used.
+% \begin{macrocode}
+\define@key{fdgxml}{caption}[]{\def\fdg@pa@caption{#1}}
+% \end{macrocode}
+% \DescribeMacro{online} A Boolean key, which if true, signals that the path
+% to the photo is on the Internet (\texttt{http://}). If the \texttt{online} key is not
+% present, the path is assumed to be local, and the photo will be embedded in the PDF.
+% \begin{macrocode}
+\define@boolkey{fdgxml}{online}[true]{}
+% \end{macrocode}
+% We set the global defaults of these key-value pairs.
+% \begin{macrocode}
+\setkeys{fdgxml}{path,caption,online=false}
+% \end{macrocode}
+% We use this counter to count the digis as they are defined by the \cs{image}
+% macro.
+% \begin{macrocode}
+\newcount\cntdigis
+% \end{macrocode}
+% \DescribeMacro{\image} There are two definitions of the \cs{image} command:
+% \cs{fdg@cnt@images} and \cs{fdg@image}.\par\medskip\noindent
+% \cs{fdg@cnt@images} counts the number of images.
+% \begin{macrocode}
+\def\fdg@cnt@images#1{\advance\cntdigis1 }
+% \end{macrocode}
+% \cs{fdg@image} does all the work in writing the photo information to an XML file.
+% \begin{macrocode}
+\def\fdg@image#1{\begingroup
+ \let\Name\rma@resource\let\urlName\rma@urlresource
+ \setkeys{fdgxml}{#1}%
+ \global\advance\cntdigis1
+% \end{macrocode}
+% We expand the internal name of the digital resource. The name has the form
+% \texttt{Im<number>(<name>)}.
+% \begin{macrocode}
+ \edef\@digiImgName{Im\the\cntdigis(\fdg@CurrDigiName)}%
+% \end{macrocode}
+% Use \cs{saveNamedPath} to save this name and path.
+% \begin{macrocode}
+ \saveNamedPath{\@digiImgName}{\fdg@pa@path}%
+% \end{macrocode}
+% Get the basename and extension using the \cs{Name} command.
+% \begin{macrocode}
+ \edef\fdg@NamedExp{\expandafter\Name\expandafter{\@digiImgName}}%
+% \end{macrocode}
+% If the caption is empty, use the \texttt{basename.ext}
+% \begin{macrocode}
+ \ifx\fdg@pa@caption\@empty\def\fdg@pa@caption{\fdg@NamedExp}\fi
+% \end{macrocode}
+% If \texttt{online} is true, write the full url path to the xml using
+% the \cs{urlName} macro.
+% \begin{macrocode}
+ \ifKV@fdgxml@online
+ \edef\fdg@urlNamedExp{%
+ \expandafter\urlName\expandafter{\@digiImgName}}%
+ \fdg@IWVO{\space\space\space\space
+ <image title='\fdg@pa@caption\fdg@cntOf{\the\cntdigis}'>%
+ \fdg@urlNamedExp</image>
+ }%
+ \else
+% \end{macrocode}
+% If online is not listed, or is set to \texttt{false} we embed. We
+% accumulate all resources that are embedded in \cs{fdg@embededResources}
+% \begin{macrocode}
+ \toks0=\expandafter{\fdg@embededResources}%
+ \ifx\fdg@embededResources\@empty
+ \xdef\fdg@embededResources{\@digiImgName}\else
+ \xdef\fdg@embededResources{\the\toks0,\@digiImgName}\fi
+ \fdg@IWVO{\space\space\space\space
+ <image title='\fdg@pa@caption\fdg@cntOf{\the\cntdigis}'>%
+ \fdg@NamedExp</image>
+ }%
+ \fi
+\endgroup}
+% \end{macrocode}
+% Convenience macro for writing to the XML file
+% \begin{macrocode}
+\def\fdg@IWVO{\immediate\write\verbatim@out}
+% \end{macrocode}
+% A (internal) interface to the digi resources. The one argument
+% is the name of the gallery these digis are associated with.
+% \begin{macrocode}
+\def\embededResources#1{\csname #1ERs\endcsname}
+% \end{macrocode}
+% The internal name of the xmlList. The argument is the name of the gallery.
+% \begin{macrocode}
+\def\xmlListiv#1{xmlList4#1}
+% \end{macrocode}
+% \begin{macro}{\fdgcntOf}
+% The internal command for writing the photo count is \cs{fdg@cntOf}. Initially,
+% we \cs{let} \cs{fdg@cntOf} to \cs{@gobble}
+% \begin{macrocode}
+\let\fdg@cntOf\@gobble
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\fdgcntOf}[1]{\space(#1 of \fdg@numDigis)}
+% \end{macrocode}
+% \end{macro}
+% The options of \cs{fdgXmlList}. If \texttt{true} the photo number is displayed, if \texttt{false},
+% the default, no photo number is displayed.\par\medskip\noindent
+% \DescribeMacro{showcount} When the \texttt{showcount} option is specified, we \cs{let} \cs{fdg@cntOf}
+% to \cs{fdgcntOf}. The command may be redefined. The first argument is the photo
+% number, the command \cs{fdg@numDigis} expands to the total number of photos.
+% \begin{macrocode}
+\define@boolkey{fdgXML}{showcount}[true]{%
+ \ifKV@fdgXML@showcount\let\fdg@cntOf\fdgcntOf\else
+ \let\fdg@cntOf\@gobble\fi
+}
+% \end{macrocode}
+%\DescribeMacro{nowrite} When we set this switch, we \cs{let}
+% \cs{fdg@IWVO} to \cs{@gobble}, and do not open a \cs{newwrite} stream.
+% \begin{macrocode}
+\define@boolkey{fdgXML}{nowrite}[true]{}
+% \end{macrocode}
+% Set the defaults for he \cs{fdgXML} family.
+% \begin{macrocode}
+\setkeys{fdgXML}{showcount=false,nowrite=false}
+% \end{macrocode}
+% Finally, we have the definition of \cs{fdgXmlList}.
+% \begin{macrocode}
+\newcommand{\fdgXmlList}[3][]{%
+\begingroup
+ \setkeys{fdgXML}{#1}%
+ \ifKV@fdgXML@nowrite\let\fdg@IWVO\@gobble\fi
+ \cntdigis=0 \gdef\fdg@embededResources{}%
+ \ifKV@fdgXML@nowrite\else
+ \newwrite \fdg@writexmllist
+ \immediate\openout \fdg@writexmllist=#2.xml
+ \let\verbatim@out\fdg@writexmllist
+ \fi
+% \end{macrocode}
+% Open he photos xml file and write the top level
+% \begin{macrocode}
+ \fdg@IWVO{<photos>}%
+ \@ifundefined{#2@fdgdigis}{%
+ \fdg@namegdef{#2@fdgdigis}{#2}%
+ \def\fdg@CurrDigiName{#2}%
+ }{\PackageError{fldigigal}{Name already chosen}}%
+% \end{macrocode}
+% The \texttt{\#3} parameter contains the \cs{image} listing.
+% we first count the number of images using \cs{fdg@cnt@images}.
+% \begin{macrocode}
+ \let\image\fdg@cnt@images#3%
+ \edef\fdg@numDigis{\the\cntdigis}%
+% \end{macrocode}
+% Now, we repeat, but this time with \cs{fdg@image}.
+% \begin{macrocode}
+ \def\'{&apos;}\let\iso\fdg@iso
+ \cntdigis=0 \let\image\fdg@image#3%
+% \end{macrocode}
+% Close out XML List
+% \begin{macrocode}
+ \fdg@IWVO{</photos>}%
+ \ifKV@fdgXML@nowrite\else
+ \immediate\closeout \fdg@writexmllist
+ \fi
+\endgroup
+% \end{macrocode}
+% Save the path to the newly created xml list under the name
+% \texttt{xmlList4<name>}
+% \begin{macrocode}
+ \saveNamedPath{xmlList4#2}{\pathToSource/#2.xml}%
+% \end{macrocode}
+% Define a command to save the embedded resources.
+% \begin{macrocode}
+ \fdg@namexdef{#2ERs}{\ifx\fdg@embededResources\@empty\else,\fi
+ \fdg@embededResources}%
+}
+\@onlypreamble{\fdgXmlList}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fgRmannot}
+% This is the command that actually places the SWF. It uses the \cs{rmAnnot} command
+% from the \textsf{rmannot} package.
+% \paragraph*{Define Key-Value Pairs.} We declare two keys for \cs{fgRmannot}: \texttt{gallery} and \texttt{flashvars}.
+% We use gallery to select the gallery (layout), and flashvars to set some basic
+% parameters of the SWF.
+% \begin{macrocode}
+\define@key{fgRmAnnot}{flashvars}[]{\def\fgRmAnnot@flashvars{&#1}}
+\let\fgRmAnnot@flashvars\@empty
+\define@key{fgRmAnnot}{galleryopts}[]{\def\fgRmAnnot@galleryopts{#1}}
+% \end{macrocode}
+% The `\cs{saveNamePath}' definitions for the three supported galleries.
+% I have a custom gallery for no apparent reason (actually, if I want to
+% create and test a new gallery, I can set it up to use the \texttt{custom} key.
+% \begin{macrocode}
+\saveNamedPath{fdg_vt1}{\fdgFolder/fdg_vt1.swf}
+\saveNamedPath{fdg_ht1}{\fdgFolder/fdg_ht1.swf}
+\saveNamedPath{fdg_nt1}{\fdgFolder/fdg_nt1.swf}
+\saveNamedPath{custom}{\fdgFolder/fdg_vt1.swf}
+% \end{macrocode}
+% \paragraph*{fgGalleryOpts keys.}We now define the key value pairs for the \texttt{fgGalleryOpts} family.
+% These are the keys as listed by \texttt{galleryopts}.
+%
+% \DescribeMacro{gallery} At this time, we offer four choices for a design, more to follow as I learn
+% more about Flash Pro CS5.
+% \begin{macrocode}
+\define@choicekey+{fgGalleryOpts}{gallery}[\val\nr]%
+ {vthumbs1,hthumbs1,nothumbs1,custom}[vthumbs1]{%
+ \ifcase\nr\relax
+ \def\fgGalleryOpts@gallery{fdg_vt1}\or
+ \def\fgGalleryOpts@gallery{fdg_ht1}\or
+ \def\fgGalleryOpts@gallery{fdg_nt1}\or
+ \def\fgGalleryOpts@gallery{custom}\fi
+}{}
+% \end{macrocode}
+% \DescribeMacro{trans} Some standard transitions for the photos.
+% \begin{macrocode}
+\define@choicekey+{fgGalleryOpts}{trans}[\val\nr]%
+ {Blinds,Fade,Fly,Iris,Photo,PixelDissolve,Rotate,%
+ Squeeze,Wipe,Zoom,Random}[Random]{%
+ \edef\fgGalleryOpts@trans{\val}%
+}{}
+\let\fgGalleryOpts@trans\@empty
+% \end{macrocode}
+% \DescribeMacro{delay} The amount of delay between the automatic display of
+% a new photo. The default is 6 (seconds)
+% \begin{macrocode}
+\define@key{fgGalleryOpts}{delay}[6]{\def\fgGalleryOpts@delay{#1}}
+\let\fgGalleryOpts@delay\@empty
+% \end{macrocode}
+% \DescribeMacro{auto} A Boolean switch, which if \texttt{true}, the photos are displayed
+% automatically, the delay is determined by the \texttt{delay} key. The default is \texttt{auto=true}.
+% \begin{macrocode}
+\define@boolkey{fgGalleryOpts}{auto}[true]{%
+ \edef\fgGalleryOpts@auto{\ifKV@fgGalleryOpts@auto
+ true\else false\fi}}
+% \end{macrocode}
+% \DescribeMacro{transOn} A Boolean switch, which if \texttt{true}, a transition effect is used to transition
+% between photos.
+% \begin{macrocode}
+\define@boolkey{fgGalleryOpts}{transOn}[true]{%
+ \edef\fgGalleryOpts@transOn{\ifKV@fgGalleryOpts@transOn
+ true\else false\fi}}
+% \end{macrocode}
+% \DescribeMacro{captionalign} For all galleries except for \texttt{fdg\_nt1} we can align
+% the position of the caption: \texttt{left}, \texttt{right}, or \texttt{center}. The default is \texttt{left}.
+% \begin{macrocode}
+\define@choicekey+{fgGalleryOpts}{captionalign}[\val\nr]%
+ {left,right,center}[left]{%
+ \edef\fgGalleryOpts@captionalign{\val}%
+}{}
+\let\fgGalleryOpts@captionalign\@empty
+% \end{macrocode}
+% \DescribeMacro{nocaptions} A Boolean switch, which if \texttt{true}, no caption is written the the caption bar.
+% The default is \texttt{false}, captions are written.
+% \begin{macrocode}
+\define@boolkey{fgGalleryOpts}{nocaptions}[true]{%
+ \edef\fgGalleryOpts@nocaptions{\ifKV@fgGalleryOpts@nocaptions
+ true\else false\fi}}
+% \end{macrocode}
+% \DescribeMacro{nocaptionstext} If \texttt{nocaptions} is set to \texttt{true}, the value of this
+% key is used as the caption for all the photos. If \texttt{nocaptionstext} is not listed, or has not value, the empty
+% string is used.
+% \begin{macrocode}
+\define@key{fgGalleryOpts}{nocaptionstext}[]{%
+ \def\fgGalleryOpts@nocaptionstext{#1}}
+% \end{macrocode}
+% Global defaults for the \texttt{fgGalleryOpts} family.
+% \begin{macrocode}
+\setkeys{fgGalleryOpts}{gallery,transOn,auto=true,nocaptions=false,nocaptionstext}
+% \end{macrocode}
+% \DescribeMacro{\fgRmAnnot} Now for the definition of \cs{fgRmAnnot}.
+% \begin{macrocode}
+\newcommand{\fgRmAnnot}[2][]{\begingroup
+ \@ifundefined{#2@fdgdigis}%
+ {\PackageError{fldigigal}{The name `#2' is not defined
+ for\MessageBreak this \string\fgRmAnnot}{Gallery names
+ are defined using \string\fdgXmlList}}%
+% \end{macrocode}
+% We get the key-value pairs for the \texttt{fgRmAnnot} family, then
+% within the \texttt{galleryopts} key, we process those options as well.
+% \begin{macrocode}
+ \setkeys*{fgRmAnnot}{#1}\edef\XKV@rm@saved{\XKV@rm}%
+ \edef\tmp@setkeysEx{\noexpand\setkeys{fgGalleryOpts}%
+ {\fgRmAnnot@galleryopts}}\tmp@setkeysEx
+% \end{macrocode}
+% We build part of the \texttt{flashvars} that correspond to this application.
+% The macro \cs{merged@flashvars} merges the flash variables entered directly
+% by the document author to control the \cs{rmAnnot}.
+% \begin{macrocode}
+ \edef\merged@flashvars{\fgRmAnnot@flashvars%
+ \ifKV@fgGalleryOpts@auto\else&%
+ auto=\fgGalleryOpts@auto\fi
+ \ifx\fgGalleryOpts@delay\@empty\else&%
+ delay=\fgGalleryOpts@delay\fi
+ \ifx\fgGalleryOpts@trans\@empty\else&%
+ transitionType=\fgGalleryOpts@trans\fi
+ \ifKV@fgGalleryOpts@transOn\else&%
+ transitionOn=\fgGalleryOpts@transOn\fi
+ \ifx\fgGalleryOpts@captionalign\@empty\else&%
+ captionalign=\fgGalleryOpts@captionalign\fi
+ \ifKV@fgGalleryOpts@nocaptions&%
+ nocaptions=\fgGalleryOpts@nocaptions%
+ \ifx\gGalleryOpts@nocaptionstext\@empty\else&%
+ nocaptionstext=\fgGalleryOpts@nocaptionstext\fi\fi
+ }%
+% \end{macrocode}
+% OK, now we create an \cs{rmAnnot} with the desired parameters.
+% We populate the \texttt{flashvars} key.
+% \begin{macrocode}
+ \rmAnnot[\XKV@rm@saved,
+ flashvars={xmlPath=\Name{\xmlListiv{#2}}\merged@flashvars},%
+ resources={\xmlListiv{#2}\embededResources{#2}}%
+ ]{320bp}{240bp}{\fgGalleryOpts@gallery}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+\endinput
+History:
+ (2010/12/29 v0.5c) the auto option did not have a default value, fixed
+ (2010/12/25 v0.5b) version date referenced for the rmannot package was
+ incorrect, should read 2010/12/22.
+ (2010/12/25 v0.5a) remove some spurious spaces, and changed the size
+ of \fgRmAnnot from 640bp x 480bp to 320bp x 240bp
+ (2010/12/23 v0.5) First publication
diff --git a/texmf-dist/source/latex/fldigigal/fldigigal.ins b/texmf-dist/source/latex/fldigigal/fldigigal.ins
new file mode 100644
index 00000000..caeb7d5b
--- /dev/null
+++ b/texmf-dist/source/latex/fldigigal/fldigigal.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{2010/12/18}
+\def\batchfile{fldigigal.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{fldigigal.sty}{\from{fldigigal.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/texmf-dist/tex/latex/artthreads/artthreads.sty b/texmf-dist/tex/latex/artthreads/artthreads.sty
new file mode 100644
index 00000000..f8ec0fbb
--- /dev/null
+++ b/texmf-dist/tex/latex/artthreads/artthreads.sty
@@ -0,0 +1,200 @@
+%%
+%% This is file `artthreads.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% artthreads.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% artthreads.sty package, 2016-04-09 %%
+%% Copyright (C) 2016 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+\ProvidesPackage{artthreads}
+ [2016/04/09 v1.1 Support for article threads (dps)]
+\RequirePackage{xkeyval}
+\RequirePackage{ifpdf}[2006/02/20]
+\RequirePackage{ifxetex}[2006/08/21]
+\@ifundefined{ifpdfmarkup}{\newif\ifpdfmarkup}{}\pdfmarkupfalse
+\ifpdf\else\ifxetex\else\pdfmarkuptrue\fi\fi
+\DeclareOptionX{pdftex}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{dvips}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{dvipsone}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{dvipdfm}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{dvipdfmx}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{xetex}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{preview}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{!preview}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{viewMagWin}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{!viewMagWin}
+ {\PassOptionsToPackage{\CurrentOption}{fitr}}
+\ProcessOptionsX
+\RequirePackage{fitr}[2016/04/04]
+\newif\ifnewarticle
+\newcounter{artthrdcnt}
+\def\CntArt{0}\def\CntArtInfo{0}
+\def\inc@CntMacro#1{{\@tempcnta#1\relax\advance\@tempcnta1\relax
+ \xdef#1{\the\@tempcnta}}}
+\def\artM@rk{[\space}
+\define@key{artthrd}{title}[]{\def\threadTitle{#1}}
+ \let\threadTitle\@empty
+\define@key{artthrd}{author}[]{\def\threadAuthor{#1}}
+ \let\threadAuthor\@empty
+\define@key{artthrd}{keywords}[]{\def\threadKeywords{#1}}
+ \let\threadKeywords\@empty
+\define@key{artthrd}{subject}[]{\def\threadSubject{#1}}
+ \let\threadSubject\@empty
+\newcommand{\setThreadInfo}[1]{\inc@CntMacro\CntArtInfo
+ \let\threadTitle\@empty\let\threadAuthor\@empty
+ \let\threadKeywords\@empty\let\threadSubject\@empty
+ \setkeys{artthrd}{#1}\ifx\threadTitle\@empty
+ \def\threadTitle{thread-\CntArtInfo}\fi
+}
+\def\bArtErrMsg{When starting a new article thread
+ (\string\cArticle)\MessageBreak
+ first use \string\setThreadInfo\space to set the title,\MessageBreak
+ author, subject, and keywords}
+\define@key{@rtthrd}{addtow}[0]{%
+ \fitr@defaultbp{\artthrd@@addtow}{#1}}
+\def\artthrd@@addtow{0}
+\define@key{@rtthrd}{addtoh}[0]{%
+ \fitr@defaultbp{\artthrd@@addtoh}{#1}}
+\def\artthrd@@addtoh{0}
+\newcommand{\setAddToBorder}[1]{\setkeys{@rtthrd}{#1}}
+\newcommand{\bArticle}{\begingroup\inc@CntMacro\CntArt
+ \ifnum\CntArt=\CntArtInfo\relax\else
+ \PackageError{artthreads}{\bArtErrMsg}{See package documentation
+ for \string\setThreadInfo}\fi
+ \newarticletrue\set@rectart
+}
+\newcommand{\cArticle}{\begingroup\newarticlefalse\set@rectart}
+\newcommand{\set@rectart}[1]{\def\fitr@artrect@argi{#1}%
+ \edef\temp@exp{\noexpand\setkeys{fitr}{#1}}\temp@exp
+ \set@@rectart}
+\def\set@@rectart{\def\fitr@setBL{0pt}%
+ \@ifundefined{ef@Bbox}{\let\fitr@FLB@ction\Bbox}%
+ {\let\fitr@FLB@ction\ef@Bbox}%
+ \get@fitr@dimen{%
+ \parbox[\fitr@@refPt][\fitr@@height]{\fitr@@width}%
+ {\kern0pt\fitr@FLB@ction{\fitr@@width}{\fitr@@height}\kern0pt}%
+ }%
+ \makebox[0pt][l]{\hspace*{\fitr@@shift}\smash{%
+ \raisebox{\fitr@@lift-\fitr@setBL}{%
+ \setThre@d{\artthrd@@addtow}{\artthrd@@addtoh}%
+ \unhbox\fitr@bbox
+ \fitr@urxury@fixup{\artthrd@@addtow}{\artthrd@@addtoh}{}%
+ }}}\setlength{\fboxsep}{0pt}%
+ \ifviewMagWin
+ \fitr@length=\artthrd@@addtow bp
+ \fitr@length=2\fitr@length
+ \addtolength{\fitr@length}{\fitr@@width}%
+ \edef\fitr@@width{\the\fitr@length}%
+ \fitr@length=\artthrd@@addtoh bp
+ \fitr@length=2\fitr@length
+ \addtolength{\fitr@length}{\fitr@@height}%
+ \edef\fitr@@height{\the\fitr@length}%
+ \setlength\fitr@length{-\artthrd@@addtow bp}%
+ \addtolength\fitr@length{\fitr@@shift}%
+ \makebox[0pt][l]{\hspace*{\fitr@length}\smash{%
+ \setlength\fitr@length{\fitr@@lift-\fitr@setBL}%
+ \if\fitr@@refPt b%
+ \addtolength\fitr@length{-\artthrd@@addtoh bp}\else
+ \if\fitr@@refPt t%
+ \addtolength\fitr@length{\artthrd@@addtoh bp}%
+ \fi\fi
+ \raisebox{\fitr@length}%
+ {\fbox{\parbox[\fitr@@refPt][\fitr@@height]%
+ {\fitr@@width}{\kern0pt\hfill\vfill\kern0pt}}}}%
+ }%
+ \fi
+\endgroup}
+\if@fitr@dvipdfm
+\def\ThrBbox#1#2{%
+ \fitr@length=#1bp
+ \fitr@length=2\fitr@length
+ \advance\fitr@length\wd\fitr@bbox
+ \edef\fitr@xetex@view@width{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\ht\fitr@bbox
+ \edef\fitr@xetex@view@height{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\dp\fitr@bbox
+ \edef\fitr@xetex@view@depth{\the\fitr@length}%
+}\else\ifx\fitr@driver\fitr@pdftex@driver
+\def\ThrBbox#1#2{%
+ \fitr@length=#1bp
+ \fitr@length=2\fitr@length
+ \advance\fitr@length\wd\fitr@bbox
+ \edef\fitr@pdftex@view@width{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\ht\fitr@bbox
+ \edef\fitr@pdftex@view@height{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\dp\fitr@bbox
+ \edef\fitr@pdftex@view@depth{\the\fitr@length}%
+}\else\ifx\fitr@driver\fitr@dvipsone@driver
+\def\ThrBbox#1#2{%
+ currentpoint 2 copy %
+ \the\fitr@depth\space add #2\space PDFtoTeX add % y1
+ exch #1\space PDFtoTeX sub exch % x1
+ 4 2 roll exch
+ \the\fitr@width\space add #1\space PDFtoTeX add exch % x2
+ \the\fitr@height\space sub #2\space PDFtoTeX sub} % y2
+\else\ifx\fitr@driver\fitr@dvips@driver
+\def\ThrBbox#1#2{% Uses \fitr@bbox
+ currentpoint 2 copy %
+ \the\fitr@depth\space SPtoDvips add
+ #2\space BPToDvips add % y1
+ exch #1\space BPToDvips sub exch % x1
+ 4 2 roll exch
+ \the\fitr@width\space SPtoDvips add
+ #1\space BPToDvips add exch % x2
+ \the\fitr@height \space SPtoDvips sub
+ #2\space BPToDvips sub} % y2
+\fi\fi\fi\fi
+\def\setThre@d#1#2{%
+ \fitr@defaultbp{\aWd}{#1}\fitr@defaultbp{\aHt}{#2}%
+ \edef\tmp@exp{\noexpand\set@rtThrd{\aWd}{\aHt}}\tmp@exp
+}
+\if@fitr@dvipdfm
+\def\set@rtThrd#1#2{\ThrBbox{#1}{#2}%
+ \smash{\raisebox{-\fitr@xetex@view@height+#2bp}%
+ {\makebox[0pt][l]{\hspace*{-#1bp}%
+ \@pdfm@mark{thread @artthrd\CntArt\space
+ width \fitr@xetex@view@width\space
+ height \fitr@xetex@view@height\space
+ depth \fitr@xetex@view@depth\space
+ << /Title (\threadTitle)
+\ifnewarticle
+ /Author (\threadAuthor)
+ /Subject (\threadSubject)
+ /Keywords (\threadKeywords)
+\fi >>}}}}}\else\ifx\fitr@driver\fitr@pdftex@driver
+\def\set@rtThrd#1#2{\ThrBbox{#1}{#2}%
+ \makebox[0pt][l]{\hspace*{-#1bp}%
+ \pdfthread
+ width \fitr@pdftex@view@width\space
+ height \fitr@pdftex@view@height\space
+ depth \fitr@pdftex@view@depth\space
+ name {\threadTitle}}}\else
+\def\set@rtThrd#1#2{\literalps@out{\artM@rk
+ /Rect [\ThrBbox{\artthrd@@addtow}{\artthrd@@addtoh}]
+ /Title (\threadTitle)
+\ifnewarticle
+ /Author (\threadAuthor)
+ /Subject (\threadSubject)
+ /Keywords (\threadKeywords)
+\fi
+ /ARTICLE pdfmark}}
+\fi\fi
+\endinput
+%%
+%% End of file `artthreads.sty'.
diff --git a/texmf-dist/tex/latex/cntdwn/cntdwn.sty b/texmf-dist/tex/latex/cntdwn/cntdwn.sty
new file mode 100644
index 00000000..cd847ea6
--- /dev/null
+++ b/texmf-dist/tex/latex/cntdwn/cntdwn.sty
@@ -0,0 +1,84 @@
+%%
+%% This is file `cntdwn.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% cntdwn.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% cntdwn package, 2010-8-2 %%
+%% Copyright (C) 2010 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{cntdwn}
+ [2014/11/26 v.6 countdown support (dps)]
+\RequirePackage{xkeyval}
+\def\cntdwn@defaultcode{\makeatletter
+ \InputIfFileExists{shrtcnt.def}{}\makeatother}
+\DeclareOptionX{shortcount}{%
+ \def\cntdwn@shrtcnt{\cntdwn@defaultcode}%
+}
+\let\cntdwn@shrtcnt\@empty
+\DeclareOptionX{longcount}{%
+ \def\cntdwn@lngcnt{\makeatletter
+ \InputIfFileExists{lngcnt.def}{}\makeatother}%
+}
+\let\cntdwn@lngcnt\@empty
+\ProcessOptionsX
+\ifx\cntdwn@shrtcnt\@empty
+ \ifx\cntdwn@lngcnt\@empty\AtEndOfPackage{\cntdwn@defaultcode}\else
+ \AtEndOfPackage{\cntdwn@lngcnt}\fi
+\else
+ \AtEndOfPackage{\cntdwn@defaultcode}
+ \ifx\cntdwn@lngcnt\@empty\else\AtEndOfPackage{\cntdwn@lngcnt}\fi
+\fi
+\@namedef{Time@timername}{Time}
+\def\cntdwn@namegdef#1{\expandafter\gdef\csname #1\endcsname}
+\def\cntdwn@namexdef#1{\expandafter\xdef\csname #1\endcsname}
+\let\cntdwnlTimers\@empty
+\let\cntdwnaTimers\@empty
+\newcommand{\cntdwnYear}{year}
+\newcommand{\cntdwnYears}{years}
+\newcommand{\cntdwnDay}{day}
+\newcommand{\cntdwnDays}{days}
+\newcommand{\cntdwnHour}{hour}
+\newcommand{\cntdwnHours}{hours}
+\newcommand{\cntdwnMinute}{minute}
+\newcommand{\cntdwnMinutes}{minutes}
+\newcommand{\cntdwnSecond}{second}
+\newcommand{\cntdwnSeconds}{seconds}
+\begin{insDLJS*}[_timerObjsLoaded]{cntdwncom}
+\begin{newsegment}{CntDwn: DLJS for the cntdwn Package}
+/*
+ Document Level JavaScript for cntdwn
+ D. P. Story copyright 2010
+*/
+var _timerObjsLoaded=true;
+\end{newsegment}
+\begin{newsegment}{CntDwn: Timer Objects}
+var _oTime = new Object;
+ _oTime.second=1000;
+ _oTime.minute=60*_oTime.second;
+ _oTime.hour=60*_oTime.minute;
+ _oTime.day=24*_oTime.hour;
+ _oTime.year = 365*_oTime.day;
+\cntdwnlTimers
+var aTimers = new Array();
+\cntdwnaTimers
+\end{newsegment}
+\end{insDLJS*}
+\begingroup
+\catcode`\_12
+\gdef\CDO{_o}
+\endgroup
+\endinput
+%%
+%% End of file `cntdwn.sty'.
diff --git a/texmf-dist/tex/latex/cntdwn/lngcnt.def b/texmf-dist/tex/latex/cntdwn/lngcnt.def
new file mode 100644
index 00000000..e5ed8ac1
--- /dev/null
+++ b/texmf-dist/tex/latex/cntdwn/lngcnt.def
@@ -0,0 +1,518 @@
+%%
+%% This is file `lngcnt.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% cntdwn.dtx (with options: `copyright,lngcnt')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% cntdwn package, 2010-8-2 %%
+%% Copyright (C) 2010 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\lcntdwnDisplay}[4][]{%
+ \let\autorun@presets\@empty
+ \expandafter\ifnum\csname#2@autorun\endcsname=1\relax
+ \edef\autorun@presets{%
+ \AAPageOpen{if (\CDO#2.bAutorunEnabled && \CDO#2.timeout==null) lStartTimer(\CDO#2);}}\fi
+ \expandafter\ifnum\csname#2@autopause\endcsname=1\relax
+ \edef\autorun@presets{\autorun@presets
+ \AAPageClose{if (\CDO#2.timeout!=null) lcntdwnPause(\CDO#2);}}\fi
+ \edef\autorun@presets{\noexpand\AA{\autorun@presets}}%
+ \textField[\Ff\FfReadOnly\textSize{0}#1
+ \presets{\autorun@presets}]%
+ {\CDO#2.lcntdwn.timeToFromEvent}{#3}{#4}}
+\newcommand{\lcntdwnToggle}[4][]{%
+ \pushButton[\TU{Toggle Countdown}\A{\JS{lcntdwnToggle(\CDO#2);}}#1
+ ]{\CDO#2.lcntdwn.Toggle}{#3}{#4}}
+\newcommand{\setLongCntDwn}[2]{\begingroup
+ \@ifundefined{#1@timername}{\cntdwn@namegdef{#1@timername}{#1}}%
+ {\PackageError{cntdwn}{The name `#1' is already defined as a timer
+ variable.}{Choose a unique timer variable name,
+ one different from `#1'.}}%
+ \setkeys{lcntdwn}{date,endmsg,#2}%
+ \def\seconds{_oTime.second}\def\minutes{_oTime.minute}%
+ \def\hours{_oTime.hour}\def\days{_oTime.day}%
+ \def\weeks{7*_oTime.day}\def\years{_oTime.year}%
+ \cntdwn@namexdef{#1@autorun}{\lctndwn@autorun}%
+ \cntdwn@namexdef{#1@autopause}{\lctndwn@autopause}%
+ \ifx\lcntdwn@date\@empty\def\lcntdwn@date{1970/01/01}%
+ \PackageWarning{cntdwn}{!!Beware!!
+ The `date' key was not supplied,\MessageBreak
+ using the default date 1970/01/01}\fi
+ \def\r{^^J}\def\t{\space\space\space\space}%
+ \cntdwn@namexdef{#1TimerObject}{%
+ var _o#1 = {\r\t
+ name: "_o#1",\r\t
+ pdfdate:"D:\lcntdwn@date\lcntdwn@time\lcntdwn@tz",\r\t
+ target: null,\r\t
+ refreshrate: 1000,\r\t
+ notify1: \lcntdwn@notifyi,\r\t
+ notify2: \lcntdwn@notifyii,\r\t
+ notify3: \lcntdwn@notifyiii,\r\t
+ notify5: \lcntdwn@notifyv,\r\t
+ notify6: \lcntdwn@notifyvi,\r\t
+ notify7: \lcntdwn@notifyvii,\r\t
+ eventhandler: "\lcntdwn@eventhandler",\r\t
+ refreshrate: \lcntdwn@refreshrate,\r\t
+ timedateFunc: "\lcntdwn@timedateFunc",\r\t
+ displayfunc: "\lcntdwn@displayfunc",\r\t
+ endtimecolor: \cntdwn@endtimecolor,\r\t
+ weStopOnEnd: \lcntdwn@ifstop,\r\t
+ endMsg: "\lcntdwn@endmsg",\r\t
+ bAutorunEnabled:\lcntdwn@autorunenabled,\r\t
+ bNotify1:false,\r\t
+ bNotify2:false,\r\t
+ bNotify3:false,\r\t
+ bNotify4:false,\r\t
+ bNotify5:false,\r\t
+ bNotify6:false,\r\t
+ bNotify7:false,\r\t
+ lastSignDelta:1,\r\t
+ timeout:null\r
+ };
+ }%
+ \ifx\cntdwnlTimers\@empty
+ \else\g@addto@macro\cntdwnlTimers{^^J}\fi
+ \expandafter\g@addto@macro\expandafter\cntdwnlTimers
+ \expandafter{\csname#1TimerObject\endcsname}%
+ \ifx\cntdwnaTimers\@empty\else\g@addto@macro\cntdwnaTimers{^^J}\fi
+ \g@addto@macro\cntdwnaTimers{aTimers["_o#1"]=_o#1;}%
+ \endgroup}
+\def\@lcntdwn@parse@YYYY#1#2#3#4{%
+ {\count0=#1\relax\count0=#2\relax
+ \count0=#3\relax\count0=#4\relax}%
+ \def\lcntdwn@date{#1#2#3#4}%
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar/{\expandafter\@lcntdwn@parse@MM\@gobble}%
+ {\def\lcntdwn@date{#1#2#3#4}}}%
+}
+\def\@lcntdwn@parse@MM#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@date{\lcntdwn@date#1#2}%
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar/{\expandafter\@lcntdwn@parse@DD\@gobble}%
+ {\edef\lcntdwn@date{\lcntdwn@date#1#2}}}%
+}
+\def\@lcntdwn@parse@DD#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@date{\lcntdwn@date#1#2}%
+ \@gobbletonil
+}
+\def\@lcntdwn@parse@HH#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \def\lcntdwn@time{#1#2}
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar:{\expandafter\@lcntdwn@parse@mm\@gobble}%
+ {\def\lcntdwn@time{#1#2}}}%
+}
+\def\@lcntdwn@parse@mm#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@time{\lcntdwn@time#1#2}%
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar:{\expandafter\@lcntdwn@parse@SS\@gobble}%
+ {\edef\lcntdwn@time{\lcntdwn@time#1#2}}}%
+}
+\def\@lcntdwn@parse@SS#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@time{\lcntdwn@time#1#2}%
+ \@gobbletonil
+}
+\def\tz@Z{Z}\def\tz@p{+}\def\tz@m{-}
+\def\lcntdwn@parse@tz{\@ifnextchar\@nil
+ {\let\lcntdwn@tz\@empty}{\@lcntdwn@parse@tz}%
+}
+\def\@lcntdwn@parse@tz#1{%
+ \def\argi{#1}\ifx\argi\tz@Z
+ \def\lcntdwn@tz{Z}\def\@next{\@gobbletonil}%
+ \else\ifx\argi\tz@p\def\lcntdwn@tz{+}%
+ \def\@next{\tz@gethrs}\else
+ \ifx\argi\tz@m\def\lcntdwn@tz{-}%
+ \def\@next{\tz@gethrs}\else
+ \let\lcntdwn@tz\@empty\def\@next{\@gobbletonil}%
+ \fi\fi\fi\@next
+}
+\def\@gobbletonil#1\@nil{}
+\def\tz@gethrs#1#2{{\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@tz{\lcntdwn@tz#1#2'}%
+ \@ifnextchar\@nil{\@gobbletonil}{\tz@getmnts}}
+\def\tz@getmnts#1#2{{\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@tz{\lcntdwn@tz#1#2'}\@gobbletonil}
+\define@key{lcntdwn}{date}[]{%
+ \edef\argi{#1}\ifx\argi\@empty
+ \def\lcntdwn@date{}\let\@next\relax\else
+ \def\@next{\expandafter\@lcntdwn@parse@YYYY\argi\@nil}\fi
+ \@next
+}
+\define@key{lcntdwn}{time}[]{%
+ \edef\argi{#1}\ifx\argi\@empty
+ \let\lcntdwn@time\@empty\let\@next\relax\else
+ \def\@next{\expandafter\@lcntdwn@parse@HH\argi\@nil}\fi
+ \@next
+}
+\define@key{lcntdwn}{tzoffset}[]{%
+ \def\argi{#1}\ifx\argi\@empty
+ \let\lcntdwn@tz\@empty\let\@next\relax\else
+ \def\@next{\lcntdwn@parse@tz#1\@nil}\fi
+ \@next
+}
+\define@boolkey{lcntdwn}{autorun}[true]{%
+ \edef\lctndwn@autorun{\ifKV@lcntdwn@autorun1\else0\fi}}
+\define@boolkey{lcntdwn}{autopause}[true]{%
+ \edef\lctndwn@autopause{\ifKV@lcntdwn@autopause1\else0\fi}}
+\define@boolkey{lcntdwn}{autorunenabled}[true]{%
+ \edef\lcntdwn@autorunenabled{\ifKV@lcntdwn@autorunenabled
+ true\else false\fi}}
+\define@key{lcntdwn}{notify1}[null]{\def\lcntdwn@notifyi{#1}}
+\define@key{lcntdwn}{notify2}[null]{\def\lcntdwn@notifyii{#1}}
+\define@key{lcntdwn}{notify3}[null]{\def\lcntdwn@notifyiii{#1}}
+\define@key{lcntdwn}{notify5}[null]{\def\lcntdwn@notifyv{#1}}
+\define@key{lcntdwn}{notify6}[null]{\def\lcntdwn@notifyvi{#1}}
+\define@key{lcntdwn}{notify7}[null]{\def\lcntdwn@notifyvii{#1}}
+\define@key{lcntdwn}{eventhandler}[_NoOpt]{%
+ \def\lcntdwn@eventhandler{#1}}
+\define@key{lcntdwn}{refreshrate}[1000]{\def\lcntdwn@refreshrate{#1}}
+\define@key{lcntdwn}{currtimefunc}[_defaultTimeDateFunc]{%
+ \def\lcntdwn@timedateFunc{#1}}
+\define@key{lcntdwn}{displayfunc}[_defaultLDisplayFunc]{%
+ \def\lcntdwn@displayfunc{#1}}
+\define@key{lcntdwn}{endtimecolor}[color.red]{%
+ \def\cntdwn@endtimecolor{#1}}
+\define@choicekey{lcntdwn}{onfinish}[\val\nr]{stop,continue}[stop]{%
+ \ifcase\nr\relax\def\lcntdwn@ifstop{true}\or
+ \def\lcntdwn@ifstop{false}\fi}
+\newcommand{\lcnddwnDefaultEndMsg}{The time has expired}
+\define@key{lcntdwn}{endmsg}[\lcnddwnDefaultEndMsg]{%
+ \def\lcntdwn@endmsg{#1}}
+\setkeys{lcntdwn}{time,tzoffset,refreshrate,autorun,autopause,%
+ autorunenabled,notify1,notify2,notify3,notify5,notify6,notify7,%
+ eventhandler,endtimecolor,displayfunc,currtimefunc,%
+ onfinish=continue,endmsg}
+\newcommand{\setClockTimer}[2]{\begingroup
+ \@ifundefined{#1@timername}{\cntdwn@namegdef{#1@timername}{#1}}%
+ {\PackageError{cntdwn}{The name `#1' is already defined as a timer
+ variable.}{Choose a unique timer variable name,
+ one different from `#1'.}}%
+ \setkeys{lcntdwn}{#2}%
+ \def\seconds{_oTime.second}\def\minutes{_oTime.minute}%
+ \def\hours{_oTime.hour}\def\days{_oTime.day}%
+ \def\weeks{7*_oTime.day}\def\years{_oTime.year}%
+ \cntdwn@namexdef{#1@autorun}{\lctndwn@autorun}%
+ \cntdwn@namexdef{#1@autopause}{\lctndwn@autopause}%
+ \def\r{^^J}\def\t{\space\space\space\space}%
+ \cntdwn@namexdef{#1TimerObject}{%
+ var _o#1 = {\r\t
+ name: "_o#1",\r\t
+ tzoffset:"\lcntdwn@tz",\r\t
+ refreshrate: \lcntdwn@refreshrate,\r\t
+ timedateFunc: "\lcntdwn@timedateFunc",\r\t
+ timeout:null\r
+ };
+ }%
+ \ifx\cntdwnlTimers\@empty
+ \else\g@addto@macro\cntdwnlTimers{^^J}\fi
+ \expandafter\g@addto@macro\expandafter\cntdwnlTimers
+ \expandafter{\csname#1TimerObject\endcsname}%
+ \ifx\cntdwnaTimers\@empty\else\g@addto@macro\cntdwnaTimers{^^J}\fi
+ \g@addto@macro\cntdwnaTimers{aTimers["_o#1"]=_o#1;}%
+ \endgroup}
+\newcommand{\cntdwnclocktime}[4][]{%
+ \let\autorun@presets\@empty
+ \expandafter\ifnum\csname#2@autorun\endcsname=1\relax
+ \edef\autorun@presets{%
+ \AAPageOpen{if (\CDO#2.timeout==null) clStartTimer(\CDO#2);}}\fi
+ \expandafter\ifnum\csname#2@autopause\endcsname=1\relax
+ \edef\autorun@presets{\autorun@presets
+ \AAPageClose{if (\CDO#2.timeout!=null) clcntdwnPause(\CDO#2);}}\fi
+ \edef\autorun@presets{\noexpand\AA{\autorun@presets}}%
+ \textField[\Ff\FfReadOnly\Q{1}\textSize{0}#1
+ \presets{\autorun@presets}]%
+ {\CDO#2.clock.time}{#3}{#4}}
+\newcommand{\cntdwnclockdate}[4][]{\textField[%
+ \Ff\FfReadOnly\Q{1}\textSize{0}#1]{\CDO#2.clock.date}{#3}{#4}}
+\newcommand{\clockToggle}[4][]{%
+ \pushButton[\TU{Toggle Countdown}\A{\JS{clockToggle(\CDO#2);}}#1
+ ]{\CDO#2.lcntdwn.Toggle}{#3}{#4}}
+\begin{insDLJS*}[lngcntdwn]{lngcntdwn}
+\begin{newsegment}{CntDwn: Convert Time Function}
+/*
+ This function converts the PDF Date Format to a JavaScript
+ Date object. The PDF Date Format is specified in section
+ 3.8.3 in the PDF Reference.
+*/
+function pdfDate2oDate( pdfDate ) {
+ // if present, remove the "D:" in format
+ if ( pdfDate.indexOf("D:") != -1 )
+ pdfDate = pdfDate.substring(2);
+ // now see if the O component is there
+ var re = /[\+\-Z]/;
+ var nIndex = pdfDate.search(re);
+ // separate the time date info from the time zone offset info
+ if ( nIndex != -1 ) {
+ var cTimeZone = pdfDate.substring(nIndex);
+ pdfDate = pdfDate.substring(0, nIndex);
+ } else cTimeZone = "";
+ // seg is an array of arrays. The first element is the field width,
+ // the second entry is the default value.
+ var seg = [[4,1970],[2,1],[2,1],[2,0],[2,0],[2,0]];
+ // an array to hold time arguments for the date constructor.
+ var args = new Array();
+ // as we determine the values of the PDF Date Format, push them onto
+ // the args array, if not present, push the default value on.
+ for ( var i=0; i < seg.length; i++) {
+ if ( pdfDate.length > 0 ) {
+ args.push(Number( pdfDate.substring(0, seg[i][0]) ) );
+ pdfDate = pdfDate.substring( seg[i][0] );
+ } else args.push( seg[i][1] );
+ }
+ // adjust month to base zero
+ args[1] = args[1] - 1;
+ // see if there is time zone info
+ var pm = "";
+ if ( cTimeZone.length > 0 ) {
+ pm = cTimeZone.charAt(0);
+ var zoneOffsetHr=Number(cTimeZone.substring(1,3));
+ cTimeZone=cTimeZone.substring(3);
+ var zoneOffsetMin=0;
+ if ( cTimeZone.length > 0 && cTimeZone.charAt(0) == "'" )
+ var zoneOffsetMin = Number( cTimeZone.substring(1,3) );
+ var totalOffset=zoneOffsetHr*60+zoneOffsetMin;
+ totalOffset*= 60000;
+ totalOffset=( pm == "-" )?-1*totalOffset:totalOffset;
+ var msTime=Date.UTC.apply(global,args);
+ msTime = msTime - totalOffset;
+ var d = new Date( msTime );
+ } else {
+ var dateArgs = args.toSource().replace(/[\[\]]/g,"");
+ var d = eval("new Date(" + dateArgs + ")" );
+ }
+ return d
+}
+\end{newsegment}
+\begin{newsegment}{CntDwn: Long Countdown JavaScript}
+function lngcntdwn(cTimer){
+ var _delta,nYears,pYears,nDays,pDays,nHours,pHours,nMinutes,
+ pMinutes,nSeconds,pSeconds,f,thisSignDelta,msYear;
+ var oTimer=aTimers[cTimer];
+ var Clock=new Date();
+ this.delay=true;
+ _delta=oTimer.target-Clock;
+ var o=lCalcYears(oTimer,Clock,_delta);
+ nYears=o.nYears;
+ pYears=o.pYears;
+ _delta=o.delta;
+ nDays=Math.floor(pYears/_oTime.day);
+ pDays=pYears\%_oTime.day;
+ nHours=Math.floor(pDays/_oTime.hour);
+ pHours=pDays\%_oTime.hour;
+ nMinutes=Math.floor(pHours/_oTime.minute);
+ pMinutes=pHours\%_oTime.minute;
+ nSeconds=Math.round(pMinutes/_oTime.second);
+ pSeconds=pMinutes\%_oTime.second;
+ f=this.getField(cTimer+".lcntdwn.timeToFromEvent");
+ thisSignDelta=(_delta<0)?-1:1;
+ if (thisSignDelta*oTimer.lastSignDelta<0&&!oTimer.bNotify4) {
+ if (f!=null) f.textColor=oTimer.endtimecolor;
+ oTimer.bNotify4=true;
+ oTimer.lastSignDelta=thisSignDelta;
+ eval(oTimer.eventhandler)(this,cTimer,4);
+ if (oTimer.weStopOnEnd) {
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+ if (f!=null) f.value=oTimer.endMsg;
+ return;
+ }
+ }
+ if (!oTimer.bNotify4&&_delta>0){ // event in future
+ if (!oTimer.bNotify1&&oTimer.notify1!=null%
+&&_delta<oTimer.notify1) {
+ oTimer.bNotify1=true;
+ eval(oTimer.eventhandler)(this,cTimer,1);
+ } else {
+ if (!oTimer.bNotify2&&oTimer.notify2!=null%
+&&_delta<oTimer.notify2) {
+ oTimer.bNotify2=true;
+ skipCheckB=true;
+ eval(oTimer.eventhandler)(this,cTimer,2);
+ } else {
+ if (!oTimer.bNotify3&&oTimer.notify3!=null%
+&&_delta<oTimer.notify3) {
+ oTimer.bNotify3=true;
+ eval(oTimer.eventhandler)(this,cTimer,3);
+ }
+ }
+ }
+ }
+ if (oTimer.bNotify4&&_delta<0){// event in past
+ var neg_delta=-1*_delta;
+ if (!oTimer.bNotify5&&oTimer.notify5!=null&&%
+neg_delta>oTimer.notify5) {
+ oTimer.bNotify5=true;
+ eval(oTimer.eventhandler)(this,cTimer,5);
+ } else {
+ if (!oTimer.bNotify6&&oTimer.notify6!=null&&%
+neg_delta>oTimer.notify6) {
+ oTimer.bNotify6=true;
+ eval(oTimer.eventhandler)(this,cTimer,6);
+ } else {
+ if (!oTimer.bNotify7&&oTimer.notify7!=null&&%
+neg_delta>oTimer.notify7) {
+ oTimer.bNotify7=true;
+ eval(oTimer.eventhandler)(this,cTimer,7);
+ }
+ }
+ }
+ }
+ eval(oTimer.displayfunc)(f,nYears,nDays,nHours,nMinutes,nSeconds);
+ this.delay=false;
+ this.dirty=false;
+}
+function _defaultTimeDateFunc(oTime,cTimer) {
+ try{ this.getField(cTimer+".clock.time").value%
+=util.printd("H:MM:ss",oTime); } catch(e) {};
+ try { this.getField(cTimer+".clock.date").value=%
+util.printd("mm/dd/yyyy", oTime); } catch(e) {};
+}
+function _defaultLDisplayFunc(f,nYears,nDays,nHours,nMinutes,nSeconds) {
+ var strYears=(nYears==0)?""%
+:(""+nYears+((nYears == 1)?" \cntdwnYear, ":" \cntdwnYears, "));
+ var strDays=(nDays== 0)?""%
+:(""+nDays+((nDays==1)?" \cntdwnDay, ":" \cntdwnDays, "));
+ var strHours=(nHours==0)?""%
+:(""+nHours+((nHours==1)?" \cntdwnHour, ":" \cntdwnHours, "));
+ var strMinutes=(nMinutes==0)?""%
+:(""+nMinutes+((nMinutes==1)?" \cntdwnMinute, ":" \cntdwnMinutes, "));
+ var strSeconds=""+nSeconds+((nSeconds<2)?" \cntdwnSecond "%
+:" \cntdwnSeconds ");
+ var cCntDwnDisplay=strYears+strDays+strHours+strMinutes+strSeconds;
+ try { f.value=cCntDwnDisplay; } catch(e) {}
+}
+function lCalcYears(oTimer,Clock,_delta) {
+ var nYears,lengthOfYears,targetpdfdate,targetYear,thisYear,
+ otherYear,currAnnivDate,otherAnnivDate,tCurrAnnivDate,
+ tOtherAnnivDate,msYear=0;
+ targetpdfdate=oTimer.pdfdate;
+ targetYear=Number(targetpdfdate.substring(2,6));
+ thisYear=Clock.getFullYear();
+ otherYear=(_delta<0)?thisYear-1:thisYear+1;
+ currAnnivDate=targetpdfdate.substring(0,2)%
++thisYear+targetpdfdate.substring(6);
+ otherAnnivDate=targetpdfdate.substring(0,2)%
++otherYear+targetpdfdate.substring(6);
+ tCurrAnnivDate=pdfDate2oDate( currAnnivDate );
+ tOtherAnnivDate=pdfDate2oDate( otherAnnivDate );
+ if (_delta<0) {
+ if ( Clock < tCurrAnnivDate ){
+ nYears=otherYear-targetYear;
+ lengthOfYears=oTimer.target-tOtherAnnivDate;
+ } else {
+ nYears=thisYear-targetYear;
+ lengthOfYears=oTimer.target-tCurrAnnivDate;
+ }
+ } else {// _delta>=0
+ if ( Clock > tCurrAnnivDate ) {
+ nYears=targetYear-otherYear;
+ lengthOfYears=oTimer.target-tOtherAnnivDate;
+ } else {
+ nYears=targetYear-thisYear;
+ lengthOfYears=oTimer.target-tCurrAnnivDate;
+ }
+ }
+ _delta-=lengthOfYears;
+ pYears=Math.abs(_delta);
+ return {
+ nYears:nYears,
+ pYears:pYears,
+ delta:_delta
+ };
+}
+function lStartTimer(oTimer) {
+ var cTimer=oTimer.name;
+ oTimer.target=pdfDate2oDate(oTimer.pdfdate).getTime();
+ var bWasNotified=oTimer.bNotify4;
+ var _delta=oTimer.target-new Date();
+ oTimer.lastSignDelta=(_delta<0)?-1:1;
+ if ( _delta > 0 ) {
+ oTimer.bNotify1=(_delta<oTimer.notify1);
+ oTimer.bNotify2=(_delta<oTimer.notify2);
+ oTimer.bNotify3=(_delta<oTimer.notify3);
+ } else {
+ oTimer.bNotify4=true;
+ oTimer.bNotify5=(-1*_delta>oTimer.notify5);
+ oTimer.bNotify6=(-1*_delta>oTimer.notify6);
+ oTimer.bNotify7=(-1*_delta>oTimer.notify7);
+ }
+ if (!bWasNotified&&oTimer.bNotify4) {
+ var f=this.getField(cTimer+".lcntdwn.timeToFromEvent");
+ if (f!=null) f.textColor=oTimer.endtimecolor;
+ eval(oTimer.eventhandler)(this,cTimer,4);
+ }
+ if (_delta<0&&oTimer.weStopOnEnd) {
+ f.value=oTimer.endMsg;
+ return;
+ }
+ oTimer.timeout=app.setInterval(%
+"lngcntdwn(\""+cTimer+"\")",oTimer.refreshrate);
+}
+function lcntdwnPause(oTimer) {
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+}
+function lcntdwnToggle(oTimer) {
+ if (oTimer.timeout==null) // stopped or paused
+ lStartTimer(oTimer);
+ else
+ lcntdwnPause(oTimer);
+}
+function _NoOpt(doc,cTimer,nEvent){}
+function lngClockHandler(cTimer) {
+ var oTimer=aTimers[cTimer];
+ var Clock = new Date();
+ if ( oTimer.tzoffset != "" ) {
+ var localTime = Clock.getTime();
+ var localOffset = Clock.getTimezoneOffset()*60000;
+ // obtain UTC time in msec
+ var utc = localTime + localOffset;
+ var tzoffset=(oTimer.tzoffset=="Z")?0:oTimer.tzoffset;
+ var nonlocal=utc+oTimer.tzoffset;
+ Clock = new Date(nonlocal);
+ }
+ this.delay=true;
+ eval(oTimer.timedateFunc)(Clock,cTimer);
+ this.dirty=false;
+ this.delay=false;
+}
+function clStartTimer(oTimer) {
+ var tzoffset=oTimer.tzoffset;
+ if ( tzoffset !="" && tzoffset !="Z" ) {
+ var sign=tzoffset.charAt(0);
+ offset=tzoffset.substring(1);
+ var a=tzoffset.split("'");
+ var hrs=Number(a[0]);
+ var mins=Number(a[1]);
+ tzoffset=hrs*3600000+mins*60000;
+ tzoffset=((sign=="+")?1:-1)*tzoffset;
+ oTimer.tzoffset=tzoffset;
+ }
+ var cTimer=oTimer.name;
+ oTimer.timeout=app.setInterval(%
+"lngClockHandler(\""+cTimer+"\")",oTimer.refreshrate);
+}
+function clockToggle(oTimer) {
+ if (oTimer.timeout==null) // stopped or paused
+ clStartTimer(oTimer);
+ else
+ lcntdwnPause(oTimer);
+}
+\end{newsegment}
+\end{insDLJS*}
+\endinput
+%%
+%% End of file `lngcnt.def'.
diff --git a/texmf-dist/tex/latex/cntdwn/shrtcnt.def b/texmf-dist/tex/latex/cntdwn/shrtcnt.def
new file mode 100644
index 00000000..babca943
--- /dev/null
+++ b/texmf-dist/tex/latex/cntdwn/shrtcnt.def
@@ -0,0 +1,271 @@
+%%
+%% This is file `shrtcnt.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% cntdwn.dtx (with options: `copyright,shortcnt')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% cntdwn package, 2010-8-2 %%
+%% Copyright (C) 2010 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\cntdwnopts}[1]{\TU{#1}\H{N}\S{S}\BG{}}
+\newcommand{\cntdwnDisplay}[4][]{%
+ \expandafter\ifnum\csname#2@autorun\endcsname=1\relax
+ \def\autorun@presets{%
+ \AA{\AAPageOpen{if (!\CDO#2.isCounting&&!\CDO#2.bNotify4)
+ sStartTimer(\CDO#2);}}}\else
+ \let\autorun@presets\@empty\fi
+ \textField[\Ff\FfReadOnly\Q{1}#1\presets{\autorun@presets}
+ ]{\CDO#2.cntdwn.TimeRemaining}{#3}{#4}}
+\newcommand{\cntdwnStartT}[4][]{%
+ \pushButton[\presets{\cntdwnopts{Start}}
+ \A{\JS{sStartTimer(\CDO#2);}}#1]{\CDO#2.cntdwn.Notify1}{#3}{#4}}
+\newcommand{\cntdwnStart}[4][]{%
+ \pushButton[\TU{Start}\A{\JS{sStartTimer(\CDO#2);}}#1
+ ]{\CDO#2.cntdwn.Start}{#3}{#4}}
+\newcommand{\cntdwnPauseT}[4][]{%
+ \pushButton[\presets{\cntdwnopts{Pause}}
+ \A{\JS{sPauseTimer(\CDO#2);}}#1
+ ]{\CDO#2.cntdwn.Notify2}{#3}{#4}}
+\newcommand{\cntdwnPause}[4][]{%
+ \pushButton[\TU{Pause}\A{\JS{sPauseTimer(\CDO#2);}}#1
+ ]{\CDO#2.cntdwn.Pause}{#3}{#4}}
+\newcommand{\cntdwnStopT}[4][]{%
+ \pushButton[\presets{\cntdwnopts{Stop}}
+ \A{\JS{sStopTimer(\CDO#2);}}#1
+ ]{\CDO#2.cntdwn.Notify3}{#3}{#4}}
+\newcommand{\cntdwnStop}[4][]{%
+ \pushButton[\TU{Stop}\A{\JS{sStopTimer(\CDO#2);}}#1
+ ]{\CDO#2.cntdwn.Stop}{#3}{#4}}
+\newcommand{\cntdwnEndTarget}[4][]{%
+ \textField[\Ff\FfReadOnly\Ff\FfMultiline#1
+ ]{\CDO#2.cntdwn.End}{#3}{#4}}
+\newcommand{\setShortCntDwn}[2]{\begingroup
+ \@ifundefined{#1@timername}{\cntdwn@namegdef{#1@timername}{#1}}%
+ {\PackageError{cntdwn}{The name `#1' is already defined as a timer
+ variable.}{Choose a unique timer variable name,
+ one different from `#1'.}}%
+ \def\seconds{_oTime.second}\def\minutes{_oTime.minute}%
+ \def\hours{_oTime.hour}%
+ \setkeys{cntdwn}{endmsg,#2}%
+ \cntdwn@namexdef{#1@autorun}{\ctndwn@autorun}%
+ \def\r{^^J}\def\t{\space\space\space\space}%
+ \cntdwn@namexdef{#1TimerObject}{%
+ var _o#1 = {\r\t
+ name: "_o#1",\r\t
+ length: \cntdwn@length,\r\t
+ timeleft: \cntdwn@length,\r\t
+ notify1: \cntdwn@notifyi,\r\t
+ notify2: \cntdwn@notifyii,\r\t
+ notify3: \cntdwn@notifyiii,\r\t
+ refreshrate: \cntdwn@refreshrate,\r\t
+ event1: "\cntdwn@eventi",\r\t
+ event2: "\cntdwn@eventii",\r\t
+ event3: "\cntdwn@eventiii",\r\t
+ endEvent: "\cntdwn@eventiv",\r\t
+ weStopOnEnd: \cntdwn@ifstop,\r\t
+ isStopwatch: \isStopwatch,\r\t
+ startcolor: \cntdwn@startcolor,\r\t
+ pausecolor: \cntdwn@pausecolor,\r\t
+ stopcolor: \cntdwn@stopcolor,\r\t
+ endMsg: "\cntdwn@endmsg",\r\t
+ bNotify1:false,\r\t
+ bNotify2:false,\r\t
+ bNotify3:false,\r\t
+ bNotify4:false,\r\t
+ isCounting:false,\r\t
+ bBlinkOn:false,\r\t
+ startTime:0,\r\t
+ pauseTime:0,\r\t
+ EndOfTime:0,\r\t
+ blinkTimeOut:null,\r\t
+ timeout:null\r
+ };
+ }%
+ \ifx\cntdwnlTimers\@empty
+ \else\g@addto@macro\cntdwnlTimers{^^J}\fi
+ \expandafter\g@addto@macro\expandafter\cntdwnlTimers
+ \expandafter{\csname#1TimerObject\endcsname}%
+ \ifx\cntdwnaTimers\@empty\else\g@addto@macro\cntdwnaTimers{^^J}\fi
+ \g@addto@macro\cntdwnaTimers{aTimers["_o#1"]=_o#1;}%
+ \endgroup}
+\def\thetimername#1{\csname#1@timername\endcsname}
+\@onlypreamble\setShortCntDwn
+\define@boolkey{cntdwn}{stopwatch}[true]{%
+ \edef\isStopwatch{\ifKV@cntdwn@stopwatch true\else false\fi}}
+\define@boolkey{cntdwn}{autorun}[true]{%
+ \edef\ctndwn@autorun{\ifKV@cntdwn@autorun1\else0\fi}}
+\define@key{cntdwn}{length}[20*\minutes]{\def\cntdwn@length{#1}}
+\define@key{cntdwn}{notify1}[5*\minutes]{\def\cntdwn@notifyi{#1}}
+\define@key{cntdwn}{notify2}[3*\minutes]{\def\cntdwn@notifyii{#1}}
+\define@key{cntdwn}{notify3}[1*\minutes]{\def\cntdwn@notifyiii{#1}}
+\define@key{cntdwn}{refreshrate}[1000]{\def\cntdwn@refreshrate{#1}}
+\define@key{cntdwn}{event1}[sDefNotify1]{\def\cntdwn@eventi{#1}}
+\define@key{cntdwn}{event2}[sDefNotify2]{\def\cntdwn@eventii{#1}}
+\define@key{cntdwn}{event3}[sDefNotify3]{\def\cntdwn@eventiii{#1}}
+\define@key{cntdwn}{endEvent}[sDefEndEvent]{\def\cntdwn@eventiv{#1}}
+\define@choicekey{cntdwn}{onfinish}[\val\nr]{stop,continue}[stop]{%
+ \ifcase\nr\relax\def\cntdwn@ifstop{true}\or
+ \def\cntdwn@ifstop{false}\fi}
+\define@key{cntdwn}{startcolor}[color.green]{%
+ \def\cntdwn@startcolor{#1}}
+\define@key{cntdwn}{pausecolor}[color.yellow]{%
+ \def\cntdwn@pausecolor{#1}}
+\define@key{cntdwn}{stopcolor}[color.red]{\def\cntdwn@stopcolor{#1}}
+\newcommand{\cnddwnDefaultEndMsg}{This ends the
+ Presentation, any questions?}
+\define@key{cntdwn}{endmsg}[\cnddwnDefaultEndMsg]{%
+ \def\cntdwn@endmsg{#1}}
+\setkeys{cntdwn}{stopwatch=false,onfinish,length,%
+ notify1,notify2,notify3,refreshrate,startcolor,pausecolor,%
+ stopcolor,event1,event2,event3,endEvent,autorun=false,endmsg}
+\begin{insDLJS*}[shrtcntdwn]{shrtcntdwn}
+\begin{newsegment}{CntDwn: Countdown JavaScript}
+function shrtcntdwn(cTimer){
+ var oTimer=aTimers[cTimer];
+ var _delta,nDays,pDays,nHours,pHours,nMinutes,
+ pMinutes,nSeconds,pSeconds,timeValue,isEndReached;
+ _delta=(oTimer.isStopwatch)?new Date()%
+-new Date(oTimer.startTime):new Date(oTimer.EndOfTime)-new Date();
+ oTimer.timeleft=_delta;
+ _delta=(_delta<0)?-_delta:_delta;
+ this.delay=true;
+ nDays = Math.floor(_delta/_oTime.day);
+ pDays = _delta\%_oTime.day;
+ nHours = Math.floor(pDays/_oTime.hour);
+ pHours = pDays\%_oTime.hour;
+ nMinutes = Math.floor(pHours/_oTime.minute );
+ pMinutes = pHours\%_oTime.minute;
+ nSeconds = Math.floor(pMinutes/_oTime.second);
+ pSeconds = pMinutes\%_oTime.second;
+ timeValue=((nHours>=1)?((nHours<10)?"0":"")+nHours+":":"")
+ +((nMinutes<10)?"0":"")+nMinutes
+ +":"+((nSeconds<10)?"0":"")+nSeconds;
+ try { this.getField(oTimer.name%
++".cntdwn.TimeRemaining").value= timeValue; }
+ catch(e) {};
+ isEndReached=(oTimer.isStopwatch)?oTimer.timeleft>oTimer.length%
+:oTimer.timeleft< 0;
+ if ( isEndReached && !oTimer.bNotify4) {
+ oTimer.bNotify4=true;
+ eval(oTimer.endEvent)(this,cTimer);
+ if (oTimer.weStopOnEnd) {
+ oTimer.isCounting=false;
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+ }
+ try { app.clearInterval(oTimer.blinkTimeOut);
+ oTimer.blinkTimeOut=null; } catch(e){};
+ this.delay=false;this.dirty=false;
+ if (oTimer.weStopOnEnd) return;
+ }
+ if (oTimer.isStopwatch) {
+ if (!oTimer.bNotify1&&(_delta>oTimer.notify1))
+ {oTimer.bNotify1=true;eval(oTimer.event1)(this,cTimer);}
+ if (!oTimer.bNotify2&&(_delta>oTimer.notify2))
+ {oTimer.bNotify2=true;eval(oTimer.event2)(this,cTimer);}
+ if (!oTimer.bNotify3&&(_delta>oTimer.notify3))
+ {oTimer.bNotify3=true;eval(oTimer.event3)(this,cTimer);}
+ } else {
+ if (!oTimer.bNotify1&&(_delta<oTimer.notify1))
+ {oTimer.bNotify1=true;eval(oTimer.event1)(this,cTimer);}
+ if (!oTimer.bNotify2&&(_delta<oTimer.notify2))
+ {oTimer.bNotify2=true;eval(oTimer.event2)(this,cTimer);}
+ if (!oTimer.bNotify3&&(_delta<oTimer.notify3))
+ {oTimer.bNotify3=true;eval(oTimer.event3)(this,cTimer);}
+ }
+ this.delay=false;this.dirty=false;
+}
+function sDefNotify1(doc,cTimer) {
+ var oTimer=aTimers[cTimer];
+ var f = doc.getField(cTimer+".cntdwn.Notify1");
+ if (f!=null) f.fillColor = oTimer.startcolor;
+ app.beep();
+}
+function sDefNotify2(doc,cTimer) {
+ var oTimer=aTimers[cTimer];
+ var f = doc.getField(cTimer+".cntdwn.Notify2");
+ if (f!=null) f.fillColor = oTimer.pausecolor;
+ app.beep();
+}
+function sDefNotify3(doc,cTimer) {
+ var oTimer=aTimers[cTimer];
+ app.beep();
+ var f = doc.getField(cTimer+".cntdwn.Notify3");
+ if ( f!=null)
+ oTimer.blinkTimeOut=app.setInterval(%
+"_sBlinkRed(\""+cTimer+"\")",500);
+}
+function _sBlinkRed(cTimer) {
+ var oTimer=aTimers[cTimer];
+ var f=this.getField(cTimer+".cntdwn.Notify3");
+ f.fillColor = ( oTimer.bBlinkOn )?color.white:oTimer.stopcolor;
+ oTimer.bBlinkOn=!oTimer.bBlinkOn;
+ this.dirty=false;
+}
+function sDefEndEvent(doc,cTimer) {
+ var oTimer=aTimers[cTimer];
+ var f=doc.getField(cTimer+".cntdwn.Notify3");
+ if (f!=null) f.fillColor = oTimer.stopcolor;
+ f=doc.getField(cTimer+".cntdwn.End");
+ if (f!=null) f.value = oTimer.endMsg;
+}
+function sPauseTimer(oTimer) {
+ oTimer.isCounting=false;
+ oTimer.pauseTime=new Date().valueOf();
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+}
+function sStopTimer(oTimer) {
+ oTimer.isCounting=false;
+ oTimer.startTime=oTimer.pauseTime=0;
+ oTimer.timeleft=oTimer.length;
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+ try { app.clearInterval(oTimer.blinkTimeOut);
+ oTimer.blinkTimeOut=null; } catch(e){};
+ try { this.getField(oTimer.name%
++".cntdwn.Notify1").fillColor = color.white; } catch(e) {}
+ try { this.getField(oTimer.name%
++".cntdwn.Notify2").fillColor = color.white; } catch(e) {}
+ try { this.getField(oTimer.name%
++".cntdwn.Notify3").fillColor = color.white; } catch(e) {}
+ oTimer.bNotify1=oTimer.bNotify2=oTimer.bNotify3%
+=oTimer.bNotify4=false;
+ this.resetForm([oTimer.name]);
+ this.dirty=false;
+}
+function sStartTimer(oTimer) {
+ if (oTimer.isCounting) return;
+ oTimer.isCounting=true;
+ if (oTimer.startTime == 0 || (event.shift) %
+|| (oTimer.weStopOnEnd&&oTimer.bNotify4) ){
+ sStopTimer(oTimer);
+ oTimer.startTime=new Date().valueOf();
+ }
+ oTimer.pauseTime=(oTimer.pauseTime==0)?0:new Date()%
+-new Date(oTimer.pauseTime)+oTimer.refreshrate;
+ oTimer.startTime+=oTimer.pauseTime;
+ if (oTimer.isStopwatch)
+ oTimer.EndOfTime=oTimer.startTime+((event.shift)?oTimer.length%
+:oTimer.timeleft);
+ else
+ oTimer.EndOfTime=new Date().valueOf()%
++((event.shift)?oTimer.length:oTimer.timeleft);
+ oTimer.timeout=app.setInterval(%
+"shrtcntdwn(\""+oTimer.name+"\")",oTimer.refreshrate);
+}
+\end{newsegment}
+\end{insDLJS*}
+\endinput
+%%
+%% End of file `shrtcnt.def'.
diff --git a/texmf-dist/tex/latex/ecards/ecards.sty b/texmf-dist/tex/latex/ecards/ecards.sty
new file mode 100644
index 00000000..fc0b39b7
--- /dev/null
+++ b/texmf-dist/tex/latex/ecards/ecards.sty
@@ -0,0 +1,560 @@
+%%
+%% This is file `ecards.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ecards.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% ecards.sty package, %%
+%% Copyright (C) 1999-2016 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+\ProvidesPackage{ecards}
+ [2016/09/03 v2.0e eCards: An electronic flash cards package (dps)]
+\let\ec@YES=y \let\ec@NO=n
+\DeclareOption{memLogo}{\let\@memLogo\ec@YES}
+\let\@memLogo\ec@NO
+\DeclareOption{listing}{\ecListingtrue}
+\newif\ifecListing \ecListingfalse
+\DeclareOption{custom}{\let\@ecCustom\ec@YES}
+\let\@ecCustom\ec@NO
+\DeclareOption{nohints}{\def\opts@ecNoHints{nohint}%
+\def\defaultecNoHints{\useNoHints}\defaultecNoHints}
+\newif\ifisQues \isQuesfalse
+\def\useNoHints{\ifecListing\else\newpage\fi\ecUseNoHints}
+\def\ecUseNoHints{\ifisQues
+ \expandafter\def\else\expandafter\gdef\fi\opts@ecNoHints{nohint}%
+ \global\let\@ecNoHints\ec@YES
+ \gdef\hintDest{ex\exnoCard}\gdef\solnDest{ex\exnoCard.s}%
+ \gdef\hintDestJS{ex.\exnoCard}\gdef\quesDestJS{ex.\exnoCard}%
+}
+\def\useHints{\ifecListing\else\newpage\fi\ecUseHints}
+\def\ecUseHints{\ifisQues
+ \expandafter\def\else\expandafter\gdef\fi\opts@ecNoHints{hint}%
+ \global\let\@ecNoHints\ec@NO
+ \gdef\hintDest{ex\exnoCard}\gdef\solnDest{ex\exnoCard.s}%
+ \gdef\hintDestJS{ex.\exnoCard}\gdef\quesDestJS{qex.\exnoCard}%
+}
+\def\opts@ecNoHints{hint}
+\def\defaultecNoHints{\useHints}
+\defaultecNoHints
+\DeclareOption{notrandomized}{\def\israndomized{false}
+ \def\cbInitState{Off}}
+\def\israndomized{true}
+\def\cbInitState{randomOrder}
+\ProcessOptions
+\RequirePackage{web}
+\RequirePackage{exerquiz}[2016/04/18]
+\newcommand{\cardsFinishedMsg}[1]{\def\CARDSFINISHED{#1}}
+\cardsFinishedMsg{You've seen all the cards!}
+\textBgColor{cornsilk}
+\def\cardColor#1{\def\@cardColor{#1}}
+\def\hintColor#1{\def\@hintColor{#1}}
+\def\solnColor#1{\def\@solnColor{#1}}
+\cardColor{vlightblue}
+\hintColor{cornsilk}
+\solnColor{webyellow}
+\let\exnoCard\the@exno
+\let\web@rightheader\@empty
+\def\io#1{\immediate\write\@auxout{#1}}
+\def\endsolnexerhookaux{%
+ \ifnum\@panelconfig=0\relax
+ \immediate\write\verbatim@out
+ {\string\insNaviBar*{\hfil\string\NextCard\string\ %
+ \string\PrevCard\string\ \string\ToggleOrder\hfil}}%
+ \fi
+}
+\def\include@solutions{%
+ \let\webnewpage\relax
+ \immediate\closeout\ex@solns
+ \ifeq@nosolutions\else
+ \iftherearesolutions\newpage\markright{\exsecrunhead}%
+ \ifx\webnewpage\relax
+ \def\webnewpage{\let\webnewpage\newpage}%
+ \fi
+ \eqsolutionshook
+ \addcontentsline{toc}{section}
+ {\protect\numberline{}\exsectitle}%
+ \input{\jobname.sol}%
+ \fi
+ \fi
+}
+\AtEndDocument{\io{\string\gdef\string\totalCards{\exnoCard}}\clearpage}
+\def\theNumCards{\csname totalCards\endcsname}
+\let\ec@Zero=0 \let\ec@One=1 \let\ec@Two=2
+\def\ec@Ques{0}\def\ec@Hint{1}\def\ec@Soln{2}
+\def\nMarkerSet#1{\gdef\nMarker{#1}}
+\nMarkerSet\ec@Ques
+\def\ReturnTo#1#2{\eq@fititin#2}
+\renewcommand\exsecrunhead{}
+\renewcommand\exlabel{}
+\renewcommand\exsectitle{}
+\newcommand{\leadAnsFmtForPaper}{\textbf{Ans:\thinspace[}}
+\newcommand{\trailAnsFmtForPaper}{\textbf{]}}
+\def\math@correctAnswer{\unskip\ifeqforpaper\leadAnsFmtForPaper\fi
+ {\ttfamily\color{\@proofingsymbolColor}\spaceskip=2pt\xspaceskip=2pt
+ \expandafter\gobbleMacro\meaning\eqCorrectAns}%
+ \ifeqforpaper\trailAnsFmtForPaper\fi
+}
+\def\txt@correctAnswer{\unskip\ifeqforpaper\textbf{Ans:\thinspace[}\fi
+ {\ttfamily\color{\@proofingsymbolColor}%
+ \spaceskip=2pt\xspaceskip=2pt
+ \expandafter\gobbleTxt\meaning\rbTxtAlt}\ifeqforpaper\textbf{]}\fi
+}
+\newenvironment{multiChoice}[1]{\par
+ \if\nMarker\ec@Ques
+ \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3);
+ this.gotoNamedDest("\hintDestJS");}%
+ \fi
+ \vskip-\baselineskip % dps
+ \begin{oQuestion}{\if\nMarker\ec@Ques\hintDest
+ \ifisHint.h\fi\else\solnDest\fi}%
+ \begin{answers}[\solnDest]{#1}%
+}{%
+ \end{answers}
+ \end{oQuestion}
+}
+\ifecListing
+ \ifeq@proofing
+ \everyRespBoxTxt{\Ff\FfReadOnly\BG{}\BC{}}
+ \everyRespBoxMath{\Ff\FfReadOnly\BG{}\BC{}}\else
+ \everyRespBoxTxt{\BG{1 1 1}}\everyRespBoxMath{\BG{1 1 1}}\fi
+\else
+ \everyRespBoxTxt{\BG{1 1 1}}\everyRespBoxMath{\BG{1 1 1}}
+\fi
+\newenvironment{fillIn}{%
+ \def\RespBoxTxtOnBlur{ecOnBlurRespBox(retn, \exnoCard, \nMarker);}%
+ \begin{oQuestion}{\if\nMarker\ec@Ques\hintDest\else\solnDest\fi}%
+}{\end{oQuestion}}
+\def\ec@isHint{hint}
+\def\ec@isNoHint{nohint}
+\def\ec@HintsWarning{\PackageWarning{ecards}
+ {The use of \string\useHints\space and \string\useNoHints
+ \MessageBreak is prohibited, ignoring this use}}
+\def\ec@BadArgWarning{\PackageWarning{ecards}
+ {The argument `\ec@rgi' is not an acceptable option.\MessageBreak
+ Will use `hint' instead}}
+\def\ecInfoToSolns{\string\def\string\exnoCard{\exnoCard}%
+ \string\def\string\solndest{\solnDest}%
+ \expandafter\string\ec@thisHintOpt
+ \string\nMarkerSet{\ec@Hint}\string\defineSoln}
+\newenvironment{card}[1][\opts@ecNoHints]{\newpage\isQuestrue
+ \let\useHints\ec@HintsWarning\let\useNoHints\ec@HintsWarning
+ \edef\ec@rgi{#1}\ifx\ec@rgi\ec@isHint
+ \def\ec@thisHintOpt{\ecUseHints}\else
+ \ifx\ec@rgi\ec@isNoHint
+ \def\ec@thisHintOpt{\ecUseNoHints}\else
+ \def\ec@thisHintOpt{\ecUseHints}%
+ \ec@BadArgWarning
+ \fi
+ \fi
+ \xdef\ecLoc@lSt@te{\ec@rgi}%
+ \ec@thisHintOpt\nMarkerSet\ec@Ques
+ \def\eqexheader{\noindent}%
+ \renewcommand\exsllabelformat{\protect\noindent}%
+ \renewcommand\exrtnlabelformat{}%
+ \renewcommand\exsecrunhead{}%
+ \let\afterlabelhskip\@empty
+ \def\exersolnheadhook{\ecInfoToSolns}%
+ \begin{exercise}
+ \textBgColor{\@cardColor}%
+ \headCard
+}{%
+ \tailCard
+ \end{exercise}%
+ \ifnum\@panelconfig=0\relax\aftergroup\cardNaviBar\fi
+}
+\def\ecAfterQuesSkip#1{{\setlength{\@tempdima}{#1}%
+ \xdef\ec@fterQuesSkip{\the\@tempdima}}}
+\ecAfterQuesSkip{.25in}
+\def\ecQuesWidth#1{\def\ec@QuesWidth{#1}}
+\ecQuesWidth{.85\linewidth}
+\def\ecSetQuesWidth{\setlength{\@tempdima}{\ec@QuesWidth}%
+ \edef\ec@QuesWidth{\the\@tempdima}}
+\newcommand{\ecQUESTION}{\textbf{QUESTION}}
+\newcommand{\headCard}{%
+ \vspace*{\stretch{.1}}%
+ \begin{center}\ecSetQuesWidth
+ \Large\ecQUESTION\par\vspace*{\ec@fterQuesSkip}%
+ \begin{minipage}{\ec@QuesWidth}%
+ \large\noindent\ignorespaces
+}
+\newcommand{\tailCard}{%
+ \end{minipage}
+ \end{center}
+ \par\vspace{\stretch{2}}%
+}
+\newenvironment{response}{\solnexer@woparts[]} %dps
+ {\endsolnexer@woparts}
+\newif\ifisHint \isHintfalse
+\newenvironment{hint}{%
+ \isHinttrue
+ \if\@ecNoHints\ec@YES\textBgColor{\@hintColor}\headHint
+ \centering\noHintProvided\tailHint\expandafter\ec@comment@hint
+ \else\expandafter\ec@hint\fi}{%
+ \if\@ecNoHints\ec@YES\expandafter\endec@comment@hint
+ \else\expandafter\endec@hint\fi}
+\newcommand{\noHintProvided}{No hint provided for this question.}
+\newenvironment{ec@comment@hint}{\comment}{%
+ \endcomment
+ \ifnum\@panelconfig=0\relax
+ \insNaviBar{\hfill\hintSoln\ \hintNextCard\ %
+ \PrevCard\ \ToggleOrder\hfill}\fi
+ \newpage\nMarkerSet{\ec@Soln}\noindent\hypertarget{\solndest}{}%
+}
+\newenvironment{ec@hint}{%
+ \textBgColor{\@hintColor}%
+ \headHint
+}{%
+ \tailHint
+ \ifnum\@panelconfig=0\relax
+ \insNaviBar{\hfill\hintSoln\ \hintNextCard\ %
+ \PrevCard\ \ToggleOrder\hfill}\fi
+ \newpage\nMarkerSet{\ec@Soln}\noindent\hypertarget{\solndest}{}%
+}
+\def\ecAfterHintSkip#1{{\setlength{\@tempdima}{#1}%
+ \xdef\ec@fterHintSkip{\the\@tempdima}}}
+\ecAfterHintSkip{.25in}
+\def\ecHintWidth#1{\def\ec@HintWidth{#1}}
+\ecHintWidth{.85\linewidth}
+\def\ecSetHintWidth{\setlength{\@tempdima}{\ec@HintWidth}%
+ \edef\ec@HintWidth{\the\@tempdima}}
+\newcommand{\ecHINT}{\textbf{HINT}}
+\newcommand{\headHint}{%
+ \vspace*{\stretch{.1}}%
+ \begin{center}\ecSetHintWidth
+ \Large\ecHINT\par\vspace*{\ec@fterHintSkip}%
+ \begin{minipage}{\ec@HintWidth}%
+ \large\noindent\ignorespaces
+}
+\newcommand{\tailHint}{%
+ \end{minipage}
+ \end{center}
+ \par\vspace{\stretch{2}}%
+}
+\newenvironment{answer}{%
+ \textBgColor{\@solnColor}%
+ \headAnswer
+}{\tailAnswer}
+\def\ecAfterAnsSkip#1{{\setlength{\@tempdima}{#1}%
+ \xdef\ec@fterAnsSkip{\the\@tempdima}}}
+\ecAfterAnsSkip{.25in}
+\def\ecAnsWidth#1{\def\ec@AnsWidth{#1}}
+\ecAnsWidth{.85\linewidth}
+\def\ecSetAnsWidth{\setlength{\@tempdima}{\ec@AnsWidth}%
+ \edef\ec@AnsWidth{\the\@tempdima}}
+\newcommand{\ecANS}{\textbf{ANSWER}}
+\newcommand{\headAnswer}{%
+ \vspace*{\stretch{.1}}%
+ \begin{center}\ecSetAnsWidth
+ \Large\ecANS\par\vspace*{\ec@fterAnsSkip}%
+ \begin{minipage}[t]{\ec@AnsWidth}%
+ \large\noindent\ignorespaces}
+\newcommand{\tailAnswer}{%
+ \end{minipage}
+ \end{center}
+ \vspace*{\stretch{2}}
+}
+\newcommand\iconWidth{40pt}\newcommand\iconHeight{15pt}
+\def\ecHomePage{\hyper@normalise\ec@HomePage}
+\def\ec@HomePage#1{\def\@ecHomePage{#1}}
+\ecHomePage{http://www.math.uakron.edu/~dpstory/acrotex.html}
+\def\ecLogo#1{\def\@ecLogo{#1}}
+\ecLogo{\includegraphics[scale=.4]{graphics/uakron}}
+\def\ecLogoLink{\hyper@normalise\ec@LogoLink}
+\def\ec@LogoLink#1{\def\@ecLogoLink{#1}}
+\let\@ecLogoLink\@empty
+\newcommand{\randomizedMsg}{The cards will be delivered
+ to you in random order.}
+\newcommand{\nonrandomizedMsg}{The cards will be delivered
+ to you in their natural order.}
+\newcommand{\toggleRandomizeTU}{%
+ Click to toggle between random and natural order.}
+\def\makeesc#1{\catcode`#1=0\relax}
+\begin{defineJS}{\fsJS}
+if (app.viewerVersion < 5.0)
+ app.fullscreen = !app.fullscreen
+else {
+ app.fs.cursor = cursor.visible;
+ app.fs.defaultTransition = "";
+ app.fs.useTimer = false;
+ app.fs.isFullScreen = !app.fs.isFullScreen;
+}
+\end{defineJS}
+\newcommand\noHintJSAction{}
+\def\NaviIconActionJS#1{\ifecListing
+ \if\nMarker\ec@Ques\else
+ this.gotoNamedDest("\quesDestJS");\fi
+ \else
+ #1;
+ \fi
+}
+\def\ec@defineLabel#1#2#3{\def#1{#2 #3}}
+\newcommand{\ecSolnLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@SolnLabel{#1}{#2}}
+\ecSolnLabel{Soln}
+\newcommand{\ecHintLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HintLabel{#1}{#2}}
+\ecHintLabel{Hint}
+\newcommand{\ecNextLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@NextLabel{#1}{#2}}
+\ecNextLabel{Next}
+\newcommand{\ecPrevLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@PrevLabel{#1}{#2}}
+\ecPrevLabel{Prev}
+\newcommand{\ecHintNextLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HintNextLabel{#1}{#2}}
+\ecHintNextLabel{Next}
+\newcommand{\ecHintSolnLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HintSolnLabel{#1}{#2}}
+\ecHintSolnLabel{Soln}
+\newcommand{\ecBeginLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@BeginLabel{#1}{#2}}
+\ecBeginLabel{Begin}
+\newcommand{\ecHomeLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HomeLabel{#1}{#2}}
+\ecHomeLabel{Home}
+\newcommand{\ecFinHomeLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@FinHomeLabel{#1}{#2}}
+\ecFinHomeLabel{Home}
+\newcommand{\ecFSLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@FSLabel{#1}{#2}}
+\ecFSLabel{FS}
+\newcommand{\ecCloseLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@CloseLabel{#1}{#2}}
+\ecCloseLabel{Close}
+\newcommand{\ecRandomLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@RandomLabel{#1}{#2}}
+\ecRandomLabel{Random}
+\newNaviIcon[j]{\Soln}\iconWidth\iconHeight{\ec@SolnLabel}
+ {\NaviIconActionJS{this.gotoNamedDest("\solnDest")}}
+\newNaviIcon[j]{\Hint}\iconWidth\iconHeight{\ec@HintLabel}
+ {\if\@ecNoHints\ec@YES\noHintJSAction\else
+ \NaviIconActionJS{this.gotoNamedDest("\hintDestJS")}\fi} % dps
+\newNaviIcon[j]{\NextCard}\iconWidth\iconHeight{\ec@NextLabel}
+ {\NaviIconActionJS{getNextCard()}}
+\newNaviIcon[j]{\PrevCard}\iconWidth\iconHeight{\ec@PrevLabel}
+ {\NaviIconActionJS{getPrevCard()}}
+\newNaviIcon[j]{\hintNextCard}\iconWidth\iconHeight
+ {\ec@HintNextLabel}{getNextCard();}
+\newNaviIcon[j]{\hintSoln}\iconWidth\iconHeight{\ec@HintSolnLabel}
+ {\NaviIconActionJS{this.gotoNamedDest("\solndest")}}
+\newNaviIcon[j]{\Begin}\iconWidth\iconHeight
+ {\ec@BeginLabel}{beginECards();}
+\newNaviIcon[l]{\Home}\iconWidth\iconHeight{\ec@HomeLabel}
+ {\ifnum\arabic{page}=1\relax\def\ec@next{\href{\@ecHomePage}}\else
+ \def\ec@next{\hyperlink{page.1}}\fi\ec@next}
+\newNaviIcon[j]{\Finished}\iconWidth\iconHeight{\ec@FinHomeLabel}
+ {resetToFirstPage();}
+\newNaviIcon[j]{\FullScreen}\iconWidth\iconHeight
+ {\ec@FSLabel}{\fsJS}
+\newNaviIcon[j]{\Close}\iconWidth\iconHeight{\ec@CloseLabel}
+ {closeCards=true; app.execMenuItem("Close")}
+\def\ec@CB@toggleOrder{%
+ \checkBox[\A{\JS{toggleOrder();}}\DV{\cbInitState}\V{\cbInitState}%
+ \TU{\toggleRandomizeTU}\textSize{0}\textColor{1 0 0}
+ \BC{0 0 .8}]{eccbtoggleorder}{9bp}{9bp}{randomOrder}}
+\providecommand{\nopNaviIcon}[4]{%
+ \def#1{{\setlength{\fboxsep}{0pt}%
+ \web@colorbox@w@transparency{\@menuBgColor}%
+ {\parbox[c][#3][c]{#2}%
+ {\normalsize\centering\color{\@menucolor}#4}}%
+ }}%
+}
+\nopNaviIcon{\fpToggleOrder}\iconWidth\iconHeight
+ {\ec@RandomLabel\space\ec@CB@toggleOrder}
+\nopNaviIcon{\ToggleOrder}\iconWidth\iconHeight
+ {\footnotesize\ec@CB@toggleOrder}
+\edef\@@Logo{\if\@memLogo\ec@YES\relax
+ \noexpand\unhcopy\noexpand\Logo\else\noexpand\@ecLogo\fi}
+\newcommand\iconWidthPanel{28pt}
+\newcommand\panelGrpWidth{57pt}
+\ifnum\@panelconfig>0\relax
+ \renewcommand\panelNaviGroup {%
+ \def\iconWidth{\iconWidthPanel}%
+ \ifnum\thepage=1\relax
+ \parbox[c]{\panelGrpWidth}
+ {%
+ \Begin\hfill\FullScreen\\
+ \Close\hfill\Home\\
+ \let\iconWidth\linewidth
+ \fpToggleOrder
+ }%
+ \else
+ \parbox[c]{\panelGrpWidth}
+ {%
+ {\ifecListing\else\if\nMarker\ec@Ques
+ \if\@ecNoHints\ec@YES
+ \navibarTextColor{lightblue}\fi
+ \else
+ \navibarTextColor{lightblue}\fi\fi\Hint}\hfill
+ {\if\nMarker\ec@Soln
+ \navibarTextColor{lightblue}\fi\Soln}\\
+ \NextCard\hfill\PrevCard\\
+ \ToggleOrder\hfill\Finished
+ }%
+ \fi
+ }
+ \newbox\Logo
+ \if\@memLogo\ec@YES\relax
+ \AtBeginDocument{\global\setbox\Logo=\hbox{\@ecLogo}}%
+ \fi
+\def\raiseLogoBy#1{{\setlength\@tempdima{#1}%
+ \xdef\r@iseLogoBy{\the\@tempdima}}}\raiseLogoBy{0pt}
+ \buildpanel{\raisebox{\r@iseLogoBy}{\ifx\@ecLogoLink\@empty\@@Logo
+ \else\href{\@ecLogoLink}{\@@Logo}\fi}%
+ \par\vspace{\stretch{1}}%
+ \rotatebox{-90}{\aebLogo}%
+ \par\vspace{\stretch{1}}%
+ \panelNaviGroup
+ }
+ \def\defineSoln{\newNaviIcon[j]{\Soln}\iconWidth\iconHeight
+ {\ec@SolnLabel}{%
+ \NaviIconActionJS{this.gotoNamedDest("\solndest")}}%
+ \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3);
+ this.gotoNamedDest("\solndest");}%
+ }
+\else
+ \def\cardNaviBar{\insNaviBar{\hfill
+ \if\@ecNoHints\ec@NO\Hint\ \fi\Soln\ \NextCard\
+ \PrevCard\ \ToggleOrder\ \Home\hfill}}
+ \def\defineSoln{\newNaviIcon[j]{\Soln}\iconWidth\iconHeight
+ {\ec@SolnLabel}{%
+ \NaviIconActionJS{this.gotoNamedDest("\solndest")}}%
+ \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3);
+ this.gotoNamedDest("\solndest");}%
+ }
+\fi
+\newcommand{\pressBeginMsg}{Press the \eqbs\eqbs"Begin\eqbs\eqbs"
+ button to begin viewing the cards.}
+\ifecListing\else
+\thisPageAction{\JS{}}{\JS{if (!closeCards&&!beginPressed){\jsR\jsT
+ var b=app.setTimeOut("this.pageNum=0;
+ app.alert(pressBeginMsg);",50);\jsR}}}
+\fi
+\let\importdljs=y
+\begin{insDLJS}[isCardloaded]{flashcrd}{Flash Card JS}
+var isCardloaded=true;
+var closeCards=false;
+var beginPressed=false;
+var maxNumberCards = Math.pow(10,Math.ceil(%
+Math.LOG10E*Math.log(\theNumCards)));
+var aCardsNaturalOrder=new Array();
+var aCardsRandomOrder=new Array();
+var aCardsViewOrder;
+var ptrCards=0;
+var cardsFinished = "\CARDSFINISHED";
+var pressBeginMsg = "\pressBeginMsg";
+var isRandomized=\israndomized;
+function getNextCard() {
+ numCards = \theNumCards;
+ if ( ptrCards == numCards ) {
+ app.alert(cardsFinished,3);
+ resetToFirstPage();
+ } else {
+ ptrCards+=1;
+ this.gotoNamedDest("qex."+aCardsViewOrder[ptrCards]);
+ }
+}
+function getPrevCard() {
+ if ( ptrCards <= 1 ) {
+ resetToFirstPage();
+ } else {
+ ptrCards-=1;
+ this.gotoNamedDest("qex."+aCardsViewOrder[ptrCards]);
+ }
+}
+function ecOnBlurRespBox (retn, exnoCard, nMarker) {
+ if (retn != null) {
+ if (retn) {
+ app.alert(\eqsqrtmsg,3);
+ var dest = "ex" + exnoCard + ".s"; // dps
+ this.gotoNamedDest(dest);
+ } else {
+ app.alert(\eqsqwgmsg,3);
+ if (nMarker==0) {
+ var dest = "ex." + exnoCard; // dps
+ this.gotoNamedDest(dest);
+ }
+ else {
+ var dest = "ex" + exnoCard + ".s"; // dps
+ this.gotoNamedDest(dest);
+ }
+ }
+ } else {
+ var str = event.target.value.toString();
+ if (str.replace(/\s/g,"") == "")
+ event.target.strokeColor = \defaultColorJSDef; // dps
+ }
+}
+function beginECards() {
+ PrepareViewingOrder();
+ beginPressed=true;
+ getNextCard();
+ var f, g, bState;
+ f=this.getField("eccbtoggleorder");
+ bState=f.isBoxChecked(0);
+ this.resetForm();
+ f.checkThisBox(0,bState);
+ for (var card=1; card<=\theNumCards; card++) {// dps
+ f = this.getField("obj.ex"+card);
+ if ( f != null ) {
+ g = f.getArray();
+ for (var i = 0; i < g.length; i++)
+ g[i].strokeColor = \defaultColorJSDef; // dps
+ }
+ }
+}
+function PrepareViewingOrder() {
+ ptrCards=0;
+ var i, rand;
+ for (i=0; i<=\theNumCards; i++) {
+ aCardsNaturalOrder[i]=i;
+ aCardsRandomOrder[i]=i;
+ }
+ for (i=1; i<=\theNumCards; i++) {
+ var rand = Math.random();
+ rand *= maxNumberCards;
+ rand = Math.ceil(rand);
+ rand = rand \% \theNumCards;
+ rand += 1;
+ temp = aCardsRandomOrder[i];
+ aCardsRandomOrder[i]=aCardsRandomOrder[rand];
+ aCardsRandomOrder[rand]=temp;
+ }
+ aCardsViewOrder=(isRandomized)?aCardsRandomOrder:aCardsNaturalOrder;
+}
+function toggleOrder() {
+ isRandomized=!isRandomized;
+ if (aCardsNaturalOrder.length==0) PrepareViewingOrder();
+ if (isRandomized) {
+ for (var i=1; i<=\theNumCards; i++)
+ if (aCardsRandomOrder[i]==ptrCards) break;
+ ptrCards=i;
+ aCardsViewOrder=aCardsRandomOrder;
+ app.alert("\randomizedMsg");
+ } else {
+ ptrCards=aCardsViewOrder[ptrCards];
+ aCardsViewOrder=aCardsNaturalOrder;
+ app.alert("\nonrandomizedMsg");
+ }
+}
+function resetToFirstPage() {
+ this.gotoNamedDest("page.1");
+ beginPressed=false;
+}
+\end{insDLJS}
+\ifecListing\input{ecardslist.def}\fi
+\if\@ecCustom\ec@YES\InputIfFileExists{ecard.cus}{}{}\fi
+\endinput
+%%
+%% End of file `ecards.sty'.
diff --git a/texmf-dist/tex/latex/ecards/ecardslist.def b/texmf-dist/tex/latex/ecards/ecardslist.def
new file mode 100644
index 00000000..a5a4c6cb
--- /dev/null
+++ b/texmf-dist/tex/latex/ecards/ecardslist.def
@@ -0,0 +1,91 @@
+%%
+%% This is file `ecardslist.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ecards.dtx (with options: `copyright,listing')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% ecards.sty package, %%
+%% Copyright (C) 1999-2016 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcounter{ecCnt}
+\let\exsolafter\@empty
+\eqexerskip{0pt}
+\newenvironment{listing@card}[1][\opts@ecNoHints]{%
+ \isQuestrue\let\useHints\ec@HintsWarning
+ \let\useNoHint\ec@HintsWarning\edef\ec@rgi{#1}%
+ \ifx\ec@rgi\ec@isHint
+ \def\ec@thisHintOpt{\ecUseHints}\else
+ \ifx\ec@rgi\ec@isNoHint
+ \def\ec@thisHintOpt{\ecUseNoHints}\else
+ \def\ec@thisHintOpt{\ecUseHints}\ec@BadArgWarning
+ \fi\fi
+ \ec@thisHintOpt\nMarkerSet{\ec@Ques}%
+ \stepcounter{ecCnt}%
+ \def\eqexheader{\noindent}%
+ \renewcommand\exsllabelformat{\protect\noindent}%
+ \renewcommand\exrtnlabelformat{}%
+ \renewcommand\exsecrunhead{}%
+ \let\afterlabelhskip\@empty
+ \def\exersolnheadhook{\ecInfoToSolns}%
+ \begin{exercise}%
+ \textBgColor{\@cardColor}%
+ \headCard
+}{%
+ \tailCard
+ \end{exercise}%
+}
+\newcommand{\listing@headCard}{\ifeqforpaper
+ \makebox[0pt][r]{\textbf{\arabic{ecCnt}.\thinspace}}\else
+ \makebox[0pt][r]{\textbf{\hyperlink{ex.\exnoCard}%
+ {\arabic{ecCnt}.\thinspace}}}\fi\ignorespaces}
+\newcommand{\listing@tailCard}{\removelastskip\par} % dps
+\def\setSolutionsAfterSkip{\expandafter
+ \def\expandafter\solutionsafterSkip
+ \expandafter{\solutionsafterSkip\kern0pt}}
+\AtBeginDocument{\setSolutionsAfterSkip}
+\newenvironment{listing@response}
+ {\solutionsafterSkip\solnexer@woparts[]}{\endsolnexer@woparts}
+\newenvironment{listing@hint}{%
+ \textBgColor{\@hintColor}%
+ \headHint
+}{\tailHint}
+\newcommand{\listing@headHint}{%
+ \par\textit{Hint}:\space\ignorespaces}
+\newcommand{\listing@tailHint}{}
+\newenvironment{listing@answer}{%
+ \textBgColor{\@solnColor}%
+ \headAnswer
+}{\tailAnswer}
+\newcommand{\listing@headAnswer}{%
+ \par\textit{Answer}:\space\ignorespaces}
+\newcommand{\listing@tailAnswer}{}
+\def\ec@redefForListing{%
+ \let\card\listing@card
+ \let\endcard\endlisting@card
+ \let\headCard\listing@headCard
+ \let\tailCard\listing@tailCard
+ \let\response\listing@response % dps
+ \let\endresponse\endlisting@response % dps
+ \let\headhint\listing@hint
+ \let\endhint\listing@endhint
+ \let\headHint\listing@headHint
+ \let\tailHint\listing@tailHint
+ \let\answer\listing@answer
+ \let\endanswer\listing@endanswer
+ \let\headAnswer\listing@headAnswer
+ \let\tailAnswer\listing@tailAnswer
+}
+\AtBeginDocument{\ec@redefForListing}
+\endinput
+%%
+%% End of file `ecardslist.def'.
diff --git a/texmf-dist/tex/latex/fc-arith/fc_arith.sty b/texmf-dist/tex/latex/fc-arith/fc_arith.sty
new file mode 100644
index 00000000..0d0f54b6
--- /dev/null
+++ b/texmf-dist/tex/latex/fc-arith/fc_arith.sty
@@ -0,0 +1,1887 @@
+%%
+%% This is file `fc_arith.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fc_arith.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% fc_arith.sty package, %%
+%% Copyright (C) 1999-2017 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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.2 of %%
+%% the License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+\ProvidesPackage{fc_arith}
+ [2017/01/16 v1.0f fc_arith: PDF flash cards for arithmetic drill (dps)]
+\RequirePackage{xkeyval}
+\RequirePackage{ifxetex}
+\RequirePackage{calc}
+\let\fc@YES=y \let\fc@NO=n
+\DeclareOptionX{allownegsub}{\def\fcAllowNegSub{true}}
+\def\fcAllowNegSub{false}
+\DeclareOptionX{nomenu}{\let\fc@usemenu\fc@NO}
+\let\fc@usemenu\fc@YES
+\DeclareOptionX{operations}[add,sub,mul,div]{\def\fc@operations{#1}}
+\def\fc@operations{add,sub,mul,div}
+\DeclareOptionX{showkeypadlink}{\let\fc@keypadlink\fc@YES}
+\let\fc@keypadlink\fc@NO
+\DeclareOptionX{notimedscores}{%
+ \def\fcTimedScores{false}
+ \let\fc@timedscores\fc@NO
+}
+\def\fcTimedScores{true}
+\let\fc@timedscores\fc@YES
+\ProcessOptionsX
+\RequirePackage{eforms}[2017/01/15]
+\RequirePackage{popupmenu}
+\newdimen\fcWidth
+\define@boolkey{fcopera}{add}[true]{}
+\define@boolkey{fcopera}{sub}[true]{}
+\define@boolkey{fcopera}{mul}[true]{}
+\define@boolkey{fcopera}{div}[true]{}
+\edef\fc@expand{\noexpand\setkeys{fcopera}{\fc@operations}}\fc@expand
+\define@key{fcarithparams}{addT}[{[0,100]}]{\def\fcAddTParams{#1}}
+\define@key{fcarithparams}{addB}[{[0,100]}]{\def\fcAddBParams{#1}}
+\define@choicekey{fcarithparams}{addDecT}[\val\nr]{none,1,2}[none]{%
+ \edef\fcaddDecT{\nr}}{}
+\define@choicekey{fcarithparams}{addDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcaddDecB{\nr}}{}
+\define@key{fcarithparams}{subT}[{[0,100]}]{\def\fcSubTParams{#1}}
+\define@key{fcarithparams}{subB}[{[0,100]}]{\def\fcSubBParams{#1}}
+\define@choicekey{fcarithparams}{subDecT}[\val\nr]{none,1,2}[none]{%
+ \edef\fcsubDecT{\nr}}{}
+\define@choicekey{fcarithparams}{subDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcsubDecB{\nr}}{}
+\define@key{fcarithparams}{mulT}[{[0,100]}]{\def\fcMulTParams{#1}}
+\define@key{fcarithparams}{mulB}[{[0,10]}]{\def\fcMulBParams{#1}}
+\define@choicekey{fcarithparams}{mulDecT}[\val\nr]{none,1,2}[none]{%
+ \edef\fcmulDecT{\nr}}{}
+\define@choicekey{fcarithparams}{mulDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcmulDecB{\nr}}{}
+\define@key{fcarithparams}{divQ}[{[0,10]}]{\def\fcDivQParams{#1}}
+\define@key{fcarithparams}{divB}[{[0,10]}]{\def\fcDivBParams{#1}}
+\define@choicekey{fcarithparams}{divDecQ}[\val\nr]{none,1,2}[none]{%
+ \edef\fcdivDecQ{\nr}}{}
+\define@choicekey{fcarithparams}{divDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcdivDecB{\nr}}{}
+\setkeys{fcarithparams}{addT,addB,subT,subB,mulT,mulB,divQ,divB,%
+ addDecT,addDecB,subDecT,subDecB,mulDecT,mulDecB,divDecQ,divDecB}
+\newcommand{\DeclareArithParams}[1]{\setkeys{fcarithparams}{#1}}
+\@onlypreamble\DeclareArithParams
+\newcommand{\timeUpMsg}{Your Time is UP!}
+\newcommand{\rightMsg}{Right!}
+\newcommand{\wrongMsg}{Wrong!}
+\newcommand{\startAgainMsg}{Start Again}
+\newcommand{\newCardMsg}{New Card}
+\newcommand{\toggleKeypad}{Toggle Keypad}
+\newcommand{\operation}{Operation}
+\newcommand{\numCorrect}{Number Correct}
+\newcommand{\numAttempted}{Number Attempted}
+\newcommand{\percentCorrect}{Percentage Correct}
+\newcommand{\timedScores}{Timed Scores}
+\newcommand{\fmtAnswer}{Answer:}
+\newcommand{\kpDec}{.}
+\newcommand{\kpMinus}{-}
+\newcommand{\kpBack}{Back}
+\newcommand{\kpEnter}{Enter}
+\newcommand{\fcNoTiming}{No Timing}
+\newcommand{\fcAddition}{Addition}
+\newcommand{\fcSubtraction}{Subtraction}
+\newcommand{\fcMultiplication}{Multiplication}
+\newcommand{\fcDivision}{Division}
+\newcommand{\fcSettings}{Settings}
+\newcommand{\fcSettingsColor}{0 0 0}
+\newcommand{\fcSettingsTooltip}{Click for a dropdown menu
+ of menu choices}
+\newcommand{\FCMenu}{\smash{\hbox{\pushButton[\textSize{8}\H{O}
+ \textColor{\fcSettingsColor}
+ \CA{\fcSettings\space}\S{S}\BC{}\BG{}\TU{\fcSettingsTooltip}
+ \A{\JS{processFcMenu();}}]{fcSettingsBtn}{}{11bp}\kern0pt}}}
+ \ifx\fc@usemenu\fc@YES\lheader{\FCMenu}\rheader{}\else
+\lheader{}\rheader{}\fi
+\newenvironment{MenuFC}{\begin{popupmenu}{fcMenu}}
+{\end{popupmenu}}
+\def\fcMenu{// No menu items selected in the MenuFC environment}
+\def\fcOptionsMenuItem{\item{title=\fcOptionsMenuItemTitle,return=0}}
+\newcommand\fcOptionsMenuItemTitle{Options}
+\def\fcToggleKeypadMenuItem{\item{title=\fcToggleKeypadMenuItemTitle,%
+ marked=false,return=1}}
+\newcommand\fcToggleKeypadMenuItemTitle{Toggle Keypad}
+\def\fcTouchKPMenuItem{\item{title=\fcTouchKPMenuItemTitle,%
+ marked=false,enabled=false,return=3}}
+\newcommand\fcTouchKPMenuItemTitle{Touch Friendly Keypad}
+\def\fcMouseKPMenuItem{\item{title=\fcMouseKPMenuItemTitle,%
+ marked=true,enabled=false,return=4}}
+\newcommand\fcMouseKPMenuItemTitle{Mouse Friendly Keypad}
+\def\fcAboutFC{\item{title=\fcAboutFCTitle, return=2}}
+\newcommand\fcAboutFCTitle{About PDF Flash Cards}
+\newcommand{\tBGNoBorder}{\BC{}\BG{}\autoCenter{n}\textSize{0}
+ \textColor{1 0 0}\Ff\FfReadOnly}
+\newcommand{\tBGNoBorderI}{\BC{}\BG{}\autoCenter{n}\textSize{0}
+ \textColor{0 0 0}}
+\newcommand{\cBGNoBorder}{\Q{1}\BC{}\BG{}\autoCenter{n}\textSize{0}
+ \textColor{0 0 0}\BG{.75 .75 .75}\Ff\FfReadOnly}
+\newcommand{\cBGBorder}{\BC{0 0 0}\BG{.75 .75 .75}\autoCenter{n}
+ \textSize{0}\textColor{0 0 0}}
+\newcommand{\myNumPadI}{\F\FHidden\autoCenter{n}\textSize{8}
+ \textFont{\fieldFont}\S{S}}
+\newcommand{\setDimOf}[3]{\@namedef{widthOf#1}{#2}%
+ \@namedef{heightOf#1}{#3}}
+\newcommand{\monoSpaceFont}{CoBo}
+\newcommand{\fieldFont}{Helv}
+\setDimOf{top}{1in}{0.62in}
+\setDimOf{operation}{.38in}{.62in}
+\setDimOf{bottom}{1in}{0.62in}
+\newcommand{\arithProb}{\mbox{\vbox{\offinterlineskip
+ \hbox{\hspace*{\@nameuse{widthOfoperation}}%
+ \textField[\presets{\tBGNoBorder}
+ \textFont{\monoSpaceFont}\Q{2}]{top}%
+ {\@nameuse{widthOf\Fld@name}}{\@nameuse{heightOf\Fld@name}}%
+ }%
+ \hbox{%
+ \textField[\presets{\tBGNoBorder}
+ \textSize{25}\Q{1}]{operation}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}%
+ \textField[\presets{\tBGNoBorder}
+ \textFont{\monoSpaceFont}\Q{2}]{bottom}%
+ {\@nameuse{widthOf\Fld@name}}{\@nameuse{heightOf\Fld@name}}%
+ }}}%
+}
+\setDimOf{alertbox}{.88in}{.62in}
+\setDimOf{StartAgain}{0.88in}{0.62in}
+\setDimOf{result}{1.38in}{0.62in}
+\setDimOf{NewProblem}{0.88in}{0.62in}
+\newcommand{\alertbox}[1][]{\hbox{\textField[\presets{\tBGNoBorder}
+ \textSize{0}#1]{alertbox}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+\@ifundefined{if@useacrobat}{\let\placeImageOpts\@empty}
+{\def\placeImageOpts{\FB{false}\I{null}\TP{2}}}
+\newcommand{\startAgain}[1][]{\hbox{%
+ \expandafter\pushButton\expandafter[\placeImageOpts
+ \presets{\tBGNoBorderI}\textFont{\fieldFont}\S{S}
+ \textSize{12}\CA{\startAgainMsg}\AC{\startAgainMsg}#1
+ \A{\JS{startAgain();}}]{StartAgain}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+\newcommand{\inputRegion}[1][]{\hbox{\textField[\presets{\cBGNoBorder}
+ \Ff{-\FfReadOnly}\Q{2}#1\AA{\AAValidate{validateResult();}
+ \AAKeystroke{fcNumber_Keystroke(numDecimals,1,0,0,"",true);}
+ \AAFormat{try{%
+ fcNumber_Format(numDecimals,1,0,0,"",true);}catch(e){}}}
+ ]{result}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+\newcommand{\newCard}[1][]{\hbox{%
+ \expandafter\pushButton\expandafter[\placeImageOpts
+ \textSize{12}\presets{\tBGNoBorderI}\textFont{\fieldFont}\S{S}
+ \CA{\newCardMsg}\AC{\newCardMsg}#1\A{\JS{newCard();}}
+ ]{NewProblem}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+\setDimOf{TimeDelay}{0.9in}{0.24in}
+\setDimOf{ansregion}{.87in+10bp}{.24in}
+\setDimOf{ChooseOperation}{1.38in-10bp}{0.24in}
+\edef\isReadOnlyTiming{\ifx\fc@timedscores\fc@NO
+ \noexpand\Ff{\FfReadOnly}\fi}
+\newcommand{\cbTimingToolip}{Select a time challenge
+ from the dropdown menu}
+\newcommand{\cbTiming}[1][]{\hbox{%
+ \expandafter\comboBox\expandafter[\isReadOnlyTiming
+ \presets{\cBGBorder}\textFont{\fieldFont}\V{600000}\DV{600000}#1
+ \TU{\cbTimingToolip}\AA{\AAKeystroke{%
+ if (!event.willCommit) timelimit=event.changeEx;}}
+ ]{TimeDelay}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}{%
+ [(600000)(\fcNoTiming)][(30)(30 sec)][(25)(25 sec)][(20)(20 sec)]%
+ [(15)(15 sec)][(10)(10 sec)][(5)(\space\space 5 sec)]}}%
+}
+\newcommand{\ansField}[1][]{\hbox{\textField[\presets{\cBGNoBorder}\Q{2}
+ #1\AA{\AAFormat{%
+ if (event.value!="") {\r
+ try{fcNumber_Format(numDecimals,1,0,0,"",true);\r
+ event.value=("\fmtAnswer\space")+event.value;}catch(e){};}}}
+ ]{ansregion}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}%
+}
+\let\fc@addAbbr=a\let\fc@subAbbr=s
+\let\fc@mulAbbr=m\let\fc@divAbbr=d
+\newcommand{\cbOpDefault}[1]{\def\cbOpDef@ult{#1}%
+ \if\cbOpDef@ult\fc@addAbbr\else\if\cbOpDef@ult\fc@subAbbr\else
+ \if\cbOpDef@ult\fc@mulAbbr\else\if\cbOpDef@ult\fc@divAbbr\else
+ \ifKV@fcopera@add\def\cbOpDef@ult{a}\else
+ \ifKV@fcopera@sub\def\cbOpDef@ult{s}\else
+ \ifKV@fcopera@mul\def\cbOpDef@ult{m}\else
+ \ifKV@fcopera@div\def\cbOpDef@ult{d}\else
+ \PackageError{fc_arith}{There are no selected arithmetic
+ operations}{}\fi\fi\fi\fi
+ \PackageWarning{fc_arith}{Value of \string\cbOpDefault\space
+ not recognized,\MessageBreak will use `\cbOpDef@ult'}%
+ \fi\fi\fi\fi
+}
+\cbOpDefault{a}
+\newcommand{\cbOperationTooltip}{Choose an arithmetic operation
+ to practice}
+\newcommand{\cbOperation}[1][]{%
+ \edef\cbvOptChoices{\ifKV@fcopera@add[(a)(\fcAddition)]\fi
+ \ifKV@fcopera@sub[(s)(\fcSubtraction)]\fi
+ \ifKV@fcopera@mul[(m)(\fcMultiplication)]\fi
+ \ifKV@fcopera@div[(d)(\fcDivision)]\fi}%
+ \hbox{\comboBox[\presets{\cBGBorder}\textFont{\fieldFont}
+ \TU{\cbOperationTooltip}
+ \V{\cbOpDef@ult}\DV{\cbOpDef@ult}#1]{ChooseOperation}%
+ {\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}{\cbvOptChoices}}%
+}
+\newcommand{\szNum}{14bp}
+\newcommand\toggleKeyPadBtnColor{0 0 1}
+\newcommand\toggleKeyPadBtnTooltip{Click to toggle keypad, shift-click
+ to toggle between mouse and touch keypads}
+\def\toggleKeyPadBtn{\pushButton[\textSize{6}\CA{\toggleKeypad}\H{O}
+ \TU{\toggleKeyPadBtnTooltip}\textColor{\toggleKeyPadBtnColor}
+ \S{S}\BC{}\BG{}\A{\JS{%
+ if (event.shift)\r\t
+ if (bTouchFriendly)\r\t\t
+ makeMouseFriendly();\r\t
+ else\r\t\t
+ makeTouchFriendly();\r\t
+ else\r\t
+ ToggleKeyPad();\r
+}}]{toggleKeyPadBtn}{}{8bp}}%
+\newcommand{\Keypad}{%
+ \vbox{\offinterlineskip\ifx\fc@keypadlink\fc@YES
+ \setlength{\fcWidth}{4bp+\szNum*4}%
+ \hbox to\fcWidth{\hfill\toggleKeyPadBtn\hfill}\vskip2bp\fi
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{7}
+ \A{\JS{addDigit(7)}}]{num7}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{8}
+ \A{\JS{addDigit(8)}}]{num8}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{9}
+ \A{\JS{addDigit(9)}}]{num9}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{4}
+ \A{\JS{addDigit(4)}}]{num4}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{5}
+ \A{\JS{addDigit(5)}}]{num5}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{6}
+ \A{\JS{addDigit(6)}}]{num6}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{1}
+ \A{\JS{addDigit(1)}}]{num1}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{2}
+ \A{\JS{addDigit(2)}}]{num2}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{3}
+ \A{\JS{addDigit(3)}}]{num3}{\szNum}{\szNum}}\olBdry
+ \hbox{\edef\w@dj{\ifmakeXasPD1bp\else\ifxetex-1bp\else-1bp\fi\fi}%
+ \pushButton[\presets{\myNumPadI}\CA{0}
+ \A{\JS{addDigit(0)}}]{num0}{\w@dj+\szNum*2}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{\kpDec}
+ \A{\JS{addDigit("Dec")}}]{Dec}{\szNum}{\szNum}\olBdry
+ \smash{\vbox{\edef\w@dj{\ifmakeXasPD1bp\else\ifxetex-1bp\else-1bp\fi\fi}%
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpMinus}
+ \A{\JS{addDigit("Minus")}}
+ ]{Minus}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpBack}
+ \textSize{0}\A{\JS{addDigit("Back")}}
+ ]{Back}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpEnter}
+ \textSize{0}\A{\JS{addDigit("Enter")}}
+ ]{Enter}{\szNum}{\w@dj+\szNum*2}}%
+ }}}}%
+}
+\def\fcSep{\quad}
+\setDimOf{fcSF}{0.37in}{0.25in}
+\newcommand{\statsFieldOpColor}{1 0 0}
+\newcommand{\statsFieldColor}{blue}
+\newcommand{\timeScoresTooltip}{Click to see how points are assigned}
+\newcommand{\statsFields}{%
+\ifKV@fcopera@add
+ \vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}\V{+}\DV{+}\Q{1}
+ ]{AddScore1}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore2}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore3}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore4}{\widthOffcSF}{\heightOffcSF}}%
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore5}{\widthOffcSF}{\heightOffcSF}}%
+\fi
+ }\fcSep
+\fi
+\ifKV@fcopera@sub
+\vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}\V{-}\DV{-}\Q{1}
+ ]{SubScore1}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore2}%
+ {\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore3}%
+ {\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore4}{\widthOffcSF}%
+ {\heightOffcSF}}
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore5}{\widthOffcSF}%
+ {\heightOffcSF}}
+\fi
+ }\fcSep
+\fi
+\ifKV@fcopera@mul
+\vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}\V{x}\DV{x}\Q{1}
+ ]{MulScore1}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore2}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore3}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore4}{\widthOffcSF}%
+ {\heightOffcSF}}
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore5}{\widthOffcSF}%
+ {\heightOffcSF}}
+\fi
+ }\fcSep
+\fi
+\ifKV@fcopera@div
+\vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}
+ \uV{FEFF00F7}\uDV{FEFF00F7}\Q{1}
+ ]{DivScore1}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore2}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore3}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore4}{\widthOffcSF}%
+ {\heightOffcSF}}
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore5}{\widthOffcSF}%
+ {\heightOffcSF}}
+\fi
+ }\fcSep
+\fi
+\vbox{\offinterlineskip
+ \hbox{\parbox[b][.25in][c]{.75in}{%
+ \textcolor{blue}{\operation}\hfill}}
+ \hbox{\parbox[b][.25in][c]{1.25in}{%
+ \textcolor{blue}{\numCorrect}\hfill}}
+ \hbox{\parbox[b][.25in][c]{1.25in}{%
+ \textcolor{blue}{\numAttempted}\hfill}}
+ \hbox{\parbox[b][.25in][c]{1.25in}{%
+ \textcolor{blue}{\percentCorrect}\hfill}}
+\ifx\fc@timedscores\fc@YES
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}
+ ]{ScoreTotal}{.51in}{.25in}\kern1bp
+ \makebox[0pt][l]{\pushButton[\presets{\tBGNoBorder}
+ \Ff{-\FfReadOnly}\S{S}\H{I}\textSize{10}
+ \TU{\timeScoresTooltip}
+ \A{\JS{docTimeScores();}}]{Descrip5}{1in}{.25in}}%
+ \parbox[b][.25in][c]{1in}{%
+ \centering\textcolor{blue}{\timedScores}}}%
+\fi
+ }%
+}
+\edef\bFCa{/\ifKV@fcopera@add/\else*\fi}
+\edef\eFCa{\ifKV@fcopera@add/\else*\fi/}
+\edef\bFCs{/\ifKV@fcopera@sub/\else*\fi}
+\edef\eFCs{\ifKV@fcopera@sub/\else*\fi/}
+\edef\bFCm{/\ifKV@fcopera@mul/\else*\fi}
+\edef\eFCm{\ifKV@fcopera@mul/\else*\fi/}
+\edef\bFCd{/\ifKV@fcopera@div/\else*\fi}
+\edef\eFCd{\ifKV@fcopera@div/\else*\fi/}
+\def\fctCharWidth{22}
+\def\fctInstr{"Points are awarded, based on time,
+ for successfully solving a problem:"}
+\def\fctTimeElapsed{"Time elapsed"}
+\def\fctPoints{"Points"}
+\def\fctLessThanV{"Less than 5 sec"}
+\def\fctLessThanVPoints{6}
+\def\fctBtwnVAndX{"Between 5 and 10 sec"}
+\def\fctBtwnVAndXPoints{5}
+\def\fctBtwnXAndXV{"Between 10 and 15 sec"}
+\def\fctBtwnXAndXVPoints{4}
+\def\fctBtwnXVAndXX{"Between 15 and 20 sec"}
+\def\fctBtwnXVAndXXPoints{3}
+\def\fctBtwnXXAndXXV{"Between 20 and 25 sec"}
+\def\fctBtwnXXAndXXVPoints{2}
+\def\fctGtrXXV{"Greater than 25 sec"}
+\def\fctGtrXXVPoints{1}
+\newcommand\amtChngMouToTou{5}
+\newcommand\fcOptTextWidth{80}
+\newcommand\fcOptTopRange{Range Top}
+\newcommand\fcOptBottomRange{Range Bottom}
+\newcommand\fcOptTopRangeDiv{Range Quotient}
+\newcommand\fcOptBottomRangeDiv{Range Divisor}
+\newcommand\fcOptTo{ to }
+\newcommand\fcOptAllowNegNumber{Allow Negative Subtraction}
+\newcommand\fcOptDecimal{Decimals:}
+\newcommand\fcOptDecimalNone{none}
+\newcommand\fcMenuFCMsg{No menu items to display}
+\newcommand\fcAdditionName{\fcAddition}
+\newcommand\fcSubtractionName{\fcSubtraction}
+\newcommand\fcMultiplicationName{\fcMultiplication}
+\newcommand\fcDivisionName{\fcDivision}
+\begin{insDLJS*}{fcjs}
+\begin{newsegment}{data}
+var _loadfcjs=true;
+var t, b, o, r, c, oAlert;
+function getFieldObjects()
+{
+ t=this.getField("top");
+ b=this.getField("bottom");
+ o=this.getField("operation");
+ r=this.getField("result");
+ c=this.getField("ChooseOperation");
+ oAlert=this.getField("alertbox");
+ useKeyPad = (this.getField("Enter").display==display.visible);
+}
+var turnoff=false;
+var bUpdateField=true;
+var timedScores=\fcTimedScores;
+var fcAllowNegSub=\fcAllowNegSub;
+var useKeyPad = false;
+var decimalPressed = false;
+var keypadInput=false;
+var operand='a';
+var NumAddCorr=0;
+var NumAddTried=0;
+var NumSubCorr=0;
+var NumSubTried=0;
+var NumMulCorr=0;
+var NumMulTried=0;
+var NumDivCorr=0;
+var NumDivTried=0;
+timelimit=600000;
+var mybegin;
+getFieldObjects();
+var numDecimals=0;
+var addDecT = \fcaddDecT, addDecB = \fcaddDecB;
+var addT_a = Number(\fcAddTParams[0]);
+var addT_b = Number(\fcAddTParams[1]);
+var addB_a = Number(\fcAddBParams[0]);
+var addB_b = Number(\fcAddBParams[1]);
+var subDecT = \fcsubDecT, subDecB = \fcsubDecB;
+var subT_a = Number(\fcSubTParams[0]);
+var subT_b = Number(\fcSubTParams[1]);
+var subB_a = Number(\fcSubBParams[0]);
+var subB_b = Number(\fcSubBParams[1]);
+var mulDecT = \fcmulDecT, mulDecB = \fcmulDecB;
+var mulT_a = Number(\fcMulTParams[0]);
+var mulT_b = Number(\fcMulTParams[1]);
+var mulB_a = Number(\fcMulBParams[0]);
+var mulB_b = Number(\fcMulBParams[1]);
+var divDecQ = \fcdivDecQ, divDecB = \fcdivDecB;
+var divQ_a = Number(\fcDivQParams[0]);
+var divQ_b = Number(\fcDivQParams[1]);
+var divB_a = Number(\fcDivBParams[0]);
+var divB_b = Number(\fcDivBParams[1]);
+\end{newsegment}
+\begin{newsegment}{updatescore}
+function updatescore(f,t) {
+ // console.println(t);
+ var points=0;
+ if(t<=5) points=6;
+ if((t>5)&&(t<=10)) points=5;
+ if((t>10)&&(t<=15)) points=4;
+ if((t>15)&&(t<=20)) points=3;
+ if((t>20)&&(t<=25)) points=2;
+ if(t>25) points=1;
+ var oField=this.getField(f);
+ if ( oField != null ) {
+ oField.value+=points;
+ this.getField("ScoreTotal").value+=points;
+ }
+}
+function docTimeScores() {
+ app.execDialog(fcTimedScoresDialog);
+}
+var fcTimedScoresDialog =
+{
+ // set a default value for radio button field
+ initialize: function(dialog) {
+ },
+ // when user presses "Ok", this handler will execute first
+ commit: function(dialog) {
+ },
+ // The Dialog Description
+ description:
+ {
+ name: "PDF Flash Cards - Timed Scores",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "instr",
+ name: \fctInstr
+ }
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "hr01",
+ char_width: \fctCharWidth,
+ font: "dialog",
+ bold: true,
+ name: \fctTimeElapsed
+ },
+ {
+ type: "static_text",
+ item_id: "hr02",
+ font: "dialog",
+ bold: true,
+ name: \fctPoints
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st11",
+ char_width: \fctCharWidth,
+ name: \fctLessThanV
+ },
+ {
+ type: "static_text",
+ item_id: "st12",
+ name: " \fctLessThanVPoints"
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st21",
+ char_width: \fctCharWidth,
+ name: \fctBtwnVAndX
+ },
+ {
+ type: "static_text",
+ item_id: "st22",
+ name: " \fctBtwnVAndXPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st31",
+ char_width: \fctCharWidth,
+ name: \fctBtwnXAndXV
+ },
+ {
+ type: "static_text",
+ item_id: "st32",
+ name: " \fctBtwnXAndXVPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st41",
+ char_width: \fctCharWidth,
+ name: \fctBtwnXVAndXX
+ },
+ {
+ type: "static_text",
+ item_id: "st42",
+ name: " \fctBtwnXVAndXXPoints"
+ },
+ ]
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st51",
+ char_width: \fctCharWidth,
+ name: \fctBtwnXXAndXXV
+ },
+ {
+ type: "static_text",
+ item_id: "st52",
+ name: " \fctBtwnXXAndXXVPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st61",
+ char_width: \fctCharWidth,
+ name: \fctGtrXXV
+ },
+ {
+ type: "static_text",
+ item_id: "st62",
+ name: " \fctGtrXXVPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ alignment: "align_right",
+ type: "ok",
+ }
+ ]
+ }
+ ]
+ }
+}
+function validateResult()
+{
+ var oField, MsgFlag, calculation;
+ if (!turnoff && !keypadInput) {
+ MsgFlag=false;
+ this.delay=true;
+ var mynow=new Date();
+ var elapsedtime = (Date.parse(mynow)-Date.parse(mybegin))/1000;
+ var timeelapsed = (elapsedtime>timelimit);
+ switch (operand) {
+ case 'a':
+ oField = this.getField("AddScore2");
+ bUpdateField = ( oField != null );
+ calculation=util.printf("\%."+numDecimals+"f",%
+(t.value+b.value));
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumAddCorr;
+ } else {
+ if((1*event.value)==calculation) {
+ MsgFlag=true;
+ if ( bUpdateField ) {
+ oField.value=++NumAddCorr;
+ updatescore("AddScore5",elapsedtime);
+ }
+ }
+ else
+ if ( bUpdateField ) oField.value=NumAddCorr;
+ }
+ oField = this.getField("AddScore3");
+ if (oField != null ) oField.value=++NumAddTried;
+ oField = this.getField("AddScore4");
+ if (oField != null ) oField.value = util.printf("\%.0f",%
+(NumAddCorr/NumAddTried)*100);
+ break;
+ case 's':
+ oField=this.getField("SubScore2");
+ bUpdateField = ( oField != null );
+ calculation=util.printf("\%."+numDecimals+"f",
+ (t.value-b.value));
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumSubCorr;
+ } else {
+ if((1*event.value)==calculation) {
+ MsgFlag=true;
+ if ( bUpdateField ) {
+ oField.value=++NumSubCorr;
+ updatescore("SubScore5",elapsedtime);
+ }
+ } else
+ if ( bUpdateField ) oField.value=NumSubCorr;
+ }
+ oField=this.getField("SubScore3");
+ if (oField != null) oField.value=++NumSubTried;
+ oField=this.getField("SubScore4");
+ if (oField != null) oField.value=util.printf("\%.0f",%
+(NumSubCorr/NumSubTried)*100);
+ break;
+ case 'm':
+ oField=this.getField("MulScore2");
+ bUpdateField = ( oField != null );
+ calculation=util.printf("\%."+numDecimals+"f",%
+(t.value*b.value));
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumMulCorr;
+ } else {
+ if((1*event.value)==calculation) {
+ MsgFlag=true;
+ if (bUpdateField) {
+ oField.value=++NumMulCorr;
+ updatescore("MulScore5",elapsedtime);
+ }
+ } else
+ if (bUpdateField) oField.value=NumMulCorr;
+ }
+ oField=this.getField("MulScore3");
+ if (oField != null) oField.value=++NumMulTried;
+ oField=this.getField("MulScore4");
+ if (oField != null) oField.value=util.printf("\%.0f",%
+(NumMulCorr/NumMulTried)*100);
+ break;
+ case 'd':
+ oField=this.getField("DivScore2");
+ bUpdateField = ( oField != null );
+ calculation=util.printf("\%."+numDecimals+"f",%
+t.value/b.value);
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumDivCorr;
+ } else {
+ if((1*event.value)==calculation) {
+ MsgFlag=true;
+ if (bUpdateField) {
+ oField.value=++NumDivCorr;
+ updatescore("DivScore5",elapsedtime);
+ }
+ } else
+ if ( bUpdateField ) oField.value=NumDivCorr;
+ }
+ oField = this.getField("DivScore3");
+ if (oField != null) oField.value=++NumDivTried;
+ oField = this.getField("DivScore4");
+ if (oField != null) oField.value=util.printf("\%.0f",%
+(NumDivCorr/NumDivTried)*100);
+ break;
+ }
+ if(!timeelapsed) {
+ if(MsgFlag) {
+ oAlert.textColor=color.blue;
+ oAlert.value="\rightMsg";
+ } else {
+ oAlert.textColor=color.red;
+ oAlert.value="\wrongMsg";
+ }
+ }
+ this.getField("ansregion").value=calculation;
+ this.getField("NewProblem").setFocus() ;
+ this.delay=false;
+ }
+}
+function startAgain() {
+ getFieldObjects();
+ turnoff=true;
+ this.resetForm();
+ timelimit=600000;
+ event.rc=false;
+ operand='+';
+ NumAddCorr=0;
+ NumAddTried=0;
+ NumSubCorr=0;
+ NumSubTried=0;
+ NumMulCorr=0;
+ NumMulTried=0;
+ NumDivCorr=0;
+ NumDivTried=0;
+}
+function newCard() {
+ turnoff=true;
+ this.resetForm(["result","top","bottom","ansregion","alertbox"]);
+ operand = c.value;
+ switch (operand)
+ {
+ case 'a':
+ {
+ o.value='+'; // addDecT
+ numDecimals = Math.max(addDecT,addDecB);
+ var topTemplate = "\%."+addDecT+"f";
+ var botTemplate = "\%."+addDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var m=util.printf(topTemplate,%
+(addT_b-addT_a)*Math.random()+addT_a);
+ var n=util.printf(botTemplate,%
+(addB_b-addB_a)*Math.random()+addB_a);
+ m=util.printf(matchTemplate,m);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ t.value=util.printf(commonTemplate,m);
+ b.value=util.printf(commonTemplate,n);
+ break;
+ }
+ case 's':
+ {
+ o.value="-";
+ numDecimals = Math.max(subDecT,subDecB);
+ var topTemplate = "\%."+subDecT+"f";
+ var botTemplate = "\%."+subDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var m=util.printf(topTemplate,%
+(subT_b-subT_a)*Math.random()+subT_a);
+ var n=util.printf(botTemplate,%
+(subB_b-subB_a)*Math.random()+subB_a);
+ m=util.printf(matchTemplate,m);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ var bSwitch=( (!fcAllowNegSub) && (n-m>0) );
+ t.value=util.printf(commonTemplate,(bSwitch)?n:m);
+ b.value=util.printf(commonTemplate,(bSwitch)?m:n);
+ break;
+ }
+ case 'm':
+ {
+ o.value='x';
+ numDecimals=Math.max(mulDecT,mulDecB);
+ var topTemplate = "\%."+mulDecT+"f";
+ var botTemplate = "\%."+mulDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var m=util.printf(topTemplate,%
+(mulT_b-mulT_a)*Math.random()+mulT_a);
+ var n=util.printf(botTemplate,%
+(mulB_b-mulB_a)*Math.random()+mulB_a);
+ m=util.printf(matchTemplate,m);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ t.value=util.printf(commonTemplate,m);
+ b.value=util.printf(commonTemplate,n);
+ numDecimals = mulDecT + mulDecB;
+ break;
+ }
+ case 'd':
+ {
+ o.value='\string\367'
+ numDecimals=divDecQ+divDecB;
+ var topTemplate = "\%."+divDecQ+"f";
+ var botTemplate = "\%."+divDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var n,m;
+ var quotient=util.printf(topTemplate,%
+divQ_a + (divQ_b-divQ_a)*Math.random());
+ for(n=util.printf(botTemplate,%
+divB_a + (divB_b-divB_a)*Math.random());
+ n==0; n=util.printf("\%.0f",%
+divB_a + (divB_b-divB_a)*Math.random()));
+ m=util.printf(matchTemplate,quotient*n);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ t.value=util.printf(commonTemplate,m);
+ b.value=util.printf(commonTemplate,n);
+ numDecimals = divDecQ;
+ break;
+ }
+ }
+ // console.println("operation = " + o.value);
+ turnoff=false;
+ if (!useKeyPad) r.readonly=false;
+ mybegin=new Date();
+ try{ r.setFocus(); } catch(e) {}
+}
+function addDigit(n) {
+ if (oAlert.value != "") return;
+ switch (n) {
+ case "Enter":
+ var tmp_value=r.valueAsString;
+ this.resetForm(["result"]);
+ keypadInput=false;
+ r.value = tmp_value;
+ break;
+ case "Back":
+ keypadInput=true;
+ var tmp_value=r.valueAsString;
+ if (tmp_value != "")
+ r.value = tmp_value.substring(0,tmp_value.length-1);
+ break;
+ case "Dec":
+ keypadInput=true;
+ var v=r.valueAsString;
+ v = v + ".";
+ r.value = v;
+ break;
+ case "Minus":
+ keypadInput=true;
+ var v=r.valueAsString;
+ if (r.value < 0 ) {
+ v = String(Math.abs(v));
+ } else v = "-" + v;
+ r.value = v;
+ break;
+ default:
+ keypadInput=true;
+ v=r.valueAsString;
+ v = v + String(n);
+ r.value = v;
+ }
+}
+function ToggleKeyPad() {
+ useKeyPad = !useKeyPad;
+ if ( typeof fcMenu == "object") {
+ for (var i=0; i<fcMenu.length; i++) {
+ if (fcMenu[i].cReturn=="1") fcMenu[i].bMarked=useKeyPad;
+ if (fcMenu[i].cReturn=="3") fcMenu[i].bEnabled=useKeyPad;
+ if (fcMenu[i].cReturn=="4") fcMenu[i].bEnabled=useKeyPad;
+ }
+ }
+ this.delay=true;
+ if (useKeyPad) {
+ for (var i=0; i<= 9; i++)
+ this.getField("num"+i).display=display.visible;
+ this.getField("Back").display=display.visible;
+ this.getField("Enter").display=display.visible;
+ this.getField("Dec").display=display.visible;
+ this.getField("Minus").display=display.visible;
+ this.getField("result").readonly=true;
+ } else {
+ for (var i=0; i<= 9; i++)
+ this.getField("num"+i).display=display.hidden;
+ this.getField("Back").display=display.hidden;
+ this.getField("Enter").display=display.hidden;
+ this.getField("Dec").display=display.hidden;
+ this.getField("Minus").display=display.hidden;
+ this.getField("result").readonly=false;
+ }
+ this.delay=false;
+ getFieldObjects();
+
+}
+\end{newsegment}
+\begin{newsegment}{Custom Keystroke for Numbers}
+function fcNumber_Keystroke(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend) {
+ if (turnoff) return;
+ var v = t.valueAsString;
+ if ( v == "")
+ { event.rc=false; this.resetForm(["result"]); }
+ else
+ if ( event.value != "-" && event.value != ".")
+ AFNumber_Keystroke(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend);
+}
+function fcNumber_Format(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend) {
+ if ( !useKeyPad && event.value != "-" && event.value != ".")
+ AFNumber_Format(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend);
+}
+\end{newsegment}
+\begin{newsegment}{Touch or Mouse Friendly}
+var aKPFieldNames=new Array ("num0",
+ "num1","num4","num7","Dec","Enter",
+ "num2","num5","num8","num3","num6","num9",
+ "Back","Minus");
+var _tDlt=\amtChngMouToTou;
+var bTouchFriendly=false;
+function makeTouchFriendly() {
+ if (!useKeyPad||bTouchFriendly) return;
+ bTouchFriendly=true;
+ var indexTouch=-1, indexMouse;
+ if ( typeof fcMenu == "object") {
+ for ( var i=0; i<fcMenu.length; i++) {
+ if (fcMenu[i].cReturn=="3") indexTouch=i;
+ if (fcMenu[i].cReturn=="4") indexMouse=i;
+ }
+ if (indexTouch!=-1) {
+ fcMenu[indexTouch].bMarked=bTouchFriendly;
+ fcMenu[indexMouse].bMarked=!bTouchFriendly;
+ }
+ }
+ var r;
+ this.delay=true;
+ var TKP=this.getField("toggleKeyPadBtn");
+ var bMovTKP=(TKP!=null);
+ if (bMovTKP) {
+ var tkpRect=TKP.rect;
+ tkpRect=[tkpRect[0]+2*_tDlt,tkpRect[1]+%
+4*_tDlt,tkpRect[2]+2*_tDlt,tkpRect[3]+4*_tDlt];
+ TKP.rect=tkpRect;
+ }
+ for (var i=0; i<aKPFieldNames.length; i++) {
+ f=this.getField(aKPFieldNames[i]);
+ r=f.rect;
+ switch(i) {
+ case 0:
+ r=[r[0],r[1]+_tDlt,r[2]+2*_tDlt,r[3]];
+ break;
+ case 1: // num1 left edge
+ r=[r[0],r[1]+2*_tDlt,r[2]+_tDlt,r[3]+_tDlt];
+ break;
+ case 2: // num4 left edge
+ r=[r[0],r[1]+3*_tDlt,r[2]+_tDlt,r[3]+2*_tDlt];
+ break;
+ case 3: // num7 left edge
+ r=[r[0],r[1]+4*_tDlt,r[2]+_tDlt,r[3]+3*_tDlt];
+ break;
+ case 4: // Dec
+ r=[r[0]+2*_tDlt,r[1]+_tDlt,r[2]+3*_tDlt,r[3]];
+ break;
+ case 5: // Enter lower edge
+ r=[r[0]+3*_tDlt,r[1]+2*_tDlt,r[2]+4*_tDlt,r[3]];
+ break;
+ case 6: // num2
+ r=[r[0]+_tDlt,r[1]+2*_tDlt,r[2]+2*_tDlt,r[3]+_tDlt];
+ break;
+ case 7: // num5
+ r=[r[0]+_tDlt,r[1]+3*_tDlt,r[2]+2*_tDlt,r[3]+2*_tDlt];
+ break;
+ case 8: // num8
+ r=[r[0]+_tDlt,r[1]+4*_tDlt,r[2]+2*_tDlt,r[3]+3*_tDlt];
+ break;
+ case 9: // num2
+ r=[r[0]+2*_tDlt,r[1]+2*_tDlt,r[2]+3*_tDlt,r[3]+_tDlt];
+ break;
+ case 10: // num6
+ r=[r[0]+2*_tDlt,r[1]+3*_tDlt,r[2]+3*_tDlt,r[3]+2*_tDlt];
+ break;
+ case 11: // num9
+ r=[r[0]+2*_tDlt,r[1]+4*_tDlt,r[2]+3*_tDlt,r[3]+3*_tDlt];
+ break;
+ case 12: // Back (right edge)
+ r=[r[0]+3*_tDlt,r[1]+3*_tDlt,r[2]+4*_tDlt,r[3]+2*_tDlt];
+ break;
+ case 13: // Minus (right edge)
+ r=[r[0]+3*_tDlt,r[1]+4*_tDlt,r[2]+4*_tDlt,r[3]+3*_tDlt];
+ break;
+ }
+ f.rect=r;
+ }
+ this.delay=false;
+}
+function makeMouseFriendly() {
+ if (!useKeyPad||!bTouchFriendly) return;
+ bTouchFriendly=false;
+ var indexTouch=-1, indexMouse;
+ if ( typeof fcMenu == "object") {
+ for ( var i=0; i<fcMenu.length; i++) {
+ if (fcMenu[i].cReturn=="3") indexTouch=i;
+ if (fcMenu[i].cReturn=="4") indexMouse=i;
+ }
+ if (indexTouch != -1) {
+ fcMenu[indexTouch].bMarked=bTouchFriendly;
+ fcMenu[indexMouse].bMarked=!bTouchFriendly;
+ }
+ }
+ var r;
+ this.delay=true;
+ var TKP=this.getField("toggleKeyPadBtn");
+ var bMovTKP=(TKP!=null);
+ if (bMovTKP) {
+ var tkpRect=TKP.rect;
+ tkpRect=[tkpRect[0]-2*_tDlt,tkpRect[1]-%
+4*_tDlt,tkpRect[2]-2*_tDlt,tkpRect[3]-4*_tDlt];
+ TKP.rect=tkpRect;
+ }
+ for (var i=0; i<aKPFieldNames.length; i++) {
+ f=this.getField(aKPFieldNames[i]);
+ r=f.rect;
+ switch(i) {
+ case 0: // 0
+ r=[r[0],r[1]-_tDlt,r[2]-2*_tDlt,r[3]];
+ break;
+ case 1: // num1 left edge
+ r=[r[0],r[1]-2*_tDlt,r[2]-_tDlt,r[3]-_tDlt];
+ break;
+ case 2: // num4 left edge
+ r=[r[0],r[1]-3*_tDlt,r[2]-_tDlt,r[3]-2*_tDlt];
+ break;
+ case 3: // num7 left edge
+ r=[r[0],r[1]-4*_tDlt,r[2]-_tDlt,r[3]-3*_tDlt];
+ break;
+ case 4: // Dec
+ r=[r[0]-2*_tDlt,r[1]-_tDlt,r[2]-3*_tDlt,r[3]];
+ break;
+ case 5: // Enter lower edge
+ r=[r[0]-3*_tDlt,r[1]-2*_tDlt,r[2]-4*_tDlt,r[3]];
+ break;
+ case 6: // num2
+ r=[r[0]-_tDlt,r[1]-2*_tDlt,r[2]-2*_tDlt,r[3]-_tDlt];
+ break;
+ case 7: // num5
+ r=[r[0]-_tDlt,r[1]-3*_tDlt,r[2]-2*_tDlt,r[3]-2*_tDlt];
+ break;
+ case 8: // num8
+ r=[r[0]-_tDlt,r[1]-4*_tDlt,r[2]-2*_tDlt,r[3]-3*_tDlt];
+ break;
+ case 9: // num2
+ r=[r[0]-2*_tDlt,r[1]-2*_tDlt,r[2]-3*_tDlt,r[3]-_tDlt];
+ break;
+ case 10: // num6
+ r=[r[0]-2*_tDlt,r[1]-3*_tDlt,r[2]-3*_tDlt,r[3]-2*_tDlt];
+ break;
+ case 11: // num9
+ r=[r[0]-2*_tDlt,r[1]-4*_tDlt,r[2]-3*_tDlt,r[3]-3*_tDlt];
+ break;
+ case 12: // Back (right edge)
+ r=[r[0]-3*_tDlt,r[1]-3*_tDlt,r[2]-4*_tDlt,r[3]-2*_tDlt];
+ break;
+ case 13: // Minus (right edge)
+ r=[r[0]-3*_tDlt,r[1]-4*_tDlt,r[2]-4*_tDlt,r[3]-3*_tDlt];
+ break;
+ }
+ f.rect=r;
+ }
+ this.delay=false;
+}
+\end{newsegment}
+\begin{newsegment}{Option Dialog Box}
+var fcDialog =
+{
+ // set a default value for radio button field
+ initialize: function(dialog) {
+ var addDT="AT0" + String(addDecT);
+ var addDB="AB0" + String(addDecB);
+ var subDT="ST0" + String(subDecT);
+ var subDB="SB0" + String(subDecB);
+ var mulDT="MT0" + String(mulDecT);
+ var mulDB="MB0" + String(mulDecB);
+ var divDQ="DQ0" + String(divDecQ);
+ var divDB="DB0" + String(divDecB);
+ var radioString = addDT +": true, " + addDB +": true, "
+ + subDT + ": true, " + subDB + ": true, "
+ + mulDT + ": true, " + mulDB + ": true, "
+ + divDQ + ": true, " + divDB + ": true ";
+//console.println("radioString="+radioString);
+ eval("dialog.load({" + radioString + "})");
+ dialog.load({
+ // Populate the addition first
+ "aT_a": util.printf("\%.0f",addT_a),
+ "aT_b": util.printf("\%.0f",addT_b),
+ "aB_a": util.printf("\%.0f",addB_a),
+ "aB_b": util.printf("\%.0f",addB_b),
+ // subtraction
+ "sT_a": util.printf("\%.0f",subT_a),
+ "sT_b": util.printf("\%.0f",subT_b),
+ "sB_a": util.printf("\%.0f",subB_a),
+ "sB_b": util.printf("\%.0f",subB_b),
+ "nsCB": fcAllowNegSub,
+ // multiplication
+ "mT_a": util.printf("\%.0f",mulT_a),
+ "mT_b": util.printf("\%.0f",mulT_b),
+ "mB_a": util.printf("\%.0f",mulB_a),
+ "mB_b": util.printf("\%.0f",mulB_b),
+ // division
+ "dQ_a": util.printf("\%.0f",divQ_a),
+ "dQ_b": util.printf("\%.0f",divQ_b),
+ "dB_a": util.printf("\%.0f",divB_a),
+ "dB_b": util.printf("\%.0f",divB_b)
+ });
+ },
+ // when user presses "Ok", this handler will execute first
+ commit: function(dialog) {
+ var results = dialog.store();
+ addT_a = Math.round(results["aT_a"]);
+ addT_b = Math.round(results["aT_b"]);
+ addB_a = Math.round(results["aB_a"]);
+ addB_b = Math.round(results["aB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["AT0"+i]) { addDecT = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["AB0"+i]) { addDecB = i; break; }
+ // subtraction
+ subT_a = Math.round(results["sT_a"]);
+ subT_b = Math.round(results["sT_b"]);
+ subB_a = Math.round(results["sB_a"]);
+ subB_b = Math.round(results["sB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["ST0"+i]) { subDecT = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["SB0"+i]) { subDecB = i; break; }
+ fcAllowNegSub = results["nsCB"];
+ // multiplication
+ mulT_a = Math.round(results["mT_a"]);
+ mulT_b = Math.round(results["mT_b"]);
+ mulB_a = Math.round(results["mB_a"]);
+ mulB_b = Math.round(results["mB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["MT0"+i]) { mulDecT = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["MB0"+i]) { mulDecB = i; break; }
+ // division
+ divQ_a = Math.round(results["dQ_a"]);
+ divQ_b = Math.round(results["dQ_b"]);
+ divB_a = Math.round(results["dB_a"]);
+ divB_b = Math.round(results["dB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["DQ0"+i]) { divDecQ = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["DB0"+i]) { divDecB = i; break; }
+ },
+ // The Dialog Description
+ description:
+ {
+ name: "PDF Flash Cards - Options",
+ align_children: "align_left",
+ elements:
+ [
+\bFCa
+ { // The Addition Cluster
+ type: "cluster",
+ name: "\fcAdditionName",
+ item_id: "add",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "addRngT",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRange"
+ },
+ {
+ item_id: "aT_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "addRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "aT_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "aDcT",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "AT00",
+ group_id: "AddT",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "AT01",
+ group_id: "AddT",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "AT02",
+ group_id: "AddT",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "addRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRange"
+ },
+ {
+ item_id: "aB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "addRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "aB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "aDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "AB00",
+ group_id: "AddB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "AB01",
+ group_id: "AddB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "AB02",
+ group_id: "AddB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ }
+ ]
+ }, // End Addition Cluster
+\eFCa
+\bFCs
+ { // The Subtraction Cluster
+ type: "cluster",
+ name: "\fcSubtractionName",
+ item_id: "sub",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "subRngT",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRange"
+ },
+ {
+ item_id: "sT_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "subRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "sT_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "sDT",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "ST00",
+ group_id: "SubT",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "ST01",
+ group_id: "SubT",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "ST02",
+ group_id: "SubT",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "subRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRange"
+ },
+ {
+ item_id: "sB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "subRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "sB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "sDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "SB00",
+ group_id: "SubB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "SB01",
+ group_id: "SubB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "SB02",
+ group_id: "SubB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+//--
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "nSub",
+ name: "\fcOptAllowNegNumber"
+ },
+ {
+ type:"check_box",
+ item_id: "nsCB"
+ }
+ ]
+ }
+//--
+ ]
+ }, // End Subtraction Cluster
+\eFCs
+\bFCm
+ { // The Multiplication Cluster
+ type: "cluster",
+ name: "\fcMultiplicationName",
+ item_id: "mul",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mulRngT",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRange"
+ },
+ {
+ item_id: "mT_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "mulRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "mT_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mDcT",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "MT00",
+ group_id: "MulT",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "MT01",
+ group_id: "MulT",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "MT02",
+ group_id: "MulT",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mulRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRange"
+ },
+ {
+ item_id: "mB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "mulRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "mB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "MB00",
+ group_id: "MulB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "MB01",
+ group_id: "MulB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "MB02",
+ group_id: "MulB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ }
+ ]
+ }, // End Multiplication Cluster
+\eFCm
+\bFCd
+ { // The Division Cluster
+ type: "cluster",
+ name: "\fcDivisionName",
+ item_id: "div",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "divRngQ",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRangeDiv"
+ },
+ {
+ item_id: "dQ_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "divRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "dQ_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "dDcQ",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "DQ00",
+ group_id: "DivQ",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "DQ01",
+ group_id: "DivQ",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "DQ02",
+ group_id: "DivQ",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "divRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRangeDiv"
+ },
+ {
+ item_id: "dB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "divRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "dB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "dDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "DB00",
+ group_id: "DivB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "DB01",
+ group_id: "DivB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "DB02",
+ group_id: "DivB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ }
+ ]
+ }, // End Division Cluster
+\eFCd
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ alignment: "align_right",
+ type: "ok_cancel",
+ }
+ ]
+ }
+ ]
+ }
+}
+\end{newsegment}
+\end{insDLJS*}
+\begin{insDLJS}[fcMenu]{fcmd}{Menu Data}
+\fcMenu
+function processFcMenu() {
+ if ( (typeof fcMenu == "object") && fcMenu.length!=0 ) {
+ var cChoice = \popUpMenu(fcMenu);
+ if ( cChoice != null ) {
+ switch(cChoice) {
+ case "0": app.execDialog(fcDialog);
+ break;
+ case "1": ToggleKeyPad();
+ break;
+ case "2": app.execMenuItem("GeneralInfo");
+ break;
+ case "3": makeTouchFriendly();
+ break;
+ case "4": makeMouseFriendly();
+ break;
+ default:
+ if ( typeof processCustomFcMenu == "function" )
+ processCustomFcMenu(cChoice);
+ return;
+ }
+ }
+ } else app.alert("\fcMenuFCMsg");
+}
+\end{insDLJS}
+\InputIfFileExists{fc_custom.def}{}{}
+\endinput
+%%
+%% End of file `fc_arith.sty'.
diff --git a/texmf-dist/tex/latex/fldigigal/fdg_ht1.swf b/texmf-dist/tex/latex/fldigigal/fdg_ht1.swf
new file mode 100644
index 00000000..baf098f0
--- /dev/null
+++ b/texmf-dist/tex/latex/fldigigal/fdg_ht1.swf
Binary files differ
diff --git a/texmf-dist/tex/latex/fldigigal/fdg_nt1.swf b/texmf-dist/tex/latex/fldigigal/fdg_nt1.swf
new file mode 100644
index 00000000..a081a07b
--- /dev/null
+++ b/texmf-dist/tex/latex/fldigigal/fdg_nt1.swf
Binary files differ
diff --git a/texmf-dist/tex/latex/fldigigal/fdg_vt1.swf b/texmf-dist/tex/latex/fldigigal/fdg_vt1.swf
new file mode 100644
index 00000000..0bbc55b1
--- /dev/null
+++ b/texmf-dist/tex/latex/fldigigal/fdg_vt1.swf
Binary files differ
diff --git a/texmf-dist/tex/latex/fldigigal/fldigigal.cfg b/texmf-dist/tex/latex/fldigigal/fldigigal.cfg
new file mode 100644
index 00000000..8c5ba816
--- /dev/null
+++ b/texmf-dist/tex/latex/fldigigal/fldigigal.cfg
@@ -0,0 +1,7 @@
+% fldigigal config file. Delete the \endinput below and replace the path
+% provided with the path to the swf folder of your fldigigal installation.
+% This path is used to locate the fldigigal SWF files.
+\endinput
+\renewcommand{\fdgFolder}{%
+ C:/Users/Public/Documents/My TeX Files/tex/latex/aeb/aebpro/fldigigal/swf}
+
diff --git a/texmf-dist/tex/latex/fldigigal/fldigigal.sty b/texmf-dist/tex/latex/fldigigal/fldigigal.sty
new file mode 100644
index 00000000..c00f1058
--- /dev/null
+++ b/texmf-dist/tex/latex/fldigigal/fldigigal.sty
@@ -0,0 +1,177 @@
+%%
+%% This is file `fldigigal.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fldigigal.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% fldigigal.sty package, 2010-23-10 %%
+%% Copyright (C) 2010 D. P. Story %%
+%% dpstory@uakron.edu %%
+%% %%
+%% 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+\ProvidesPackage{fldigigal}
+ [2010/12/29 v0.5c fldigigal: Create a Flash Digital Gallery, Acrobat Distiller only (dps)]
+\RequirePackage{xkeyval}
+\RequirePackage{rmannot}[2010/12/22]
+\newcommand{\fdgFolder}{C:/Users/Public/Documents/My TeX Files/%
+ tex/latex/aeb/aebpro/fldigigal/swf}
+\InputIfFileExists{fldigigal.cfg}{}{}
+\def\fdg@namegdef#1{\expandafter\gdef\csname #1\endcsname}
+\def\fdg@namexdef#1{\expandafter\xdef\csname #1\endcsname}
+{\catcode`\#=12 \catcode`\&=12 \catcode`\!=6
+ \gdef\fdg@iso!1{&#!1;}
+}
+\define@key{fdgxml}{path}[]{\def\fdg@pa@path{#1}}
+\define@key{fdgxml}{caption}[]{\def\fdg@pa@caption{#1}}
+\define@boolkey{fdgxml}{online}[true]{}
+\setkeys{fdgxml}{path,caption,online=false}
+\newcount\cntdigis
+\def\fdg@cnt@images#1{\advance\cntdigis1 }
+\def\fdg@image#1{\begingroup
+ \let\Name\rma@resource\let\urlName\rma@urlresource
+ \setkeys{fdgxml}{#1}%
+ \global\advance\cntdigis1
+ \edef\@digiImgName{Im\the\cntdigis(\fdg@CurrDigiName)}%
+ \saveNamedPath{\@digiImgName}{\fdg@pa@path}%
+ \edef\fdg@NamedExp{\expandafter\Name\expandafter{\@digiImgName}}%
+ \ifx\fdg@pa@caption\@empty\def\fdg@pa@caption{\fdg@NamedExp}\fi
+ \ifKV@fdgxml@online
+ \edef\fdg@urlNamedExp{%
+ \expandafter\urlName\expandafter{\@digiImgName}}%
+ \fdg@IWVO{\space\space\space\space
+ <image title='\fdg@pa@caption\fdg@cntOf{\the\cntdigis}'>%
+ \fdg@urlNamedExp</image>
+ }%
+ \else
+ \toks0=\expandafter{\fdg@embededResources}%
+ \ifx\fdg@embededResources\@empty
+ \xdef\fdg@embededResources{\@digiImgName}\else
+ \xdef\fdg@embededResources{\the\toks0,\@digiImgName}\fi
+ \fdg@IWVO{\space\space\space\space
+ <image title='\fdg@pa@caption\fdg@cntOf{\the\cntdigis}'>%
+ \fdg@NamedExp</image>
+ }%
+ \fi
+\endgroup}
+\def\fdg@IWVO{\immediate\write\verbatim@out}
+\def\embededResources#1{\csname #1ERs\endcsname}
+\def\xmlListiv#1{xmlList4#1}
+\let\fdg@cntOf\@gobble
+\newcommand{\fdgcntOf}[1]{\space(#1 of \fdg@numDigis)}
+\define@boolkey{fdgXML}{showcount}[true]{%
+ \ifKV@fdgXML@showcount\let\fdg@cntOf\fdgcntOf\else
+ \let\fdg@cntOf\@gobble\fi
+}
+\define@boolkey{fdgXML}{nowrite}[true]{}
+\setkeys{fdgXML}{showcount=false,nowrite=false}
+\newcommand{\fdgXmlList}[3][]{%
+\begingroup
+ \setkeys{fdgXML}{#1}%
+ \ifKV@fdgXML@nowrite\let\fdg@IWVO\@gobble\fi
+ \cntdigis=0 \gdef\fdg@embededResources{}%
+ \ifKV@fdgXML@nowrite\else
+ \newwrite \fdg@writexmllist
+ \immediate\openout \fdg@writexmllist=#2.xml
+ \let\verbatim@out\fdg@writexmllist
+ \fi
+ \fdg@IWVO{<photos>}%
+ \@ifundefined{#2@fdgdigis}{%
+ \fdg@namegdef{#2@fdgdigis}{#2}%
+ \def\fdg@CurrDigiName{#2}%
+ }{\PackageError{fldigigal}{Name already chosen}}%
+ \let\image\fdg@cnt@images#3%
+ \edef\fdg@numDigis{\the\cntdigis}%
+ \def\'{&apos;}\let\iso\fdg@iso
+ \cntdigis=0 \let\image\fdg@image#3%
+ \fdg@IWVO{</photos>}%
+ \ifKV@fdgXML@nowrite\else
+ \immediate\closeout \fdg@writexmllist
+ \fi
+\endgroup
+ \saveNamedPath{xmlList4#2}{\pathToSource/#2.xml}%
+ \fdg@namexdef{#2ERs}{\ifx\fdg@embededResources\@empty\else,\fi
+ \fdg@embededResources}%
+}
+\@onlypreamble{\fdgXmlList}
+\define@key{fgRmAnnot}{flashvars}[]{\def\fgRmAnnot@flashvars{&#1}}
+\let\fgRmAnnot@flashvars\@empty
+\define@key{fgRmAnnot}{galleryopts}[]{\def\fgRmAnnot@galleryopts{#1}}
+\saveNamedPath{fdg_vt1}{\fdgFolder/fdg_vt1.swf}
+\saveNamedPath{fdg_ht1}{\fdgFolder/fdg_ht1.swf}
+\saveNamedPath{fdg_nt1}{\fdgFolder/fdg_nt1.swf}
+\saveNamedPath{custom}{\fdgFolder/fdg_vt1.swf}
+\define@choicekey+{fgGalleryOpts}{gallery}[\val\nr]%
+ {vthumbs1,hthumbs1,nothumbs1,custom}[vthumbs1]{%
+ \ifcase\nr\relax
+ \def\fgGalleryOpts@gallery{fdg_vt1}\or
+ \def\fgGalleryOpts@gallery{fdg_ht1}\or
+ \def\fgGalleryOpts@gallery{fdg_nt1}\or
+ \def\fgGalleryOpts@gallery{custom}\fi
+}{}
+\define@choicekey+{fgGalleryOpts}{trans}[\val\nr]%
+ {Blinds,Fade,Fly,Iris,Photo,PixelDissolve,Rotate,%
+ Squeeze,Wipe,Zoom,Random}[Random]{%
+ \edef\fgGalleryOpts@trans{\val}%
+}{}
+\let\fgGalleryOpts@trans\@empty
+\define@key{fgGalleryOpts}{delay}[6]{\def\fgGalleryOpts@delay{#1}}
+\let\fgGalleryOpts@delay\@empty
+\define@boolkey{fgGalleryOpts}{auto}[true]{%
+ \edef\fgGalleryOpts@auto{\ifKV@fgGalleryOpts@auto
+ true\else false\fi}}
+\define@boolkey{fgGalleryOpts}{transOn}[true]{%
+ \edef\fgGalleryOpts@transOn{\ifKV@fgGalleryOpts@transOn
+ true\else false\fi}}
+\define@choicekey+{fgGalleryOpts}{captionalign}[\val\nr]%
+ {left,right,center}[left]{%
+ \edef\fgGalleryOpts@captionalign{\val}%
+}{}
+\let\fgGalleryOpts@captionalign\@empty
+\define@boolkey{fgGalleryOpts}{nocaptions}[true]{%
+ \edef\fgGalleryOpts@nocaptions{\ifKV@fgGalleryOpts@nocaptions
+ true\else false\fi}}
+\define@key{fgGalleryOpts}{nocaptionstext}[]{%
+ \def\fgGalleryOpts@nocaptionstext{#1}}
+\setkeys{fgGalleryOpts}{gallery,transOn,auto=true,nocaptions=false,nocaptionstext}
+\newcommand{\fgRmAnnot}[2][]{\begingroup
+ \@ifundefined{#2@fdgdigis}%
+ {\PackageError{fldigigal}{The name `#2' is not defined
+ for\MessageBreak this \string\fgRmAnnot}{Gallery names
+ are defined using \string\fdgXmlList}}%
+ \setkeys*{fgRmAnnot}{#1}\edef\XKV@rm@saved{\XKV@rm}%
+ \edef\tmp@setkeysEx{\noexpand\setkeys{fgGalleryOpts}%
+ {\fgRmAnnot@galleryopts}}\tmp@setkeysEx
+ \edef\merged@flashvars{\fgRmAnnot@flashvars%
+ \ifKV@fgGalleryOpts@auto\else&%
+ auto=\fgGalleryOpts@auto\fi
+ \ifx\fgGalleryOpts@delay\@empty\else&%
+ delay=\fgGalleryOpts@delay\fi
+ \ifx\fgGalleryOpts@trans\@empty\else&%
+ transitionType=\fgGalleryOpts@trans\fi
+ \ifKV@fgGalleryOpts@transOn\else&%
+ transitionOn=\fgGalleryOpts@transOn\fi
+ \ifx\fgGalleryOpts@captionalign\@empty\else&%
+ captionalign=\fgGalleryOpts@captionalign\fi
+ \ifKV@fgGalleryOpts@nocaptions&%
+ nocaptions=\fgGalleryOpts@nocaptions%
+ \ifx\gGalleryOpts@nocaptionstext\@empty\else&%
+ nocaptionstext=\fgGalleryOpts@nocaptionstext\fi\fi
+ }%
+ \rmAnnot[\XKV@rm@saved,
+ flashvars={xmlPath=\Name{\xmlListiv{#2}}\merged@flashvars},%
+ resources={\xmlListiv{#2}\embededResources{#2}}%
+ ]{320bp}{240bp}{\fgGalleryOpts@gallery}%
+ \endgroup
+}
+\endinput
+%%
+%% End of file `fldigigal.sty'.
diff --git a/tlpkg/tlpsrc/artthreads.tlpsrc b/tlpkg/tlpsrc/artthreads.tlpsrc
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tlpkg/tlpsrc/artthreads.tlpsrc
diff --git a/tlpkg/tlpsrc/cntdwn.tlpsrc b/tlpkg/tlpsrc/cntdwn.tlpsrc
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tlpkg/tlpsrc/cntdwn.tlpsrc
diff --git a/tlpkg/tlpsrc/ecards.tlpsrc b/tlpkg/tlpsrc/ecards.tlpsrc
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tlpkg/tlpsrc/ecards.tlpsrc
diff --git a/tlpkg/tlpsrc/fc-arith.tlpsrc b/tlpkg/tlpsrc/fc-arith.tlpsrc
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tlpkg/tlpsrc/fc-arith.tlpsrc
diff --git a/tlpkg/tlpsrc/fldigigal.tlpsrc b/tlpkg/tlpsrc/fldigigal.tlpsrc
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tlpkg/tlpsrc/fldigigal.tlpsrc