From 26f4947f509c2440ce28e625133a15f6a2446920 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Thu, 13 Sep 2018 10:28:30 +0900
Subject: update acrotex

---
 texmf-dist/tex/latex/acrotex/exerquiz.sty | 9334 ++++++++++++++---------------
 1 file changed, 4667 insertions(+), 4667 deletions(-)

(limited to 'texmf-dist/tex/latex/acrotex/exerquiz.sty')

diff --git a/texmf-dist/tex/latex/acrotex/exerquiz.sty b/texmf-dist/tex/latex/acrotex/exerquiz.sty
index 8583fa71..c12a83b7 100644
--- a/texmf-dist/tex/latex/acrotex/exerquiz.sty
+++ b/texmf-dist/tex/latex/acrotex/exerquiz.sty
@@ -1,4667 +1,4667 @@
-%%
-%% This is file `exerquiz.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% exerquiz.dtx  (with options: `copyright,package')
-%% 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Exerquiz.sty package,                                %%
-%% Copyright (C) 1999-2018  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{exerquiz}
- [2018/03/21 v8.2.2 %
-  Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
-\usepackage{keyval}
-\RequirePackage{ifpdf}[2006/02/20]
-\RequirePackage{ifxetex}[2006/08/21]
-\RequirePackage{ifluatex}
-\@ifundefined{exqtable}{\def\exqtable{table}}{}
-\IfFileExists{xcolor.sty}{%
-    \def\eq@ColorPackage{xcolor}%
-    \PassOptionsToPackage{\exqtable,hyperref}{xcolor}}
-    {\def\eq@ColorPackage{color}}
-\DeclareOption{noxcolor}{\def\eq@ColorPackage{color}}
-\DeclareOption{forpaper}{%
-   \eqforpapertrue\PassOptionsToPackage{monochrome}{\eq@ColorPackage}
-   \AtBeginDocument{\ifnum\eq@drivernum=4 \else\AllowPeeking\fi}
-}
-\DeclareOption{forcolorpaper}{\eqforpapertrue  % for print
-   \AtBeginDocument{\ifnum\eq@drivernum=4 \else\AllowPeeking\fi}
-}
-\DeclareOption{preview}{\PassOptionsToPackage{preview}{eforms}}
-\DeclareOption{nosolutions}{\eq@nosolutionstrue\eq@nolinktrue}
-\DeclareOption{noquizsolutions}{\eq@noquizsolutionstrue\eq@nolinktrue}
-\let\eq@YES=y \let\eq@NO=n
-\let\eq@One=1 \let\eq@Zero=0
-\def\eq@r{r}\let\eq@f=f \let\eq@l=l
-\DeclareOption{online}{\let\eq@online\eq@YES}
-\let\eq@online\eq@NO
-\DeclareOption{nohiddensolutions}{\eq@globalshowsolutionstrue}
-\DeclareOption{noHiddensolutions}%
-    {\eq@globalshowsolutionstrue\AtBeginDocument{\def\Hidesymbol{h}}}
-\DeclareOption{solutionsafter}{\eq@solutionsaftertrue\eq@nolinktrue}
-\DeclareOption{solutionsonly}{\solutionsonlytrue\answerkeytrue
-    \therearesolutionstrue\AtEndOfPackage{\let\exerSolnsHeadnToc\relax}}
-\newif\ifsolutionsonly\solutionsonlyfalse
-\@ifundefined{ifanswerkey}{\newif\ifanswerkey\answerkeyfalse}{}
-\DeclareOption{contsolns}{\AtEndOfPackage{\InputIfFileExists
-    {contsolns.def}{\contsolnsInputMsg}{\contsolnsErrorMsg}}}
-\def\contsolnsInputMsg{\PackageInfo{exerquiz}{contsolns option,
-    inputting file contsolns.def}}
-\def\contsolnsErrorMsg{\PackageWarning{exerquiz}{contsolns option,
-    cannot find file contsolns.def}}
-\DeclareOption{nocorrections}{\nocorrectionstrue}
-\DeclareOption{proofing}{\eq@proofingtrue}
-\newif\ifaebshowgrayletters\aebshowgraylettersfalse
-\DeclareOption{showgrayletters}{\aebshowgrayletterstrue}
-\@ifundefined{ifvspacewithsolns}{%
-    \DeclareOption{vspacewithsolns}{\vspacewithsolnstrue}
-    \newif\ifvspacewithsolns\vspacewithsolnsfalse
-}{}
-\@ifundefined{ifdisplayworkarea}{\newif\ifdisplayworkarea
-  \displayworkareafalse}{}
-\DeclareOption{nodljs}{\PassOptionsToPackage{nodljs}{insdljs}%
-     \AtEndOfPackage{\let\importdljs\eq@YES}}
-\DeclareOption{execJS}{\PassOptionsToPackage{execJS}{insdljs}}
-\DeclareOption{exercisesonly}{\PassOptionsToPackage{nodljs}{insdljs}}
-\DeclareOption{debug}{\PassOptionsToPackage{debug}{insdljs}}
-\DeclareOption{allowrandomize}{\AtEndOfPackage{\inputRandomizeChoices}}
-\def\inputRandomizeChoices{\InputIfFileExists{aebrandom.def}
-    {\PackageInfo{exerquiz}{inputting aebrandom.def}}
-    {cannot find aebrandom.def}}
-\newif \ifusesumrytbls \usesumrytblsfalse
-\DeclareOption{usesumrytbls}{\usesumrytblstrue
-    \def\inputSumryTblCode{\InputIfFileExists{aebsumrytbls.def}
-    {\PackageInfo{exerquiz}{inputting aebsumrytbls.def}}%
-    {cannot find aebsumrytbls.def}}}
-\let\inputSumryTblCode\relax
-\DeclareOption{usemcfi}{%
-    \def\inputMCFICode{\InputIfFileExists{usemcfi.def}
-    {\PackageInfo{exerquiz}{inputting usemcfi.def}}%
-    {cannot find usemcfi.def}}}
-\let\inputMCFICode\relax
-\newif\ifwithinMCFI\withinMCFIfalse
-\DeclareOption{dvipsone}{%
-    \def\eq@drivernum{0}\def\eq@driver{dvipsone}%
-    \PassOptionsToPackage{dvipsone}{eforms}
-}
-\DeclareOption{dvips}{%
-    \def\eq@drivernum{0}\def\eq@driver{dvips}%
-    \PassOptionsToPackage{dvips}{eforms}
-}
-\DeclareOption{pdftex}{%
-    \def\eq@drivernum{1}\def\eq@driver{pdftex}%
-    \PassOptionsToPackage{pdftex}{\eq@ColorPackage}
-    \PassOptionsToPackage{pdftex}{eforms}
-}
-\DeclareOption{luatex}{%
-    \def\eq@drivernum{1}\def\eq@driver{luatex}%
-    \PassOptionsToPackage{luatex}{\eq@ColorPackage}
-    \PassOptionsToPackage{luatex}{eforms}
-}
-\DeclareOption{dvipdfm}{%
-    \def\eq@drivernum{2}\def\eq@driver{dvipdfm}%
-    \PassOptionsToPackage{dvipdfm}{\eq@ColorPackage}%
-    \PassOptionsToPackage{dvipdfm}{eforms}%
-}
-\DeclareOption{dvipdfmx}{%
-    \def\eq@drivernum{2}\def\eq@driver{dvipdfmx}%
-    \PassOptionsToPackage{dvipdfmx}{\eq@ColorPackage}%
-    \PassOptionsToPackage{dvipdfmx}{eforms}%
-}
-\DeclareOption{xetex}{%
-    \def\eq@drivernum{2}\def\eq@driver{xetex}%
-    \PassOptionsToPackage{xetex}{\eq@ColorPackage}
-    \PassOptionsToPackage{xetex}{eforms}%
-}
-\DeclareOption{textures}{\def\eq@drivernum{3}%
-  \def\eq@driver{textures}%
-  \PassOptionsToPackage{textures}{\eq@ColorPackage}%
-  \PassOptionsToPackage{textures}{eforms}%
-}
-\DeclareOption{dviwindo}{\def\eq@drivernum{4}\def\eq@driver{dviwindo}%
-    \eq@noformstrue\PassOptionsToPackage{nodljs}{insdljs}}
-\DeclareOption{unicode}{\PassOptionsToPackage{unicode}{hyperref}}
-\DeclareOption{useui}{\PassOptionsToPackage{useui}{eforms}}
-\let\LangRedefinitions\relax
-\DeclareOption{french}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqfr.def}%
-     {\PackageInfo{exerquiz}{Inputting French Option}}%
-     {\PackageInfo{exerquiz}{French Option: Cannot find the file
-      eqfr.def, using the default, English.}}}}
-\DeclareOption{german}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqde.def}%
-   {\PackageInfo{exerquiz}{Inputting German Option}}%
-   {\PackageInfo{exerquiz}{German Option: Kann die Datei eqde.def
-     nicht finden, benutze Default, Englisch.}}}}
-\DeclareOption{norsk}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqno.def}%
-   {\PackageInfo{exerquiz}{Inputting Norsk Option}}%
-   {\PackageInfo{exerquiz}{Norsk Option: Cannot find the file eqno.def,
-   using the default, English.}}}}
-\DeclareOption{dutch}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqnl.def}%
-   {\PackageInfo{exerquiz}{Inputting Dutch Option}}%
-   {\PackageInfo{exerquiz}{Dutch Option: Kan bestand eqnl.def niet
-    vinden, gebruik default, Engels.}}}}
-\DeclareOption{spanish}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqes.def}%
-   {\PackageInfo{exerquiz}{Inputting Spanish Option}}%
-   {\PackageInfo{exerquiz}{Spanish Option: Opci\'on Espa\~nola: no puede
-    encontrar el fichero eqes.def, usar\'a por defecto, English.}}}}
-\DeclareOption{italian}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqit.def}%
-   {\PackageInfo{exerquiz}{Opzione Lingua Italiana}}%
-   {\PackageInfo{exerquiz}{pzione Italiano: Non trovo il file eqit.def,
-    utilizzo  quello di default, English.}}}}
-\DeclareOption{russian}{%
-   \@ifpackageloaded{hyperref}{%
-    \ifHy@unicode\else\PackageWarning{exerquiz}{%
-        The unicode option recommended for hyperref\MessageBreak}\fi
-   }{\PassOptionsToPackage{unicode}{hyperref}}
-   \def\LangRedefinitions{\InputIfFileExists{eqru.def}%
-   {\PackageInfo{exerquiz}{Inputting Russian Option}}%
-   {\PackageInfo{exerquiz}{Russian Option: Cannot find the file
-    eqru.def, using the default, English.}}}}
-\DeclareOption{dansk}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqda.def}%
-   {\PackageInfo{exerquiz}{Inputting Dansk Option}}%
-   {\PackageInfo{exerquiz}{Dansk Option: Cannot find the file eqda.def,
-   using the default, English.}}}}
-\DeclareOption{polish}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqpo.def}%
-   {\PackageInfo{exerquiz}{Inputting Polish Option}}%
-   {\PackageInfo{exerquiz}{Polish Option: Cannot find the file
-    eqpo.def, using the default, English.}}}}
-\DeclareOption{finnish}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqfin.def}%
-   {\PackageInfo{exerquiz}{Inputting Finnish Option}}%
-   {\PackageInfo{exerquiz}{Finnish Option: Cannot find the file
-    eqfin.def, using the default, English.}}}}
-\DeclareOption{catalan}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqcat.def}%
-   {\PackageInfo{exerquiz}{Inputting Catalan Option}}%
-   {\PackageInfo{exerquiz}{Catalan Option: Cannot find the file
-    eqcat.def, using the default, English.}}}}
-\DeclareOption{czech}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqcz.def}%
-   {\PackageInfo{exerquiz}{Inputting Czech Option}}%
-   {\PackageInfo{exerquiz}{Czech Option: Cannot find the file eqcz.def,
-   using the default, English.}}}}
-\DeclareOption{brazil}{%
-   \def\LangRedefinitions{\InputIfFileExists{eqbr.def}%
-   {\PackageInfo{exerquiz}{Inputting Brazilian Portuguese Option}}%
-   {\PackageInfo{exerquiz}{Portuguese Option: Opc\~ao Portugu\^es:
-    n\~ao foi poss\'ivel encontrar o arquivo eqbr.def, usaremos
-    o padr\~ao, English.}}}}
-\DeclareOption{turkish}{%
-   \@ifpackageloaded{hyperref}{%
-    \ifHy@unicode\else\PackageWarning{exerquiz}{%
-        The unicode option recommended for hyperref\MessageBreak}\fi
-   }{\PassOptionsToPackage{unicode}{hyperref}}
-   \def\LangRedefinitions{\InputIfFileExists{eqtr.def}%
-   {\PackageInfo{exerquiz}{Inputting Turkish Option}}%
-   {\PackageInfo{exerquiz}{Cannot find the file eqtk.def,
-    using the default, English.}}}}
-\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{\eq@ColorPackage}}
-\@ifpackageloaded{xcolor}%
-{%
-    \@ifpackagelater{xcolor}{2004/07/04}{}
-    {%
-    \PackageError{exerquiz}{%
-    *************************************************\MessageBreak
-    * Your Version of `xcolor.sty' is too old!\MessageBreak
-    * You need the version from 2004/07/04 or newer\MessageBreak
-    * or use: \string\usepackage[noxcolor]{exerquiz}\MessageBreak
-    *************************************************}{}%
-    }%
-}{}
-\let\iterate\relax
-\newif\ifeq@solutionsafter \eq@solutionsafterfalse
-\newif\ifeq@hidesolution \eq@hidesolutionfalse
-\newif\ifeq@globalshowsolutions \eq@globalshowsolutionsfalse
-\newif\ifeq@nosolutions \eq@nosolutionsfalse
-\newif\ifeq@proofing \eq@proofingfalse
-\providecommand\turnProofingOn{\eq@proofingtrue}
-\providecommand\turnProofingOff{\eq@proofingfalse}
-\newif\ifeqforpaper \eqforpaperfalse
-\newif\ifeq@noforms \eq@noformsfalse
-\newif\ifeq@noquizsolutions \eq@noquizsolutionsfalse
-\newif\ifnocorrections \nocorrectionsfalse
-\@ifundefined{ifeqe@flextended}{\newif\ifeqe@flextended
-  \eqe@flextendedfalse}{}
-\@ifundefined{ifcont@nnot}{\newif\ifcont@nnot \cont@nnotfalse}{}
-\@ifundefined{if@eqalignfilllinestoleft}{\newif\if@eqalignfilllinestoleft
-  \@eqalignfilllinestoleftfalse}{}
-\newif\ifkeepdeclaredvspacing \keepdeclaredvspacingfalse
-\newif\ifeq@nolink \eq@nolinkfalse
-\def\eq@ckglobalhide{\ifeq@globalshowsolutions\eq@hidesolutionfalse\fi}
-\def\hidesymbol{h}\def\Hidesymbol{H}
-\newif\iftherearesolutions \therearesolutionsfalse
-\newif\ifIsRespBox \global\IsRespBoxfalse
-\def\SolutionsAfter{\eq@solutionsaftertrue\eq@nolinktrue}
-\newif\ifcqSA\cqSAfalse
-\def\SolutionsAtEnd{\eq@solutionsafterfalse\eq@nolinkfalse
-  \displayworkareatrue\ifvspacewithsolns\eq@nosolutionsfalse\else
-  \eq@nosolutionstrue\fi\eq@proofingfalse\answerkeyfalse}
-\def\NoSpaceToWork{\let\eq@insertverticalspace\eq@NO}
-\def\SpaceToWork{\let\eq@insertverticalspace\eq@YES}
-\SpaceToWork
-\long\def\ifNoSolutions#1#2{%
-    \ifeq@nosolutions\expandafter#1\else
-    \expandafter#2\fi
-}
-\newif\ifeq@randomizeChoices \eq@randomizeChoicesfalse
-\newif\ifeq@randomizeallChoices \eq@randomizeallChoicesfalse
-\def\turnOnRandomize{\eq@randomizeallChoicestrue}
-\def\obeyLocalRandomize{\eq@randomizeallChoicesfalse}
-\let\saveRandomSeed\relax
-\let\inputRandomSeed\relax
-\def\CorrectionsOn{\global\nocorrectionsfalse}
-\def\CorrectionsOff{\global\nocorrectionstrue}
-\AtBeginDocument{\ifeq@noforms\else\Form\fi}
-\AtEndDocument{%
-    \include@solutions
-    \ifeq@noforms\else\include@quizsolutions\fi
-    \clearpage
-    \csname endForm\endcsname
-    \if\eq@drivernum2\else\clearpage\fi
-}
-\InputIfFileExists{exerquiz.cfg}{}{}
-\@ifpackageloaded{web}{%
-    \ExecuteOptions{\eq@driver@name}%
-}{%
-    \ifluatex\ExecuteOptions{luatex}\else
-    \ifpdf\ExecuteOptions{pdftex}\else
-    \ifxetex\ExecuteOptions{xetex}\else
-        \InputIfFileExists{web.cfg}{}
-        {\@ifundefined{l@tex@@@@driver}{\ExecuteOptions{dvips}}
-            {\ExecuteOptions{dvipsone}}}\fi\fi\fi
-}
-\ProcessOptions
-\RequirePackage{array}
-\RequirePackage{\eq@ColorPackage}
-\RequirePackage{comment}
-\RequirePackage{verbatim}
-\RequirePackage{hyperref}
-\RequirePackage{amssymb}% used for return symbols
-\RequirePackage{eforms}[2012/06/20]
-\@ifundefined{eq@drivernum}{%
-    \PackageError{exerquiz}%
-        {You  have not specified dvips, dvipsone, pdftex, dvipdfm,
-        dvipdfmx, or xetex
-        \MessageBreak in the option list of the exerquiz package}
-        {Place one of the drivers dvips, dvipsone, pdftex, dvipdfm,
-        dvipdfmx, or xetex
-        \MessageBreak in the option list of the exerquiz package.}
-}{}
-\edef\eq@restoreCats{% dps17
-  \catcode`\noexpand\"=\the\catcode`\"\relax
-  \catcode`\noexpand\'=\the\catcode`\'\relax
-  \catcode`\noexpand\,=\the\catcode`\,\relax
-  \catcode`\noexpand\(=\the\catcode`\(\relax
-  \catcode`\noexpand\!=\the\catcode`\!\relax
-  \catcode`\noexpand\_=\the\catcode`\_\relax
-}
-\@makeother\"\@makeother\'\@makeother\,%
-\@makeother\(\@makeother\!\@makeother\_
-\@ifundefined{ifsolutionsAtEnd}
-    {\newif\ifsolutionsAtEnd\solutionsAtEndtrue}{}
-\ifeq@nosolutions\solutionsAtEndfalse\fi
-\ifeq@solutionsafter\solutionsAtEndfalse\fi
-\@ifundefined{if@fleqn}{\let\fleqnOn\relax\let\fleqnOff\relax}
-    {\def\fleqnOn{\@fleqntrue}\def\fleqnOff{\@fleqnfalse}}
-\@ifundefined{if@inclkey}{\newif\if@inclkey\@inclkeytrue}{}
-\def\eqretnSymb{$\blacksquare$}%{\rule{6bp}{6.8bp}}
-\newcommand\exlabel{Exercise}
-\newcommand\exlabelsol{\exlabel}
-\newcommand\exsectitle{Solutions to \exlabel s}
-\newcommand\exsecrunhead{\exsectitle} %% change to @ form
-\newcommand{\exsolafter}{\eq@exsolafterDefault}
-\newcommand{\resetSolnAfterToDefault}{%
-    \def\exsolafter{\eq@exsolafterDefault}}
-\newcommand{\exsolafterDefault}[1]{\def\eq@exsolafterDefault{#1}%
-    \def\exSolafterDefault{#1}\resetSolnAfterToDefault}
-\exsolafterDefault{\textit{Solution}:}
-\newcommand{\renameSolnAfterTo}[1]{\def\exsolafter{#1}}
-\newcommand{\adjDisplayBelow}{\vskip-\lastskip\vskip-\baselineskip}
-\newcommand{\adjDisplayBelowPlus}{\adjDisplayBelow\recoverDisplayBelow}
-\def\recoverDisplayBelow{\vskip\belowdisplayskip}
-\newcommand\eq@sqslsectitle{Solutions to Quizzes}
-\newcommand\sqslsectitle{\eq@sqslsectitle}
-\newcommand\eq@sqslsecrunhead{Solutions to Quizzes}
-\newcommand\sqslsecrunhead{\eq@sqslsecrunhead}
-\newcommand\eq@sqsllabel{\protect\textbf{Solution to Quiz:}}
-\newcommand\sqsllabel{\eq@sqsllabel}
-\newcommand\sqsolafter{\textit{Solution}:}
-\newcommand{\sqDefaultFmtTitle}[1]%
-      {\def\eq@sqlabel{#1}\def\sqlabel{#1}}
-\newcommand\sqlabel{\eq@sqlabel}
-\sqDefaultFmtTitle{\textcolor{red}{Quiz}}
-\newcommand\eq@sqslrtnlabel{\protect\eqretnSymb}
-\newcommand\sqslrtnlabel{\eq@sqslrtnlabel}
-\newcommand\eqsqrtmsg{"Right!"}
-\newcommand\eqsqwgmsg{"Wrong!"}
-\newcommand\doNotShowAgainMsg{Do not show this message again}
-\newcommand\eq@bqlabel{Begin Quiz}
-\newcommand\bqlabel{\eq@bqlabel}
-\newcommand\eq@bqlabelISO{\eq@bqlabel}
-\newcommand\bqlabelISO{\eq@bqlabelISO}
-\newcommand\setDefShortQuizLabelName[1]%
-    {\def\eq@defaultShortQuizLabelName{#1}}
-\setDefShortQuizLabelName{Quiz}
-\newcommand\setDefQuizLabelName[1]
-    {\def\eq@defaultQuizLabelName{#1}}
-\setDefQuizLabelName{Quiz}
-\newcommand\eq@eqlabel{End Quiz}
-\newcommand\eqlabel{\eq@eqlabel}
-\newcommand\eq@Score{Score:}\newcommand\eq@OutOf{out of}
-\newcommand\eq@ptScore{Score:}
-\newcommand\stOutOf{of}
-\newcommand\eqScore{\eq@Score}\newcommand\eqOutOf{\eq@OutOf}
-\newcommand\eqptScore{\eq@ptScore}
-\newcommand\eqInitQuizMsg{%
-  "You must initialize the Quiz! Click on "+msg+"."}
-\newcommand\eqQuizTotalMsg{%
-  "\eqScore\space"+Score+" \eqOutOf\space"+nQuestions}
-\newcommand\eqQuizPointsMsg{%
-  "\eqptScore\space"+ptScore+" \eqOutOf\space"+nPointTotal}
-\newcommand\eqQuizPercentMsg{pcScore+"\%"}
-\newcommand\eqQuizGradeMsg{quizGrade}
-\newcommand\eqMadeChoice{%
-  "You have already made a choice."
-  + " Your choice was ("+Responses[probno]+")."
-  + " Do you want to change it?"}
-\newcommand\eq@local@CA{Correct}
-\newcommand\eq@local@RC{My Answers!}
-\newcommand\eq@local@AC{Please!}
-\newcommand\eq@local@CorrAnsButton{Ans}
-\newcommand{\eq@local@sqClearButton}{Clear}
-\newcommand\eqerrABS{"Absolute values not balanced. Please correct."}
-\dlJSStr[noquotes]\eqerrBadMathFunc{"The expression \""+aF[i]
-    +"\" is neither a defined function nor a valid math expression."}
-\newcommand\eqParens{"Parentheses"}
-\newcommand\eqBrackets{"Brackets"}
-\newcommand\eqBraces{"Braces"}
-\newcommand\eqerrDelimNotBal{aGroup[i][2] + " not balanced.
-    Please correct."}
-\newcommand\eqerrBadExp{"Invalid mathematical expression.
-    A problem with one of the exponents. Please correct."}
-\newcommand\eqerrUnfinishQuiz{"There is an unfinished quiz,
-    please finish before moving on to another."}
-\newcommand\noPeekMsg{"Viewing Solutions to quizzes is not allowed
-    until you take or finish this quiz!"}
-\newcommand\highThresholdMsg{"You are required to respond to all
-    questions before the quiz is evaluated."}
-\newcommand\eqSyntaxErrorUndefVar{"Syntax Error: Possibly an undefined
-    variable present, or an expression is not written in an expected
-    format."}
-\dlJSStr[noquotes]{\eqSyntaxErrorComma}{%
-    "Syntax Error: A comma was found"
-    + " in your response \""
-    + UserAns + "\". Please remove the comma, or this answer"
-    + " will be marked as wrong."}
-\newcommand{\limSelWarningMsg}{"For this question, you are allowed to
-    make at most " + n + " selections."}
-\newcommand{\defaultReqFormMsg}{%
-    "The expression is not in the expected form."}
-\PackageInfo{exerquiz}{* Using \eq@driver\space option *}
-\ifsolutionsonly
-\InputIfFileExists{\jobname_xdefs.cut}{%
-    \typeout{^^JExerquiz|Eqexam: Reading \jobname_xdefs.cut^^J}}
-    {\PackageWarningNoLine{exerquiz|eqexam}{%
-    \jobname_xdefs.cut not found.\MessageBreak
-     Recompile file under the vspacewithsolns\MessageBreak
-     option, then compile with the solutionsonly\MessageBreak
-     option}}
-\else
-\newwrite\ex@solns \immediate\openout \ex@solns \jobname.sol
-\newcommand{\writeToExSolns}[1]{%
-    \set@display@protect
-    \immediate\write\ex@solns{#1}%
-    \set@typeset@protect
-}
-\newwrite\eq@xrefdefns \immediate\openout\eq@xrefdefns\jobname_xdefs.cut
-\fi
-\newwrite\quiz@solns \immediate\openout \quiz@solns \jobname.qsl
-\newcommand{\writeToQzSolns}[1]{%
-    \set@display@protect
-    \immediate\write\quiz@solns{#1}%
-    \set@typeset@protect
-}
-\def\eq@IWAuxOut#1{\immediate\write\@auxout{#1}}
-\def\eq@IWDefs#1{\immediate\write\eq@xrefdefns{#1}}
-\newcounter{eqexno} \setcounter{eqexno}{0}
-\newcounter{@exno} \setcounter{@exno}{0}  % running exno
-\newcounter{quizno} \setcounter{quizno}{0}
-\renewcommand\thequizno{\alph{quizno}}
-\def\theHquizno{\curr@quiz.\theeqquestionnoi.%
-    \ifcase\@eqquestiondepth\or\or\arabic{eqquestionnoii}.%
-    \or\arabic{eqquestionnoii}.\roman{eqquestionnoiii}.%
-    \else\fi\alph{quizno}}
-\newlength\eqemargin \eqemargin=0pt
-\newcounter{eqpointvalue} \setcounter{eqpointvalue}{0}
-\newlength\eq@tmplength
-\newlength\eqtmplength
-\newcounter{questionno}
-\newcounter{eqquestionnoi}
-\newcounter{eqquestionnoii}
-\newcounter{eqquestionnoiii}
-\newcount\@eqquestiondepth \@eqquestiondepth=0
-\newcounter{grpquestionno}
-\newcounter{partno}
-\newif\ifuseNumForParts\useNumForPartsfalse
-\def\alphaParts{\def\partnoFmt{\alph}\useNumForPartsfalse}\alphaParts
-\def\numberParts{\def\partnoFmt{\arabic}\useNumForPartstrue}
-\renewcommand\thepartno{\partnoFmt{partno}}
-\newtoks\eq@scratchtoks
-\def\theHpartno{partno\the@exno\thepartno}
-\def\verbatimwrite{\@bsphack
-  \let\do\@makeother\dospecials
-  \catcode`\^^M\active \catcode`\^^I=12
-  \def\verbatim@processline{%
-    \immediate\write\verbatim@out
-      {\the\verbatim@line}}%
-  \verbatim@start}
-\def\endverbatimwrite{\@esphack}
-\providecommand\PBS[1]{\let\temp=\\#1\let\\=\temp}
-\newcommand\exlabelformat{{\scshape\exlabel\ \theeqexno.}}
-\newcommand\exlabelformatwp{\exlabelformat}
-\newcommand\exsllabelformat{\protect\textbf{\exlabelsol\ \theeqexno.}}
-\newcommand\exsllabelformatwp
-     {\protect\textbf{\exlabelsol\ \theeqexno(\thepartno)}}
-\newcommand\exrtnlabelformat{$\square$}
-\newcommand\exrtnlabelformatwp{$\square$}
-\newcommand{\belowexskip}[1]{\setlength{\eq@tmplength}{#1}%
-    \edef\eq@exerskip{\noexpand\removelastparskip
-    \noexpand\vskip\the\eq@tmplength\relax\kern0pt}}
-\let\eqexerskip\belowexskip
-\belowexskip{\medskipamount}
-\newcommand{\aboveexskip}[1]{\setlength{\eq@tmplength}{#1}%
-    \edef\eq@priorexskip{\noexpand\vskip\the\eq@tmplength\relax
-        \kern0pt}}
-\let\priorexskip\aboveexskip
-\aboveexskip{\medskipamount}
-\let\eq@postexerciseHook\relax
-\newcommand\belowexsolnskip{\protect\medskip}
-\def\removelastparskip{\ifdim\parskip>0pt\vskip-\parskip\fi}
-\newcommand{\nolinkcolor}[1]{\def\@nolinkcolor{#1}}
-\nolinkcolor{blue}
-\newcommand{\exerSolnsInExtFile}[2][]
-    {\let\exerSolns@ExtFile\eq@YES\gdef\eq@exerSolns@fileName{#2}%
-     \gdef\exerSolns@ReturnPath{#1}}
-\let\exerSolns@ExtFile\eq@NO
-\def\exerSolns@ReturnPath{}
-\let\marginparpriorhook\@empty % used to material before the exercise
-\let\marginparafterhook\@empty % used to material after the exercise
-\let\afterlabelhskip\space
-\let\exersolnheadhook\@empty
-\let\exer@solnheadhook\@empty
-\newcommand{\eqexheader}
-{%
-    \ifeq@nolink   % no link to solution
-        \mbox{\color{\@nolinkcolor}\if\exerstar*\exlabelformatwp\else
-        \exlabelformat\fi}%
-    \else
-        \if\exerSolns@ExtFile\eq@YES
-            \mbox{\href{\eq@exerSolns@fileName\#ex.\the@exno}%
-                {\exlabelformat}}%
-        \else
-            \mbox{\hyperlink{ex.\the@exno}{\exlabelformat}}%
-        \fi
-    \fi
-}
-\def\eqexheader@wrapper{\hypertarget{qex.\the@exno}{\eqexheader}}
-\newcommand{\partsformat}[1]{\def\eq@partsformat{#1}}
-\partsformat{(\hfil\thepartno\hfil)}
-\newcommand{\defaultpartsformat}{%
-    \partsformat{(\hfil\thepartno\hfil)}}
-\let\exlisttabheaderpriorhook\@empty
-\let\exlisttabheaderafterhook\@empty
-\newcommand{\eqexlisttabheader}
-{%
-    \exlisttabheaderpriorhook
-    \ifeq@nolink
-      \color{\@nolinkcolor}\eq@partsformat
-    \else
-      \if\exerSolns@ExtFile\eq@YES
-        \href{\eq@exerSolns@fileName\#ex.\the@exno\thepartno}%
-            {\eq@partsformat}%
-        \else
-            \hyperlink{ex.\the@exno\thepartno}{\eq@partsformat}%
-        \fi
-    \fi
-}
-\newcount\cq@Cnt
-\def\cq@CutName{cq-\the\cq@Cnt.cut}
-\let\cq@star\eq@NO
-\newif\ifcqqs \cqqstrue
-\newif\ifcqIsActive \cqIsActivefalse
-\def\cqQS{\@ifstar{\cqQSV}{\cqQSA}}
-\def\cqQSA#1#2{\ifcqqs#1\else#2\fi}
-\@ifpackageloaded{web}{\@ifundefined{IF@AorBswitch}{%
-    \PackageWarningNoLine{A version of the web package
-    dated\MessageBreak 2016/11/03 or later is required
-    for \string\cqQS}}}{}%
-\@ifundefined{webtempboxi}{\newbox\webtempboxi
-    \newbox\webtempboxii}{}
-\providecommand\SHOWTEMPBOXi{\unhbox\webtempboxi}
-\providecommand\TRUEACTIONi{\aftergroup\SETTEMPBOXii}
-\providecommand\TRUEACTIONia{\aftergroup\SHOWTEMPBOXi}
-\providecommand\FALSEACTIONii{\aftergroup\SETTEMPBOXi}
-\providecommand\FALSEACTIONiia{\aftergroup\SHOWTEMPBOXi}
-\providecommand\SETTEMPBOXi{\IF@AorBswitch\else
-    \afterassignment\TRUEACTIONia\fi
-    \setbox\webtempboxi=\hbox}
-\providecommand\SETTEMPBOXii{\IF@AorBswitch
-    \afterassignment\FALSEACTIONiia\fi
-    \setbox\webtempboxii=\hbox}
-\def\cqQSV{\let\IF@AorBswitch\ifcqqs
-    \IF@AorBswitch
-        \def\eq@next{\afterassignment\TRUEACTIONi\SETTEMPBOXi}\else
-        \def\eq@next{\afterassignment\FALSEACTIONii\SETTEMPBOXii}\fi
-    \eq@next}
-\def\eq@turnMessageOff{\let\save@message\message
-    \let\message\@gobble}
-\def\eq@turnMessageOn{\let\message\save@message}
-\def\eqCQDeclarations{\cqqsfalse\eq@turnMessageOff
-    \includecomment{sPage}\excludecomment{qPage}%
-    \eq@turnMessageOn}
-\def\eqTopOfSolnPage{\cqSAfalse
-    \eqCQDeclarations}
-\eq@turnMessageOff
-\includecomment{qPage}\excludecomment{sPage}
-\eq@turnMessageOn
-\def\writecqQSfalse{\writeToExSolns{\protect\eqTopOfSolnPage}}
-\AtBeginDocument{\writecqQSfalse}
-\newenvironment{cq@CQ}
-{%
-    \global\cqIsActivetrue
-    \global\advance\cq@Cnt1\relax
-    \immediate\openout\CommentStream=\cq@CutName
-    \let\verbatim@out\CommentStream
-    \verbatimwrite
-}{%
-    \endverbatimwrite
-    \immediate\closeout\CommentStream
-    \ifx\cq@star\eq@YES
-        \xdef\cq@INPUTCUT{\noexpand\cqqstrue
-            \noexpand\input{\cq@CutName}\noexpand
-            \def@QuesToSoln}\else
-        \xdef\cq@INPUTCUT{\noexpand\cqqstrue
-            \noexpand\input{\cq@CutName}\noexpand
-            \p@ssQuesToSoln}\fi
-    \aftergroup\cq@INPUTCUT
-}
-\newenvironment{cqs@CQ}{\let\cq@star\eq@YES\cq@CQ}{\endcq@CQ}
-\def\declCQQuesStr#1{\def\cqQStr{#1}}
-\declCQQuesStr{Question}
-\def\declCQSolStr#1{\def\cqSStr{#1}}
-\declCQSolStr{Solution}
-\newcommand\declCQPre[1]{\def\cq@Pre{#1}}
-\declCQPre{\emph{\cqQStr}:\space}
-\newcommand\declCQPost[1]{\def\cq@Post{#1}}
-\declCQPost{\par\medskip\noindent\emph{\cqSStr}:\space\ignorespaces}
-\def\cqFmtPasteQues#1{\cq@Pre\input{#1}\cq@Post}
-\def\p@ssQuesToSoln{\ifeq@hidesolution\else
-    \global\terminexchangedtrue % dps cq
-    \writeToExSolns{\protect
-        \decleqterminex{\protect\cqFmtPasteQues{\cq@CutName}}}\fi}
-\def\declCopyQues#1{\def\cqCopiedQues{#1}}
-\def\def@QuesToSoln{\restoreNormalSolns
-    \global\terminexchangedfalse % dps cq
-    \ifeq@hidesolution\else\writeToExSolns{\protect
-        \declCopyQues{\protect\input{\cq@CutName}}}\fi}
-\newcommand\restoreNormalSolns{%
-    \writeToExSolns{\protect\decleqterminex{\protect\eqterminexDEF}}}
-\newcommand{\eq@CommonCmd}[1]{\def\eq@@CommonCmd{#1}#1}
-\let\eq@@CommonCmd\@empty
-\newcommand\gExCommonCmd[1]{\gdef\gEx@CommonCmd{\eq@CommonCmd{#1}}}
-\let\gEx@CommonCmd\@empty
-\let\endexerhook\@empty
-\newenvironment{exercise}
-{%
-    \let\cq\cq@CQ\let\endcq\endcq@CQ
-    \csarg\let{cq*}\cqs@CQ
-    \csarg\let{endcq*}\endcqs@CQ
-    \par\removelastskip\eq@priorexskip\noindent
-    \let\eqCommonCmd\eq@CommonCmd
-    \def\eq@argi{eqexno}%% use eqexno counter
-    \if\eq@exerstarEnv*\def\exerstar{*}\else\def\exerstar{x}\fi
-    \def\currhideopt{x}%
-    \@ifnextchar[{\exercise@}%
-        {\if\exerstar*\def\eq@next{\@exercise}\else
-         \def\eq@next{\exercise@@}\fi\eq@next}%
-}{\eq@postexerciseHook\endexerhook\par
-    \global\eq@exerciseheadingtrue\removelastskip\eq@exerskip}
-\def\exercise@[#1]{\edef\eq@arg{#1}%
-    \if\eq@arg h\def\currhideopt{h}%
-        \eq@hidesolutiontrue\eq@nolinktrue%
-        \ifeq@globalshowsolutions
-            \eq@hidesolutionfalse\eq@nolinkfalse\fi
-        \def\eq@next{\@exercise}%   h, no *, no counter
-    \else
-        \if\eq@arg H%
-            \edef\currhideopt{\Hidesymbol}%
-            \eq@hidesolutiontrue\eq@nolinktrue%
-            \ifeq@globalshowsolutions
-                \eq@hidesolutionfalse\eq@nolinkfalse
-            \fi
-            \def\eq@next{\@exercise}%   H, no *, no counter
-        \else
-            \def\currhideopt{x}%
-            \ifx\eq@arg\@empty\else\def\eq@argi{#1}\fi
-            \if\exerstar*\def\eq@next{\@exercise}\else
-            \def\eq@next{\exercise@@}\fi
-        \fi
-    \fi
-\eq@next}
-\def\exercise@@{\@ifstar{\def\exerstar{*}\@exercise}{\exercise@@@}}
-\def\exercise@@@{\@ifnextchar[{\exercise@@@@}{\@exercise}}
-\def\exercise@@@@[#1]{\edef\eq@arg{#1}%
-    \if\eq@arg h\def\currhideopt{h}%
-        \eq@hidesolutiontrue\eq@nolinktrue
-        \ifeq@globalshowsolutions
-            \eq@hidesolutionfalse\eq@nolinkfalse\fi
-        \def\eq@next{\@exercise}%   h, no *, no counter
-    \else
-        \if\eq@arg H\edef\currhideopt{\Hidesymbol}%
-            \eq@hidesolutiontrue\eq@nolinktrue%
-            \def\eq@next{\@exercise}%   h, no *, no counter
-        \else
-            \def\currhideopt{x}%
-            \PackageWarning{exerquiz}{The option #1 is not recognized}
-            \let\eq@next\relax
-        \fi
-    \fi
-\eq@next}
-\newif\ifeq@exerciseheading \eq@exerciseheadingtrue
-\let\prior@exerSolnHeaderHook\@empty
-\newcommand\exerSolnHeader[3]{%
-    \prior@exerSolnHeaderHook
-    \ifeqforpaper\else\webnewpage\fi\markright{#1}%\par\noindent%
-    \noindent\hypertarget{#2}{#3}\relax
-    \solnhspace
-}
-\let\solnItemMngt\relax
-\let\eqEXt\@gobbletwo
-\let\endeqEXt\relax
-\let\eqExtArg\@empty
-\let\eqFilterArg\@empty
-\let\eqExerSolnHeader\@empty
-\let\solutionparshape\@empty
-\def\eq@pslnaindnt{0pt}
-\let\eq@setPrbSolnAftrIndnt\relax
-\newcommand{\setPrbSolnAftrIndent}[1]{\ifdim#1=0pt
-    \def\eq@pslnaindnt{0pt}\let\eq@setPrbSolnAftrIndnt\relax\else
-    \edef\eq@pslnaindnt{#1}\edef\eq@setPrbSolnAftrIndnt{%
-    \expandafter\noexpand\expandafter\parindent#1\noexpand\relax}\fi
-}
-\newif\if@restorejustify \@restorejustifyfalse
-\newcommand\restoreJustifyOn{\@restorejustifytrue}
-\newcommand\restoreJustifyOff{\@restorejustifyfalse}
-\def\restorejustify{\if@restorejustify
-    \@rightskip\z@skip \rightskip\@rightskip
-    \leftskip\z@skip \let\\\@normalcr\fi}
-\def\@exercise{%
-    \global\let\solutionparshape\@empty
-    \let\verbatim@out=\ex@solns
-    \if\eq@argi0\else\refstepcounter{\eq@argi}\fi\stepcounter{@exno}%
-    \if\exerstar*% if exercise with parts
-        \eq@nolinktrue
-    \else
-        \if\currhideopt H%
-        \else
-            \ifeq@solutionsafter
-                \eq@nolinktrue  % no link to solution
-            \else
-                \eq@ckglobalhide %
-                \ifeq@hidesolution\else
-                   \global\let\eqExerSolnHeader\eq@@writeexheader
-                \fi
-            \fi
-        \fi
-    \fi
-    \ifvmode\ifdim\lastskip>\z@
-        \vskip-\lastskip
-    \fi\fi
-    \if\exerstar*%
-        \let\solution\solnexer@woparts
-        \let\endsolution\endsolnexer@woparts
-        \let\parts\exercise@parts
-        \let\endparts\endexercise@parts
-    \else
-        \let\solution\solnexer@woparts
-        \let\endsolution\endsolnexer@woparts
-        \let\parts\relax
-        \let\endparts\relax
-        \if\Hidesymbol h\eq@nolinkfalse\ifeq@solutionsafter
-            \eq@nolinktrue\fi\fi
-    \fi
-    \eq@initializeContAnnot
-    \ifeq@exerciseheading
-    \prior@questionsHook\marginparpriorhook\noindent\eqexheader@wrapper
-    \afterlabelhskip\marginparafterhook\gEx@CommonCmd
-    \eq@setPrbSolnAftrIndnt\ignorespaces\fi
-}
-\newif\ifterminexchanged \terminexchangedfalse % dps cq
-\newcommand\decleqterminex[1]{\def\eqterminex{#1}}
-\def\eqterminexDEF{\relax\ignorespaces}
-\decleqterminex{\eqterminexDEF}
-\newif\ifmakeExSlLocal \makeExSlLocalfalse
-\def\makeExSolnsLocalOn{\makeExSlLocaltrue}
-\def\makeExSolnsLocalOff{\makeExSlLocalfalse}
-\def\eqExerSolnHeaderSngl{%
-    \ifmakeExSlLocal\protect\begingroup^^J\fi
-    \protect\eqEXt{\eqExtArg}{\eqFilterArg}\protect
-    \solnItemMngt\protect\exerSolnHeader{\exsecrunhead}{ex.\the@exno}%
-    {\exsllabelformat}\exer@solnheadhook
-    \exersolnheadhook\protect\eqterminex
-}
-\def\eq@@writeexheader{\set@display@protect
-    \immediate\write\verbatim@out{\eqExerSolnHeaderSngl}%
-    \set@typeset@protect
-}
-\def\eqExerSolnHeaderList{%
-    \ifmakeExSlLocal\protect\begingroup^^J\fi
-    \protect\eqEXt{\eqExtArg}{\eqFilterArg}\protect
-    \solnItemMngt\protect\exerSolnHeader{\exsecrunhead}%
-    {ex.\the@exno\thepartno}{\exsllabelformatwp}%
-    \exer@solnheadhook\exersolnheadhook\protect\eqterminex
-}
-\def\eq@@writeexheaderlist{\set@display@protect
-    \immediate\write\verbatim@out{\eqExerSolnHeaderList}%
-    \set@typeset@protect
-}
-\long\def\setsolnspace#1{\def\newsolnspace{#1}%
-    \let\solnspace\newsolnspace}
-\newif\ifeq@ckSolnVspace \eq@ckSolnVspacetrue
-\def\ckSolnOpt{\global\eq@ckSolnVspacetrue}
-\def\noSolnOpt{\global\eq@ckSolnVspacefalse}
-\let\solnhspace\space
-\let\solnspace\space
-\let\exsolnonceonlytophook\relax
-\def\solnexer@woparts{%
-  \ifanswerkey\ifeqe@flextended\ifcont@nnot
-  \ifx\solutionparshape\@empty\else % dpsj8
-    \pushEnvir
-      \everypar{}\if@eqalignfilllinestoleft\else
-      \parshape=1 \leadinIndent \linewidth\fi
-    \popEnvir
-  \fi\fi\fi\fi\def\bLeaveVspace{x}% = no vertical space added
-  \exsolnonceonlytophook % dps27
-  \global\let\exsolnonceonlytophook\relax
-  \@ifundefined{KV@eqefillLines@bgonly}{}
-    {\ifKV@eqefillLines@bgonly\ifvmode\else
-      \par\leavevmode\strut\fi\fi
-    \ifKV@eqefillLines@outlineonly\leavevmode\strut\fi}%
-    \ifeq@ckSolnVspace
-        \def\eq@next{\@ifnextchar[{\solnexer@@woparts}%]
-        {\solnexer@@woparts[\null]}}\else
-        \def\eq@next{\solnexer@@woparts[\null]}\fi
-    \eq@next
-}
-\let\eqPriorVspace\@gobble
-\newif\if@eqlinedfiller \@eqlinedfillerfalse
-\newcommand{\vspaceFiller}[1]{\vfill}
-\newcommand{\vspaceFillerDefault}[1]{\vfill}
-\def\eqWriteLine{\hfill}
-\def\eq@linesXPgs{%
-    \begingroup\offinterlineskip\parskip0pt
-    \@tempcnta=0
-    \@whilenum\@tempcnta<\soln@keys@nLines\relax\do
-    {\vskip0pt\penalty-50\vglue\wlVspace\eqWriteLine
-        \advance\@tempcnta1\relax}\par\endgroup
-}
-\let\leavevspace\relax % dpsj5
-\newcommand{\vspaceFmt}[1]{%
-  \ifx\solutionparshape\@empty\else
-      \advance\linewidth-\leadinIndentPrtSep\fi
-    \ifdim\sameVspace>0pt
-      \let\bLeaveVspace\@empty
-      \def\leavevspace{%
-        \ifx\eq@insertverticalspace\eq@YES\par\eq@quessolskip
-          \eqPriorVspace{#1}{\nobreak\noindent
-          \if@eqlinedfiller
-            \ifx\soln@keys@nLines\@empty
-              \def\eq@lines@next{\vspaceFiller{#1}}\else
-                \def\eq@lines@next{\eq@linesXPgs}\fi
-          \else
-            \def\eq@lines@next{\parbox[b][#1][t]{\linewidth}
-              {\vspaceFiller{#1}}}%
-          \fi\eq@lines@next}%
-        \fi
-      }\expandafter\leavevspace % dpsj6
-  \fi
-}
-\define@key{soln@keys}{nLines}[]{\def\soln@keys@nLines{#1}}
-\let\soln@keys@nLines\@empty
-\def\eqKV@errx#1{\xdef\XKV@rm{\@tempa}}
-\def\eqSolnForEqexam#1{%
-    \let\soln@keys@nLines\@empty
-    \setkeys*{soln@keys}{#1}%
-    \ifx\soln@keys@nLines\@empty
-        \ifx\minVspacet@bs\@empty\xdef\sameVspace{\XKV@rm}\else
-        \xdef\sameVspace{\minVspacet@bs}\fi
-    \else
-        \@tempdima\wlVspace
-        \@tempdima=\soln@keys@nLines\@tempdima
-        \xdef\sameVspace{\the\@tempdima}%
-       \ifx\XKV@rm\@empty\else
-            \if@equsedim\let\soln@keys@nLines\@empty
-                \xdef\sameVspace{\XKV@rm}\fi
-        \fi
-    \fi
-    \ifx\sameVspace\@empty\gdef\sameVspace{0pt}\fi
-}
-\def\solnexer@@woparts[#1]{%
-    \ifcqIsActive\else\ifterminexchanged
-        \restoreNormalSolns\fi\fi % dps cq
-    \global\cqIsActivefalse
-    \def\eq@argi{#1}\def\eq@null{\null}%
-    \ifx\eq@argi\@empty\gdef\sameVspace{0pt}\else
-        \ifx\eq@argi\eq@null\gdef\sameVspace{0pt}\else
-        \@ifundefined{PointsOnLeft}{%
-            \let\eqKV@errx@SAVE\KV@errx
-            \let\KV@errx\eqKV@errx\let\XKV@rm\@empty
-            \edef\temp@exp{\noexpand\setkeys*{soln@keys}{#1}}\temp@exp
-            \let\KV@errx\eqKV@errx@SAVE
-            \ifx\soln@keys@nLines\@empty\else
-            \PackageInfo{exerquiz}{%
-            nLines key detected in solution environment,\MessageBreak
-            is not not recognized without eqexam,\MessageBreak
-            will remove it}%
-            \let\soln@keys@nLines\@empty\fi
-            \xdef\sameVspace{\XKV@rm}%
-        }{\eqSolnForEqexam{#1}}%
-    \fi\fi
-    \solnexer@@@woparts
-}
-\def\solnsafterSkip#1{\setlength{\@tempdima}{#1}%
-    \edef\solnsafterSkipAmt{\the\@tempdima}%
-    \def\solutionsafterSkip{\vskip\solnsafterSkipAmt\relax}}
-\solnsafterSkip{\smallskipamount}
-\def\@solnafterSkipOnce#1{\setlength{\@tempdima}{#1}%
-    \xdef\@solnafterSkipOnceAmt{\the\@tempdima}}%
-\def\@@solnafterSkipOnce{\vskip\@solnafterSkipOnceAmt\relax %dpsj3
-  \gdef\@solnafterSkipOnceAmt{0pt}}
-\def\@solnafterSkipOnceAmt{0pt}
-\def\quessolSkip#1{\setlength{\@tempdima}{#1}%
-  \edef\eq@quessolskip{\noexpand\vskip\the\@tempdima\relax}}
-\def\eq@quessolskip{\vskip\smallskipamount}
-\def\eqe@debugVertSkip#1{}
-\def\eqe@showEndHere#1{#1}
-\def\eqe@setStartSolns{%
-    \xdef\eq@startSoln{\the\pagetotal}%
-    \eqe@debugVertSkip{\marginpar{\smash{b[\sameVspace]}}}%
-}
-\let\eqSavedComment\comment
-\let\eqSavedEndCommet\endcomment
-\def\setTabulrSolnEnv{%
-    \@ifundefined{@listii@SAVE}{\global\let\@listii@SAVE\@listii}{}%
-    \expandafter\def\expandafter\@listii\expandafter{\@listii@SAVE
-      \leftmargin\leftmarginii \labelwidth\leftmarginii
-      \advance\labelwidth-\labelsep}%
-    \def\everyparShape{\everypar{\parshape \@ne 0pt \linewidth}}%
-    \reset@doendpe{\parshape \@ne 0pt \linewidth}%
-    \parshape \@ne 0pt \linewidth
-    \everyparShape
-}
-\newif\ifthereissolution
-\let\priorexsolafterList\@empty
-\let\priorexsolafterTab\@empty
-\let\priorexsolafterSngl\@empty
-\def\eq@Hid{H}\def\eq@hid{h}
-\def\solutionafterExCmds#1{\def\@rgi{#1}\ifx\@rgi\@empty
-  \let\eqSolnExCmds\relax\else
-  \def\eqSolnExCmds{#1}\fi}
-\let\eqSolnExCmds\relax
-\def\eq@b@ddCodeSpecialDef#1{#1}% dpsj4
-\let\eq@b@ddCodeSpecial\eq@b@ddCodeSpecialDef % dpsj4
-\def\solnexer@@@woparts{\ifeq@solutionsafter\else
-    \expandafter\begingroup\fi %dpsj10
-  \global\thereissolutiontrue
-  \global\let\procsoln\relax    % dpsj6
-  \global\let\endprocsoln\relax % dpsj6
-  \def\exerwparts@cols{0}%
-  \let\verbatim@out\ex@solns
-  \if\currhideopt\eq@Hid
-    \let\minVspacet@bs\@empty
-    \let\procsoln\eqSavedComment
-    \let\endprocsoln\eqSavedEndCommet
-    \def\eq@next{\procsoln}%
-  \else
-    \eq@ckglobalhide
-    \ifeq@hidesolution
-      \let\procsoln\eqSavedComment
-      \let\endprocsoln\eqSavedEndCommet
-    \else
-      \ifeq@solutionsafter\else
-          \ifx\eq@@CommonCmd\@empty\else
-              \set@display@protect
-              \immediate\write\verbatim@out{\eq@@CommonCmd}%
-              \set@typeset@protect
-          \fi
-      \fi
-        \let\procsoln\verbatimwrite
-        \let\endprocsoln\endverbatimwrite
-    \fi
-    \def\eq@next{%
-      \ifeq@solutionsafter
-        \let\procsoln\relax % dpsj6
-        \let\endprocsoln\relax
-        \removelastskip\removelastparskip
-        \cqSAtrue\eqCQDeclarations
-        \declCopyQues{\input{\cq@CutName}}%
-        \ifx\exsolafter\@empty
-          \ifdim\sameVspace=0pt\eqe@setStartSolns
-          \else
-            \solutionsafterSkip
-            \@@solnafterSkipOnce % dpsj3
-            \eqe@setStartSolns
-          \fi
-        \else\par\kern0pt
-          \solutionsafterSkip
-          \@@solnafterSkipOnce % dpsj3
-          \noindent\strut\eqe@setStartSolns
-        \fi
-        \parskip\eqeques@parsep
-        \ifx\endparts\endexercise@parts@tabular
-          \eq@setPrbSolnAftrIndnt
-          \restorejustify
-        \fi
-        \ifx\endparts\endexercise@parts@tabular\expandafter
-          \priorexsolafterTab\else
-        \ifx\endparts\endexercise@parts@list\expandafter
-          \priorexsolafterList\else\expandafter
-          \priorexsolafterSngl\fi\fi
-        \exsolafter\space\ignorespaces
-        \solutionparshape
-      \else
-        \eqExerSolnHeader
-        \global\let\eqExerSolnHeader\@empty
-        \global\therearesolutionstrue\expandafter\procsoln
-      \fi
-    }%
-  \fi
-  \eq@b@ddCodeSpecial{\eq@next}%
-}% dpsj4
-\let\endsolnexerhook\@empty
-\let\pkg@endsolnexerhook\@empty
-\let\endsolnexerhookaux\@empty
-\def\eq@fititin#1{\noindent\unskip\nobreak\hfill\penalty100
-    \hskip1em\hbox{}\nobreak\hfill#1}%
-\let\eqfititin\eq@fititin
-\def\ReturnTo#1#2{\eq@fititin{\hyperlink{#1}{#2}}}
-\def\xReturnTo#1#2{\eq@fititin{\href{#1}{#2}}}
-\newcommand\eqExerSolnTrailer{%
-    \if\exerSolns@ExtFile\eq@YES\protect\xReturnTo
-        {\exerSolns@ReturnPath\jobname\#qex.\the@exno}%
-    \else\protect\ReturnTo{qex.\the@exno}\fi
-    {\protect\mbox{\if\exerstar*\exrtnlabelformatwp\else
-        \exrtnlabelformat\fi}}%
-    \protect\endeqEXt\ifeqforpaper\protect\par{\belowexsolnskip}\fi^^J%
-    \ifmakeExSlLocal\protect\endgroup^^J\fi
-}
-\let\eq@e@ddCodeSpecialDef\relax % dpsj4
-\let\eq@e@ddCodeSpecial\eq@e@ddCodeSpecialDef % dpsj6
-\let\kdvsp@Restore\relax % dpsj20
-\def\endsolnexer@woparts{\endprocsoln\eq@e@ddCodeSpecial
-  \pkg@endsolnexerhook % djsj8 moved from the end of the macro
-  \ifeq@solutionsafter\else
-    \expandafter\endgroup\fi % from \begingroup at \solnexer@@@woparts
-  \global\let\exsolnonceonlytophook\relax
-  \ifx\sameVspace\@empty\gdef\sameVspace{0pt}\fi % dpsj5
-  \ifvspacewithsolns\vspaceFmt{\sameVspace}\else
-  \ifeq@nosolutions\ifeq@solutionsafter\else
-    \vspaceFmt{\sameVspace}\fi\fi\fi
-  \if\currhideopt H%
-  \ifkeepdeclaredvspacing\vskip\sameVspace\fi
-  \else
-    \ifeq@solutionsafter
-      \ifx\isitleadin\eq@YES\parshape=0 \fi % dpsj9
-      \if\exerstar*%
-      \eq@fititin{\mbox{\exrtnlabelformatwp}}\else
-      \eq@fititin{\mbox{\exrtnlabelformat}}\fi
-      \ifx\istabularexer\eq@YES\unskip\kern0pt\else\par\fi % dpsj6
-      \ifx\minVspacet@bs\@empty
-        \ifkeepdeclaredvspacing
-          \@tempdima\pagetotal
-          \advance\@tempdima-\eq@startSoln
-          \@tempdimb\sameVspace\relax
-          \ifdim\@tempdimb>1sp\relax
-            \advance\@tempdimb-\@tempdima
-            \ifdim\@tempdimb>0pt\vglue\@tempdimb\kern0pt
-              \let\eqe@showEndHere\@gobble
-              \edef\tmp@exp{\noexpand\marginpar{%
-                \noexpand\smash{e: adj \the\@tempdimb}}}%
-                \eqe@debugVertSkip{\tmp@exp}%
-            \fi
-          \fi
-        \fi
-        \eqe@showEndHere{\eqe@debugVertSkip{\marginpar{\smash{e}}}}%
-        \fi
-      \else
-        \eq@ckglobalhide
-        \ifeq@hidesolution\else
-          \endsolnexerhookaux
-          \let\verbatim@out\ex@solns
-          \set@display@protect
-          \immediate\write\verbatim@out{\eqExerSolnTrailer}%
-          \set@typeset@protect
-        \fi
-      \fi
-    \fi
-    \kdvsp@Restore % dpsj20
-    \endsolnexerhook\penalty0\relax}
-\let\eq@exerstarEnv\relax
-\newenvironment{exercise*}{\def\eq@exerstarEnv{*}\exercise}
-{\endexercise}
-\def\exerwparts@cols{0}
-\let\topofpartshook\relax
-\let\@listiiredefined\eq@NO
-\let\itsExerParts\eq@NO
-\newif\if@tableadinitem\@tableadinitemfalse
-\newcommand{\tableadin@external}{\PackageError{exerquiz/eqexam}
-    {The \string\tableadin\space command is designed\MessageBreak
-     for the problem* environment of eqexam}{Use \string\tableadin\space
-     in the problem* environment of eqexam.}%
-}
-\let\tableadin\tableadin@external
-\newcommand{\eq@tableadinparts}{\item\relax
-    \PackageError{exerquiz/eqexam}{The \string\tableadin\space
-        command is not allowed in the\MessageBreak
-        parts environment}{Use \string\tableadin\space
-        in the problem* environment of eqexam.}%
-}
-\let\istabularexer\eq@NO
-\def\exercise@parts{\let\rlspar\relax
-  \ifx\solutionparshape\@empty
-    \let\isitleadin\eq@NO
-    \if@tableadinitem\let\rlspar\@gobbletwo\fi
-  \else\let\isitleadin\eq@YES\fi
-  \rlspar\removelastskip\par
-  \if\isitleadin\eq@YES
-    \def\eqparts@topsep{0pt}%
-    \vskip\eqparts@itemsep\relax\fi
-  \topofpartshook
-  \let\itsExerParts\eq@YES
-  \global\let\@listiiredefined\eq@NO
-  \def\exerwparts@cols{0}\@ifnextchar[%
-  {%
-   \if@tableadinitem\else\removelastparskip\fi
-   \let\endparts\endexercise@parts@tabular\exercise@parts@tabular@}%
-  {\let\endparts\endexercise@parts@list\exercise@parts@list}}
-\def\eq@extralabelsep{0pt}
-\newcommand{\setPartsWidth}[1]{\def\parts@indent{\normalfont#1}%
-    \bgroup\settowidth{\eq@tmpdima}{\parts@indent}%
-    \xdef\widthOfParts{\the\eq@tmpdima}\egroup}
-\setPartsWidth{(d)}
-\def\eqe@prtsepPrb{\ }
-\providecommand{\prbPrtsep}[1]{\def\eqe@prtsepPrb{#1}}
-\providecommand{\exPrtsep}[1]{\def\eqe@prtsepPrb{#1}}
-\providecommand{\eqequesparsep}[1]{\def\eqeques@parsep{#1}}
-\eqequesparsep{0pt}
-\let\prior@parts@hook\@empty
-\let\post@parts@hook\@empty
-\let\abovepartshook\@empty
-\let\belowpartshook\@empty
-\let\eqp@rtc@lcm@rk\relax
-\let\eq@insertContAnnot\relax
-\def\eq@item@common{\eq@insertContAnnot\eqp@rtc@lcm@rk
-    \def\currhideopt{x}\eq@hidesolutionfalse\eq@nolinkfalse
-    \@ifnextchar[{\@ckhide}{\eq@item}}
-\newcommand{\partsitemsep}[1]{{%
-    \setlength{\@tempdima}{#1}%
-    \xdef\eqparts@itemsep{\the\@tempdima}}}
-\let\eqpartsitemsep\partsitemsep
-\def\eqparts@itemsep{0pt}
-\newcommand\partsparsep[1]{{%
-    \setlength{\@tempdima}{#1}%
-    \xdef\eqparts@parsep{\the\@tempdima}}}
-\def\eqparts@parsep{0pt}
-\newcommand\partstopsep[1]{{%
-    \setlength{\@tempdima}{#1}%
-    \xdef\eqparts@topsep{\the\@tempdima}}}
-\def\eqparts@topsep{3pt}
-\newcommand{\leadinitem@external}{\PackageError{exerquiz/eqexam}
-    {The \string\leadinitem\space command is designed to be\MessageBreak
-     the first item in the problem*\MessageBreak
-     environment above the parts environment}
-     {Use \string\leadinitem\space in the problem* environment.}%
-}
-\let\leadinitem\leadinitem@external
-\let\itsforleadinitem\eq@NO
-\newcommand{\eq@leadinitemparts}{\item\relax
-    \PackageError{exerquiz/eqexam}{The \string\leadinitem\space
-        command is not allowed in the\MessageBreak
-        parts environment}
-     {Use \string\leadinitem\space in the problem* environment.}%
-}
-\def\eq@handleOptArg[#1]{\def\eq@optArg{[#1]}\eq@handleOptArgi}
-\def\eq@handleOptArgi{\expandafter
-    \eq@item@latex\eq@optArg\exlisttabheaderafterhook}
-\newif\ifwithinparts
-\let\ex@listtabheader@fterhook\@empty
-\newenvironment{exercise@parts@list}{%
-    \settowidth{\eq@tmplength}{\parts@indent}%
-    \edef\widthOfParts{\the\eq@tmplength}%
-    \eq@initializeContAnnot\eq@nolinkfalse\prior@parts@hook
-    \abovepartshook\list{\normalfont
-    \if\Hidesymbol h\eq@nolinkfalse\ifeq@solutionsafter
-        \eq@nolinktrue\fi\fi
-    \if\currhideopt H%
-    \else
-        \ifeq@solutionsafter
-            \eq@nolinktrue  % no link to solution
-        \else
-            \ifeq@nosolutions
-                \eq@nolinktrue  % no link to solution
-            \else
-                \eq@ckglobalhide
-                \ifeq@hidesolution\eq@nolinktrue\else
-                    \global\let\eqExerSolnHeader\eq@@writeexheaderlist
-                \fi
-            \fi
-        \fi
-    \fi
-    \makebox[\widthOfParts][r]{\eqexlisttabheader}%
-}{%
-    \usecounter{partno}%
-    \if\isitleadin\eq@YES
-        \settowidth{\eq@tmplength}{\parts@indent\eqe@prtsepPrb}%
-        \xdef\prtsIndntSep{\the\eq@tmplength}%
-        \if\itsforleadinitem\eqe@YES\setcounter{partno}{\fliPartNo}\else
-        \setcounter{partno}{1}\fi\fi
-    \let\leadinitem\eq@leadinitemparts
-    \let\tableadin\eq@tableadinparts
-    \global\let\solutionparshape\@empty
-    \setlength{\topsep}{\eqparts@topsep}%
-    \setlength{\parskip}{0pt}%
-    \setlength{\partopsep}{0pt plus 1pt minus 1pt}%
-    \ifdim\eqeques@parsep=0pt
-        \setlength{\parsep}{\eqparts@parsep}%
-    \else
-        \setlength{\parsep}{\eqeques@parsep}%
-    \fi
-    \setlength{\itemsep}{\eqparts@itemsep-\parsep}%
-    \setlength{\itemindent}{0pt}%
-    \setlength{\listparindent}{\parindent}%
-    \settowidth{\labelsep}{\normalfont\eqe@prtsepPrb}%
-    \addtolength{\labelsep}{\eq@extralabelsep}%
-    \settowidth{\labelwidth}{\parts@indent}%
-    \setlength{\leftmargin}{\labelwidth}%
-    \addtolength{\leftmargin}{\labelsep}%
-    \let\eq@item@latex\item
-    \def\eq@item{\@ifnextchar[{\eq@handleOptArg}
-        {\eq@item@latex\ex@listtabheader@fterhook
-            \exlisttabheaderafterhook}}%
-    \def\eqthisenv{parts}\withinpartstrue
-    \def\item{\ifx\@currenvir\eqthisenv
-        \def\eq@next{\eq@item@common}\else
-        \def\eq@next{\eq@item}\fi
-    \eq@next}%
-}}{\endlist\global\let\leadinitem\leadinitem@external
-    \post@parts@hook\belowpartshook}
-\def\eq@initializeContAnnot{\@ifundefined{eqequestions}
-    {\global\let\eqeCurrProb\relax}
-    {\xdef\eqeCurrProb{\theeqquestionnoi}}%
-    \xdef\eq@currProbStartPage{\arabic{page}}%
-}
-\define@key{tabp@rts}{nCols}{\def\exerwparts@cols{#1}}
-\define@key{tabp@rts}{minVspace}{\def\minVspacet@bs{#1}}
-\let\minVspacet@bs\@empty
-\def\minVspacetabs#1{\def\minVspacet@bs{#1}}
-\def\priorexsolafterTab{\ifkeepdeclaredvspacing
-    \ifeq@solutionsafter\ifx\minVspacet@bs\@empty\else
-        \priorexsolafterTab@cont\fi\fi\fi}
-\def\priorexsolafterTab@cont{\let\exsolafter@save\exsolafter
-    \let\exsolafter\@empty
-    \makebox[0pt][r]{\parbox[t][\minVspacet@bs][t]{0pt}
-        {\strut\hfill\vfill\strut}}%
-    \minipage[t]{\linewidth}\exsolafter@save}
-\def\pkg@endsolnexerhook{\ifkeepdeclaredvspacing
-    \ifeq@solutionsafter\ifx\minVspacet@bs\@empty\else
-        \endminipage\fi\fi\fi}
-\def\exercise@parts@tabular@[#1]{%
-  \inittabMark
-  \let\eq@insertContAnnot\relax
-  \let\exerwparts@cols\@empty
-  \setkeys*{tabp@rts}{#1}\ifx\exerwparts@cols\@empty
-    \edef\exerwparts@cols{\XKV@rm}\fi
-  \ifx\minVspacet@bs\@empty\keepdeclaredvspacingfalse\fi
-  \let\istabularexer\eq@YES
-  \@tempcnta\exerwparts@cols\relax
-  \ifnum\@tempcnta<2\relax
-        \PackageError{exerquiz}{%
-        The number of columns for parts\MessageBreak
-        needs to be an integer greater than 1}
-        {Enter an integer, 2 or larger}\fi
-  \exercise@parts@tabular}
-\newcount\eq@extabColCnt
-\def\autotabOn{\let\eq@tabMarkChk\relax%
-    \PackageInfo{exerquiz/eqexam}{Executing \string\autotabOn}}
-\def\autotabOff{\let\eq@tabMarkChk\@gobble
-    \PackageInfo{exerquiz/eqexam}{Executing \string\autotabOff}}
-\autotabOff
-\def\inittabMark{\global\eq@extabColCnt=0 }
-\def\resettabMark{\global\eq@extabColCnt=1 }
-\newcommand\autotabnewline[1][\eqparts@tabrowsep]{%
-    \ifnum\exerwparts@cols>0\relax
-    \ifx\eq@tabMarkChk\@gobble
-        \def\eq@atnext{\expandafter
-            \tabularnewline\expandafter[#1]}\else
-        \def\eq@atnext{\resettabMark\tabularnewline
-            \noalign{\expandafter\kern#1}}\fi
-    \expandafter\eq@atnext\fi}
-\def\eq@tabMark{%
-    \ifnum\eq@extabColCnt=0\relax
-        \global\advance\eq@extabColCnt1\relax
-        \let\eq@next\relax
-    \else
-        \ifnum\eq@extabColCnt=1\relax
-            \let\eq@next\relax
-        \else
-            \ifnum\eq@extabColCnt>\exerwparts@cols
-                \let\eq@next\autotabnewline
-            \else\def\eq@next{&}\fi
-        \fi
-    \fi
-    \eq@next
-    \global\advance\eq@extabColCnt1\relax
-}
-\newcommand\partstabcolsep[1]{\def\eq@partstabcolsep{#1}}
-\partstabcolsep{1.5pt}
-\newcommand\partstabtopsep[1]{\def\eq@partstabtopsep{#1}}
-\partstabtopsep{3pt}
-\def\eq@vpartstabtopsep{\vskip\eq@partstabtopsep\relax}
-\newcommand\partstabrowsep[1]{\setlength{\@tempdima}{#1}%
-    \edef\eqparts@tabrowsep{\the\@tempdima}}
-\partstabrowsep{0pt}
-\newenvironment{exercise@parts@tabular}{%
-    \setcounter{partno}{0}%
-    \def\tablrIndent{\hglue\prtsIndntSep\relax}%
-    \if\isitleadin\eq@YES
-        \if$\the\everypar$\let\tablrIndent\relax\fi
-        \setcounter{partno}{1}\fi
-    \let\leadinitem\eq@leadinitemparts
-    \let\tableadin\eq@tableadinparts
-    \global\let\solutionparshape\@empty
-    \settowidth{\eq@tmplength}{\parts@indent\eqe@prtsepPrb}%
-    \xdef\prtsIndntSep{\the\eq@tmplength}%
-    \sbox{\eq@tmpbox}{\parts@indent}%
-    \let\eq@item@latex\item
-    \let\eq@item\item@part@tabular
-    \def\eqthisenv{parts}\withinpartstrue
-    \def\item{\ifx\@currenvir\eqthisenv
-        \def\eq@next{\eq@tabMarkChk\eq@tabMark\eq@item@common}\else
-        \def\eq@next{\eq@item@latex}\fi
-    \eq@next}\eq@nolinkfalse
-    \@ifundefined{@xtabularcr}{\let\@xarraycr\eq@xtabularcr}
-    {\let\@xtabularcr\eq@xtabularcr}%
-    \eq@tmpdima=\linewidth
-    \advance\eq@tmpdima-\prtsIndntSep\relax
-    \@tempcnta\exerwparts@cols\relax
-    \advance\@tempcnta-1\relax
-    \multiply\@tempcnta2\relax
-    \@tempdima\prtsIndntSep\relax
-    \divide\@tempdima 2\relax
-    \edef\halfWidth{\the\@tempdima}%
-    \advance\@tempdima\eq@partstabcolsep\relax
-    \tabcolsep\@tempdima
-    \multiply\@tempdima\@tempcnta
-    \advance\eq@tmpdima-\@tempdima
-    \divide\eq@tmpdima by\exerwparts@cols\relax %dpsj3
-    \edef\widthOfPartsBox{\the\eq@tmpdima}% dpsj2
-    \if@tableadinitem\else\vskip\eq@partstabtopsep\relax\fi
-    \noindent\normalbaselines\kern0pt
-    \prior@parts@hook\abovepartshook
-    \tablrIndent\tabular[t]{@{}*{\exerwparts@cols}{>{\setTabulrSolnEnv
-        \parskip\eqeques@parsep\relax
-        \parindent0pt\relax\strut}p{\eq@tmpdima}}@{\hidewidth}}%
-}{\endtabular\kern0pt
-    \@ifundefined{@listii@SAVE}{}{\global\let\@listii\@listii@SAVE
-    \global\let\@listii@SAVE\relax}%
-    \post@parts@hook\belowpartshook
-    \aftergroup\eqe@innermarkpts
-    \aftergroup\eq@vpartstabtopsep}
-\let\eqe@innermarkpts\relax
-\def\item@part@tabular{\refstepcounter{partno}%
-  \global\let\eqExerSolnHeader\@empty
-  \ifeq@solutionsafter
-    \eq@nolinktrue  % no link to solution
-  \else\ifeq@nosolutions
-    \eq@nolinktrue  % no link to solution
-  \else
-      \eq@ckglobalhide
-      \ifeq@hidesolution\eq@nolinktrue\else
-      \gdef\eqExerSolnHeader{\eq@@writeexheaderlist}%
-  \fi\fi\fi
-  \if@restorejustify\restorejustify\else\PBS\raggedright\fi
-  \settowidth{\eq@tmplength}{\parts@indent\eqe@prtsepPrb}%
-  \xdef\prtsIndntSep{\the\eq@tmplength}%
-  \sbox{\eq@tmpbox}{\parts@indent}%
-  \eq@tmpdima=\wd\eq@tmpbox
-  \addtolength\eq@tmplength{\eq@extralabelsep}%
-  \xdef\partshangamount{\the\eq@tmplength}%
-  \parshape \@ne 0pt \linewidth
-  \everypar{\parshape \@ne 0pt \linewidth}%
-  \eq@setPrbSolnAftrIndnt
-  \makebox[0pt][r]{\eqexlisttabheader\eqe@prtsepPrb}%
-    \ex@listtabheader@fterhook
-    \exlisttabheaderafterhook\ignorespaces
-}
-\def\@ckhide[#1]{\edef\eq@arg{#1}%
-    \def\currhideopt{x}%
-    \ifx\eq@arg\@empty\else
-    \if\eq@arg\eq@Hid
-        \eq@hidesolutiontrue\eq@nolinktrue%
-        \edef\currhideopt{\Hidesymbol}%
-    \else
-        \ifeq@globalshowsolutions\else
-            \if\eq@arg\eq@hid
-                \eq@hidesolutiontrue\eq@nolinktrue%
-                \def\currhideopt{h}%
-            \fi
-        \fi
-    \fi\fi
-    \eq@item
-}
-\def\tabControlOn{\@ifundefined{@xtabularcr}
-    {\let\save@@xtabularcr\@xarraycr}
-    {\let\save@@xtabularcr\@xtabularcr}}
-\def\tabControlOff{\@ifundefined{@xtabularcr}
-    {\let\@xarraycr\save@@xtabularcr}
-    {\let\@xtabularcr\save@@xtabularcr}}
-\AtBeginDocument{\tabControlOn}
-\def\eq@xtabularcr{\@ifnextchar[{\save@@xtabularcr}
-    {\eqe@tab@parts@rowsep}}%
-\def\eqe@tab@parts@rowsep{\save@@xtabularcr
-    \noalign{\expandafter\kern\eqparts@tabrowsep}}%
-\define@key{exEnum}{labelwidthTo}[\normalsize\normalfont\bfseries00.\ ]%
-    {\def\exE@labelwidthTo{#1}}
-\define@key{exEnum}{labelwidth}[\@empty]{\def\exE@labelwidth{#1}}
-\let\exE@labelwidth\@empty
-\define@key{exEnum}{topsep}[3pt]{\def\exE@topsep{#1}}
-\define@key{exEnum}{parsep}[3pt]{\def\exE@parsep{#1}}
-\define@key{exEnum}{itemsep}[0pt]{\def\exE@itemsep{#1}}
-\define@key{exEnum}{labelsep}[\normalsize\normalfont\ ]%
-    {\settowidth{\@tempdima}{#1}\edef\exE@labelsep{\the\@tempdima}}
-\define@key{exEnum}{continue}[]{\let\eq@ExEnumResetCnt\@empty}
-\def\eq@ExEnumResetCnt{\setcounter{questionno}{0}}
-\setkeys{exEnum}{labelwidthTo,topsep,parsep,itemsep,labelsep}%
-\newenvironment{exEnumerate}[1][]{\everypar{}%
-    \toks@=\expandafter{#1}%
-    \edef\tempexp{\noexpand\setkeys{exEnum}{\the\toks@}}\tempexp
-    \eq@ExEnumResetCnt
-    \let\afterlabelhskip\@empty
-    \let\solnhspace\@empty
-    \aboveexskip{0pt}\belowexskip{\exE@parsep}%\belowexskip{0pt}%
-    \def\eqexheader@wrapper{\makebox[0pt][r]{%
-        \hypertarget{qex.\the@exno}{\eqexheader}\hspace{\labelsep}}}%
-    \def\exbookmarkfmt{\thequestionno.\space}
-    \def\partbookmarkfmt{(\thepartno)\space}
-    \def\setENum{\Elabel\if\exerstar*\thequestionno(\thepartno)\else
-        \thequestionno\fi}%
-    \ifExSolutionsSet\else
-    \writeToExSolns{^^J\protect\begin{exEnumerate}^^J}\fi
-    \list{}{%
-        \ifx\exE@labelwidth\@empty
-        \settowidth{\labelwidth}{\exE@labelwidthTo}\else
-        \setlength{\labelwidth}{\exE@labelwidth}\fi
-        \setlength{\topsep}{\exE@topsep}%
-        \ifdim\parskip>\z@\addtolength{\topsep}{-\parskip}\fi
-        \setlength{\parsep}{\exE@parsep}%
-        \setlength{\itemsep}{\exE@itemsep}%
-        \setlength{\itemindent}{0pt}%
-        \setlength{\listparindent}{0pt}%
-        \setlength{\itemindent}{0pt}%
-        \settowidth{\labelsep}{\normalfont\ }%
-        \setlength{\leftmargin}{\labelwidth}%
-    }\item\relax}{\ifExSolutionsSet\else
-        \writeToExSolns{\protect\end{exEnumerate}^^J}\fi
-\endlist}
-\newenvironment{enumex}{%
-    \renewcommand\exlabelformat{\textbf{\thequestionno.}}%
-    \renewcommand\exsllabelformat
-        {\protect\makebox[0pt][r]{\protect\textbf{\thequestionno.\ }}}%
-\begin{exercise}[questionno]}{\end{exercise}}
-\newenvironment{enumex*}{%
-    \renewcommand\exlabelformatwp{\textbf{\thequestionno.}}%
-    \renewcommand\exsllabelformatwp
-        {\protect\makebox[0pt][r]{\protect\textbf{\thequestionno.}\ }%
-            \protect\textbf{(\thepartno)}\ }%
-\begin{exercise*}[questionno]}{\end{exercise*}}
-\def\includeexersolutions{\@ifstar
-    {\let\resetEXsolns\relax\includeexersolutionsi}
-    {\def\resetEXsolns{\global\let\include@solutions\relax}%
-     \includeexersolutionsi}%
-}
-\newcommand{\includeexersolutionsi}[1][]{%
-    \filterFor{#1}\includeexersolutionsii
-}
-\def\includeexersolutionsii{%
-   \if\exerSolns@ExtFile\eq@NO
-        \include@solutions
-        \resetEXsolns
-        \let\eqFilterArg\@empty
-   \fi
-}
-\long\def\gobbleToEndEXt#1\endeqEXt{%
-    \ifeqforpaper\expandafter\@gobbletwo\fi}
-\newcommand\filterFor[1]{\def\eqFilterArg{#1}}
-\newcommand\inclEXtFilter[2]{\def\eqargii{#2}\ifx\eqargii\eqFilterArg
-    \else\expandafter\gobbleToEndEXt\fi}
-\newcommand\useEXtFilter{\let\eqEXt\inclEXtFilter}
-\let\eqsolutionshook\@empty
-\let\eq@solutionshook\@empty
-\let\priorexsectitle\@empty
-\let\priorexslinput\@empty
-\def\exerSolnsHeadnToc{\section*{\exsectitle}%
-    \addcontentsline{toc}{section}{%
-    \@ifundefined{web@latextoc}{}{%
-    \ifx\web@latextoc\eq@YES\else
-    \protect\numberline{}\fi}\exsectitle}}
-\@ifpackageloaded{web}{\def\eq@normallheader{\lheader{\rightmark}}}
-    {\let\eq@normallheader\relax}
-\@ifpackageloaded{web}{\def\eq@defaultlheader{\lheader{\aeb@setmarks}}}
-    {\let\eq@defaultlheader\relax}
-\newif\ifExSolutionsSet \ExSolutionsSetfalse
-\newcommand{\exerSolnInput}
-{%
-    \@ifundefined{eqe@IWO}{}{\ifsolutionsAtEnd%\ifvspacewithsolns
-        \eqe@IWO\@auxout{\string\expandafter\string\gdef
-        \string\csname\space eqExamQuesLastPage\string\endcsname
-        {\arabic{page}}}\fi}
-    \let\webnewpage\relax
-    \ifsolutionsonly\else\immediate\closeout\ex@solns\fi
-    \ifeq@nosolutions\else
-        \iftherearesolutions
-            \ifsolutionsonly\eq@solutionshook
-                \eqsolutionshook
-            \else
-            \newpage\eq@solutionshook
-            \eqsolutionshook\markright{}\eq@normallheader
-        \fi
-        \markright{\exsectitle}%
-            \ifx\webnewpage\relax
-                \def\webnewpage{\global\let\webnewpage\newpage}%
-            \fi
-            \priorexsectitle\exerSolnsHeadnToc\priorexslinput
-            \InputIfFileExists{\jobname.sol}
-            {\global\ExSolutionsSettrue}{\PackageWarning{exerquiz}
-            {!!! Solutions to exercises not found}}%
-            \global\ExSolutionsSetfalse
-            \newpage\eq@defaultlheader
-        \fi
-    \fi
-}
-\def\include@solutions{%
-    \if\exerSolns@ExtFile\eq@NO
-        \exerSolnInput
-    \fi
-}
-\let\eqexpdfentry=0
-\let\eq@postexerciseHook\relax
-\def\eq@postexerciseHook@BM{%
-    \xdef\Hy@currentbookmarklevel{\eq@currentbookmarklevel}}
-{\count0=\value{tocdepth}
-\advance\count0by2 \xdef\eqbmkmrkdepth{\the\count0}}
-\@ifundefined{Hy@bookmarksdepth}
-    {\setcounter{tocdepth}{\eqbmkmrkdepth}}
-    {\hypersetup{bookmarksdepth=\eqbmkmrkdepth}}
-\newcommand{\exbookmarkfmt}{\exlabel\space\theeqexno.\space}
-\newcommand{\partbookmarkfmt}{(\thepartno)\space}
-\newcommand{\expdfbookmark}[1]{\relax
-     \def\expdfbookmarktitle{#1}%
-    \ifx\eq@postexerciseHook\relax
-        \let\eq@postexerciseHook\eq@postexerciseHook@BM
-    \else
-        \let\eq@postexerciseHook@save\eq@postexerciseHook
-        \def\eq@postexerciseHook@BM@plus{\eq@postexerciseHook@save
-            \eq@postexerciseHook@BM}%
-        \let\eq@postexerciseHook\eq@postexerciseHook@BM@plus
-    \fi
-    \if\exerstar*%
-        \if\eqexpdfentry0\let\eqexpdfentry=1
-            \xdef\eq@currentbookmarklevel{\Hy@currentbookmarklevel}%
-            \def\eqex@next{\subpdfbookmark{\exbookmarkfmt#1}%
-                {qex.\the@exno}}%
-        \else
-            \def\eqex@next{\belowpdfbookmark{\partbookmarkfmt#1}%
-                {qex.\the@exno.\thepartno}}%
-        \fi
-    \else
-        \xdef\eq@currentbookmarklevel{\Hy@currentbookmarklevel}%
-        \def\eqex@next{\subpdfbookmark{\exbookmarkfmt#1}%
-            {qex.\the@exno}}%
-    \fi
-    \eqex@next\ignorespaces
-}
-\ifeq@noforms\endinput\fi
-\definecolor{webgreen}{rgb}{0,.6,0}
-\newcommand{\proofingsymbolColor}[1]{\def\@proofingsymbolColor{#1}}
-\proofingsymbolColor{red}
-\let\@proofsymbolredefined=0
-\newcommand{\proofingsymbol}[1]{\let\@proofsymbolredefined=1%
-    \def\@proofingsymbol{\textcolor{\@proofingsymbolColor}{#1}}}
-\def\@proofingsymbol{\textcolor{\@proofingsymbolColor}{\ding{52}}}
-\def\setproofingsymbol{%
-    \if\@proofsymbolredefined1\else
-    \@ifpackageloaded{pifont}{\proofingsymbol{\ding{52}}}
-    {\proofingsymbol{$\bullet$}}\fi
-}
-\AtBeginDocument{\setproofingsymbol}
-\newcommand{\prior@questionsHook}{}
-\let\qMark@Hook\@empty
-\let\aebtitleQuiz\@empty
-\newcommand{\post@questionsHook}{}
-\newcommand{\quesNumColor}[1]{\def\eq@quesNumCol{#1}}
-\quesNumColor{blue}
-\renewcommand{\theeqquestionnoi}{\arabic{eqquestionnoi}}
-\newcommand{\labeleqquestionnoi}{%
-    \color{\eq@quesNumCol}\bfseries\theeqquestionnoi.}
-\renewcommand\theeqquestionnoii{(\alph{eqquestionnoii})}
-\newcommand{\labeleqquestionnoii}{%
-    \color{\eq@quesNumCol}\bfseries\theeqquestionnoii}
-\renewcommand\theeqquestionnoiii{(\roman{eqquestionnoiii})}
-\newcommand{\labeleqquestionnoiii}{%
-    \color{\eq@quesNumCol}\bfseries\theeqquestionnoiii}
-\define@key{props@ques}{labelwidthTo}%
-    [\normalsize\normalfont\bfseries00.]%
-    {\def\propQ@labelwidthTo{#1}}
-\define@key{props@ques}{labelwidth}[]{\def\propQ@labelwidth{#1}}
-\let\propQ@labelwidth\@empty
-\define@key{props@ques}{topsep}[\the\topsep]{\edef\propQ@topsep{#1}}
-\define@key{props@ques}{partopsep}[\the\partopsep]%
-    {\edef\propQ@partopsep{#1}}
-\define@key{props@ques}{parsep}[\the\parsep]{\edef\propQ@parsep{#1}}
-\define@key{props@ques}{itemsep}[\the\itemsep]{\edef\propQ@itemsep{#1}}
-\define@key{props@ques}{labelsepTo}[\normalsize\normalfont\ ]%
-    {\def\propQ@labelsepTo{#1}}
-\define@key{props@ques}{labelsep}[\@empty]{\def\propQ@labelsep{#1}}
-\let\propQ@labelsep\@empty
-\define@key{props@ques}{color}[blue]{\quesNumColor{#1}}
-\setkeys{props@ques}{labelwidthTo,topsep,partopsep,parsep,%
-    itemsep,labelsepTo,color}%
-\newenvironment{questions}[1][]
-{%
-    \ifnum\@eqquestiondepth>\tw@\@toodeep\else
-    \advance\@eqquestiondepth\@ne\fi
-    \def\@quesctr{eqquestionno\romannumeral\the\@eqquestiondepth}%
-    \toks@=\expandafter\expandafter\expandafter{#1}\expandafter
-    \xdef\csname quesOpts\@quesctr\endcsname{\the\toks@}%
-    \edef\tempexp{\noexpand\setkeys{props@ques}{\the\toks@}}\tempexp
-    \list{\qMark@Hook\prior@questionsHook\gdef\eqPTs{1}%
-    \global\let\eqQT\eq@na%
-    {\@tempcnta=0 \let\@thispr@b\@empty
-     \@whilenum\@tempcnta<\@eqquestiondepth\do{\advance\@tempcnta\@ne
-     \ifx\@thispr@b\@empty\edef\@thispr@b{%
-     \csname theeqquestionno\romannumeral\the\@tempcnta\endcsname}\else
-     \edef\@thispr@b{\@thispr@b%
-     \csname theeqquestionno\romannumeral\the\@tempcnta\endcsname}\fi
-    }\xdef\@currentQues{\@thispr@b}}%
-    \makebox[\labelwidth][r]{\normalfont\@nameuse{label\@quesctr}}%
-    \xdef\eq@pageThisQ{\the\c@page}%
-    \post@questionsHook}{\usecounter{\@quesctr}%
-    \ifx\propQ@labelsep\@empty
-        \settowidth{\labelsep}{\propQ@labelsepTo}\else
-        \setlength{\labelsep}{\propQ@labelsep}\fi
-    \ifx\propQ@labelwidth\@empty
-        \settowidth{\labelwidth}%
-            {\propQ@labelwidthTo\hspace{\labelsep}}\else
-        \settowidth{\labelwidth}{\hspace{\propQ@labelwidth}%
-            \hspace{\labelsep}}\fi
-    \setlength{\topsep}{\propQ@topsep}%
-    \setlength{\partopsep}{\propQ@partopsep}%
-    \ifdim\parskip>\z@\addtolength{\topsep}{-\parskip}\fi
-    \setlength{\parsep}{\propQ@parsep}%
-    \setlength{\itemsep}{\propQ@itemsep}%
-    \setlength{\itemindent}{0pt}%
-    \setlength{\leftmargin}{\labelwidth}%
-    }%
-}{\endlist}
-\def\pushquestions{\expandafter\xdef\csname save\@quesctr\endcsname
-    {\expandafter\the\csname c@\@quesctr\endcsname}\end{questions}}
-\def\popquestions{%
-    \begin{questions}[\csname quesOpts\@quesctr\endcsname]%
-    \setcounter{\@quesctr}{\csname save\@quesctr\endcsname}%
-    \@ifnextchar\popquestions{\item[]}{\@ifnextchar\begin{\item[]}{}}}
-\newcommand{\priorsqhook}[1]{\def\sq@priorhook{#1}}
-\priorsqhook{}
-\newcommand{\abovesqskip}[1]{\def\sq@aboveskip{#1}}
-\abovesqskip{\par\medskip}
-\long\def\endsqhook#1{\def\sq@afterhook{#1}}
-\endsqhook{}
-\def\@shortquizCnt{0}
-\def\@sqGenBaseName{eqSqBn\@shortquizCnt}
-\let\sqhspace\space
-\let\ListOfSQuizNames\@empty
-\newenvironment{shortquiz}
-{%
-    \xdef\eq@pageThisQ{\the\c@page}%
-    \let\@currentQues\@empty
-    {\count0=\@shortquizCnt \advance\count0by1\relax
-        \xdef\@shortquizCnt{\the\count0}}%
-    \goodbreak\@ifstar{\sqForms\@shortquiz}%
-        {\if\aeb@FLOverride\eq@f\def\sqstar{*}\else
-          \def\sqstar{}\sqLinks\fi\@shortquiz}%
-}{\aeb@endshortquiz}
-\newenvironment{shortquiz*}
-{%
-    \xdef\eq@pageThisQ{\the\c@page}%
-    {\count0=\@shortquizCnt\advance\count0by1\relax
-        \xdef\@shortquizCnt{\the\count0 }}%
-    \sqForms\@shortquiz
-}{\aeb@endshortquiz}
-\def\@shortquiz{\@ifnextchar[%
-    {\@@shortquiz}{\@@shortquiz[\@sqGenBaseName]}}
-\def\sq@setCLN#1{\ifx\aebTitleQuiz\@empty
-    \protected@edef\@currentlabelname{#1}\else
-    \protected@edef\@currentlabelname{\@currentlabelname}\fi
-}
-\let\isQZ=q \let\isSQZ=s
-\def\sq@IDTxtField{\makebox[0pt][l]{\textField[\autoCenter{n}\BC{}\BG{}
-    \S{S}\textSize{0}\Ff{\FfReadOnly}
-    \AA{\AAFormat{%
-        var \oField=new Object;\r
-        \oField.Grp={};
-        \ifx\defaultColorJSLoc\@empty\else\r
-        \oField.DefaultColorJSLoc=\defaultColorJSLoc;\fi
-        \ifx\rghtColorJSLoc\@empty\else\r
-        \oField.RightColorJSLoc=\rghtColorJSLoc;\fi
-        \ifx\wrngColorJSLoc\@empty\else\r
-        \oField.WrongColorJSLoc=\wrngColorJSLoc;\fi
-        \ifx\rghtAnsSymbJSLoc\@empty\else\r
-        \oField.RightAnsSymbJSLoc=\rghtAnsSymbJSLoc;\fi
-        \ifx\wrngAnsSymbJSLoc\@empty\else\r
-        \oField.WrongAnsSymbJSLoc=\wrngAnsSymbJSLoc;\fi
-    }}]{sqID\oField}{0bp}{0bp}}%
-}
-\def\qz@IDTxtField{\makebox[0pt][l]{\textField[\autoCenter{n}\BC{}\BG{}
-    \S{S}\textSize{0}\Ff{\FfReadOnly}
-    \AA{\AAFormat{if(typeof aQuizzesInDoc=="undefined")\r\t
-      var aQuizzesInDoc=new Array();\r
-    if (aQuizzesInDoc.indexOf("\oField")) aQuizzesInDoc.push("\oField");
-    }}]{qzID\oField}{0bp}{0bp}}}
-\let\eqQuizType\relax
-\def\@@shortquiz[#1]{%\begingroup
-  \gdef\oField{#1}\gdef\curr@quiz{#1}\gdef\currQuiz{#1}%
-  \edef\tmp@Exp{\noexpand\g@addto@macro\noexpand
-    \ListOfSQuizNames{,#1}}\tmp@Exp
-    \global\let\eqQzQuesList\@empty
-    \let\eq@AddProbToQzQuesList\relax
-    \edef\@currentlabel{\@shortquizCnt}%
-    \edef\@currentHref{shortquiz.\@shortquizCnt}%
-  \global\let\eqQuizType\isSQZ\let\@qzsolndest\@empty
-  \if\sqstar*\relax
-    \let\@Ans\Ans@sq@f
-    \ifx\oField\@empty
-        \typeout{^^JExerquiz: Base field name required when using
-                shortquiz with '*' option}%
-        \PackageInfo{exerquiz}{Assuming link style^^J}%
-        \let\@Ans\Ans@sq@l
-    \fi
-  \else
-     \let\@Ans\Ans@sq@l
-  \fi
-  \setcounter{questionno}{0}%
-  \let\answers\answers@sq
-  \let\endanswers\endanswers@sq
-  \let\manswers\manswers@sq
-  \let\endmanswers\endmanswers@sq
-  \let\solution\solution@sq
-  \let\endsolution\endsolution@sq
-  \let\ifstaroption\eq@ifstaroption
-  \if\eq@tq@star*%
-        \def\sqlabel{\aebtitleQuiz\@gobbletwo}%
-   \fi
-   \sq@aboveskip\sq@priorhook
-   \@ifundefined{PointsOnLeft}%
-   {\sq@setCLN{\eq@defaultShortQuizLabelName}%
-        \ifx\sqlabel\@empty\else\noindent\fi
-        \hypertarget{sqH\@currentHref}{}\sq@IDTxtField
-        \ifx\sqlabel\@empty\else\expandafter
-            \sqlabel\expandafter\sqhspace\fi
-   {\set@typeset@protect\aebtitleQuiz}}{}\ignorespaces
-}
-\newcommand\belowsqskip[1]{\def\aftershortquizskip{#1}}
-\belowsqskip{\medskip}
-\def\aeb@endshortquiz{\setcounter{quizno}{0}%
-    \sq@afterhook
-    \global\let\aebtitleQuiz\@empty
-    \global\let\aebTitleQuiz\@empty
-    \global\let\eq@tq@star\relax
-    \global\let\sqlabel\eq@sqlabel
-    \global\let\sqslrtnlabel\eq@sqslrtnlabel
-    \global\let\sqsllabel\eq@sqsllabel
-    \par\aftershortquizskip
-}
-\def\sqLinks{\def\sqstar{}}\sqLinks
-\def\sqForms{\def\sqstar{*}}
-\let\eq@tq@star\relax
-\def\qzPriorSolutionAfterHook{\smallskip}
-\let\sqPostHeaderHook\@empty
-\let\qPostHeaderHook\@empty
-\let\eq@sqPostHeaderHook\@empty
-\let\eq@qPostHeaderHook\@empty
-\let\prior@eqQt\@empty
-\let\prior@eqSQt\@empty
-\def\sqsolafterhspace{\space}
-\newif\ifmakeQzSlLocal \makeQzSlLocalfalse
-\def\makeQzSolnsLocalOn{\makeQzSlLocaltrue}
-\def\makeQzSolnsLocalOff{\makeQzSlLocalfalse}
-\def\solution@sq{\let\eq@next\relax
-  \ifx\@qzsolndest\@empty
-    \PackageWarning{exerquiz}%
-    {* Solutions unexpected here, will *\MessageBreak
-     * assume solutionsafter option *}%
-    \eq@solutionsaftertrue
-  \fi
-  \ifeq@solutionsafter
-    \par\qzPriorSolutionAfterHook\noindent
-    \if!\sqsolafter!\else
-    \sqsolafter\sqsolafterhspace\fi\ignorespaces
-  \else
-    \global\therearequizsolutionstrue\let\verbatim@out=\quiz@solns
-    \set@display@protect
-    \immediate\write\verbatim@out{%
-      \ifmakeQzSlLocal\protect\begingroup^^J\fi
-      \if\eqQuizType\isQZ
-            \ifx\prior@eqQt\@empty\else\prior@eqQt\fi
-            \protect\eqQt{\eqFilterArg}\else
-            \ifx\prior@eqSQt\@empty\else\prior@eqSQt\fi
-            \protect\eqSQt{\eqFilterArg}\fi
-      \protect\quizSolnHeader\if\eqQuizType\isQZ\ifx\allow@peek\eq@NO
-        [{\curr@quiz}{\currQuizStartPage}]\fi\fi
-        {\@qzsolndest}{\sqsllabel}\protect\eqterminex
-        \if\eqQuizType\isQZ\expandafter\eq@qPostHeaderHook
-        \expandafter\qPostHeaderHook\else
-        \expandafter\eq@sqPostHeaderHook
-        \expandafter\sqPostHeaderHook\fi}%
-    \set@typeset@protect
-    \expandafter\verbatimwrite\fi
-}
-\let\qzSolutionsAfterHook\@empty
-\def\endsolution@sq
-{%
-    \ifeq@solutionsafter
-        \eq@fititin{\mbox{\sqslrtnlabel}}\par\qzSolutionsAfterHook
-        \aftergroup\ignorespaces
-    \else
-        \endverbatimwrite
-        \ifx\@qzsolndest\@empty\else\set@display@protect
-            \immediate\write\verbatim@out{\eqSqSolnTrailer}%
-         \set@typeset@protect
-        \fi
-    \fi
-    \global\let\@qzsolndest\@empty
-}
-\newcommand\pnphDflt{.1\textheight}
-\newcommand{\promoteNewPageHere}[1][\pnphDflt]{%
-    \@ifnextchar\bgroup{\eq@promoteNewPageHere}
-        {\eq@promoteNewPageHere{#1}}%
-}
-\def\eq@promoteNewPageHere#1{\par
-    \bgroup\@nobreakfalse\addpenalty{-500}%
-    \setlength{\@tempdimb}{#1}%
-    \@tempdima \pagegoal \advance \@tempdima -\pagetotal
-    \ifdim \@tempdima<\@tempdimb\ifnum\col@number>\@ne\columnbreak
-        \else\newpage\penalty1\fi\fi\egroup
-}
-\newcommand{\saveDest}[1][]{%
-    \def\sd@arg{#1}\ifx\sd@arg\@empty
-    \xdef\holdDest{\@qzsolndest}\else
-    \xdef\@qzsolndest{#1}\xdef\holdDest{#1}\fi}
-\def\useDest{\def\@qzsolndest{\holdDest}}
-\let\holdDest\@empty
-\def\fpAfterSolutionsSkip{\par\medskip}
-\let\eqSqSolnTrailerHook\@empty
-\let\eqQzSolnTrailerHook\@empty
-\newcommand\eqSqSolnTrailer{%
-    \if\eqQuizType\isQZ
-        \eqQzSolnTrailerHook
-        \protect\ReturnTo{page.\eq@pageThisQ}%
-            {\protect\mbox{\sqslrtnlabel}}\string\endeqQt
-    \else
-        \eqSqSolnTrailerHook
-        \protect\ReturnTo{page.\eq@pageThisQ}%
-            {\protect\mbox{\sqslrtnlabel}}\string\endeqSQt%
-    \fi
-    \ifeqforpaper\protect\fpAfterSolutionsSkip\fi^^J%
-    \ifmakeQzSlLocal\protect\endgroup^^J\fi
-}
-\let\eqSQt\@gobble
-\let\endeqSQt\relax
-\let\eqQt\@gobble
-\let\endeqQt\relax
-\let\prior@quizSolnHeaderHook\@empty
-\newcommand\quizSolnHeader[3][]{%
-    \prior@quizSolnHeaderHook
-    \ifeqforpaper\else\webnewpage\fi\noindent
-    \def\eq@argi{#1}%
-    \ifx\eq@argi\@empty\else\noPeek#1\fi
-    \hypertarget{#2}{#3}\relax
-    \solnspace
-}
-\def\AllowPeeking{\global\let\allow@peek\eq@YES}\AllowPeeking
-\def\NoPeeking{\global\let\allow@peek\eq@NO}
-\def\noPeekAction#1#2{%
-    /AA <</O<</S/JavaScript/JS(noPeek("#1",#2))>> >>
-}
-\newif\iftherearequizsolutions \therearequizsolutionsfalse
-\let\aeb@FLOverride\relax
-\def\includequizsolutions{\@ifstar
-    {\let\resetQZtsolns\relax\includequizsolutionsi}
-    {\def\resetQZtsolns{\global\let\include@quizsolutions\relax}%
-     \includequizsolutionsi}%
-}
-\newcommand{\includequizsolutionsi}[1][]{%
-    \filterFor{#1}\includequizsolutionsii
-}
-\def\includequizsolutionsii{%
-    \include@quizsolutions
-    \resetQZtsolns
-    \let\eqFilterArg\@empty
-}
-\let\eqqzsolutionshook\@empty
-\let\priorsqslsectitle\@empty
-\let\priorsqslinput\@empty
-\def\quizSolnsHeadnToc{\section*{\sqslsectitle}%
-    \addcontentsline{toc}{section}{%
-    \@ifundefined{web@latextoc}{}{%
-    \ifx\web@latextoc\eq@YES\else
-    \protect\numberline{}\fi}\sqslsectitle}}
-\newcommand{\quizSolnInput}
-{%
-    \global\let\webnewpage\relax
-    \immediate\closeout\quiz@solns
-    \ifeq@noquizsolutions\else
-        \iftherearequizsolutions\newpage\markright{}%
-            \eq@normallheader\markright{\sqslsecrunhead}%
-            \ifx\webnewpage\relax
-                \def\webnewpage{\global\let\webnewpage\newpage}\fi
-            \priorsqslsectitle\quizSolnsHeadnToc\priorsqslinput
-            \InputIfFileExists{\jobname.qsl}{}%
-            {!!! Solutions to quizzes not found}
-            \eqqzsolutionshook
-            \newpage\eq@defaultlheader
-        \fi
-    \fi
-}
-\def\include@quizsolutions{\quizSolnInput}
-\newcommand{\priorqhook}[1]{\def\q@priorhook{#1}}
-\priorqhook{}
-\newcommand{\aboveqskip}[1]{\def\q@aboveskip{#1}}
-\aboveqskip{\par\medskip}
-\newcommand{\qhspace}{\space}
-\def\endqhook#1{\def\eq@prior@endQuiz{#1}}
-\endqhook{}
-\newcommand{\belowqHooknSkip}[1]{\def\eq@belowqskip{#1}}
-\belowqHooknSkip{\medskip}
-\def\belowqskip{\belowqHooknSkip}
-\let\eq@initializeServerSubmit\@empty
-\newcommand{\quiztype}[1]{%
-    \def\@quiztype{#1}\def\aeb@FLOverride{#1}}
-\let\@quiztype\@empty
-\newcommand{\defaultquiztype}{\let\@quiztype\@empty
-    \let\aeb@FLOverride\relax}
-\let\aeb@FLOverride\relax
-\def\@setFormLinkType{%
-    \if\qstar*%
-        \ifx\aeb@FLOverride\relax%
-            \def\@@quiztype{f}%
-        \else
-            \if\aeb@FLOverride l\def\@@quiztype{l}\else
-            \def\@@quiztype{f}\fi
-        \fi
-    \else
-        \ifx\aeb@FLOverride\relax
-            \def\@@quiztype{l}%
-        \else
-            \if\aeb@FLOverride f\def\@@quiztype{f}\else
-            \def\@@quiztype{l}\fi
-        \fi
-    \fi
-}
-\def\setdefault@Ans{\@setFormLinkType
-    \expandafter\global\expandafter
-    \let\expandafter\@Ans\expandafter=\csname Ans@\@@quiztype\endcsname
-}
-\newcommand\useForms{\def\aeb@FLOverride{f}}
-\newcommand\useLinks{\def\aeb@FLOverride{l}}
-\newcommand\restoreFLTypeDefault{\global\let\aeb@FLOverride\relax}
-\let\aeb@FLOverride\relax
-\newenvironment{quiz}
-{\goodbreak\@ifstar{\gdef\qstar{*}\@quiz*f}{\gdef\qstar{x}\@quiz*l}}
-    {\aeb@endquiz}
-\def\@quizCnt{0}
-\let\ListOfQuizNames\@empty
-\def\@quiz*#1#2{%
-    \xdef\eq@pageThisQ{\the\c@page}%
-    \let\@currentQues\@empty
-    \global\let\eqQzQuesList\@empty
-    \global\let\pointValuesArray\@empty
-    \global\let\ptypeArray\@empty
-     \global\let\corrAnsArray\@empty
-    {\count0=\@quizCnt\advance\count0by1\relax
-        \xdef\@quizCnt{\the\count0 }}%
-    \edef\@currentlabel{\@quizCnt}%
-    \edef\@currentHref{quiz.\@quizCnt}%
-    \sq@setCLN{\eq@defaultQuizLabelName}%
-    \setcounter{eqpointvalue}{0}\setcounter{questionno}{0}%
-    \eq@initializeServerSubmit
-    \global\let\eqQuizType\isQZ %\tabcolsep=0pt
-    \gdef\eqPTs{1}\global\let\eqQT\eq@na
-    \g@addto@macro\ListOfQuizNames{,#2}%
-    \gdef\quiz@total{#2}\xdef\curr@quiz{#2}\xdef\oField{#2}%
-    \xdef\currQuiz{#2}\xdef\currQuizStartPage{\thepage}%
-    \xdef\aPointType{0}%
-    \def\fieldJSStr@CMD{\fieldJSStr*[noquotes]\bqlabelISO}%
-    \expandafter\fieldJSStr@CMD\expandafter{\bqlabelISO}%
-    \ifx\@quiztype\@empty\gdef\@@quiztype{#1}\else
-        \xdef\@@quiztype{\@quiztype}\fi
-    \let\@qzsolndest\@empty
-    \let\answers\answers@q\let\endanswers\endanswers@q
-    \let\manswers\manswers@q\let\endmanswers\endanswers@q
-    \let\solution\solution@sq\let\endsolution\endsolution@sq
-    \expandafter%
-        \xdef\csname titleOf\currQuiz\endcsname{\aebTitleQuiz}%
-    \q@aboveskip\q@priorhook\noindent\hypertarget{qzH\@currentHref}{}%
-    \eq@beginQuiz\qhspace{\set@typeset@protect\aebtitleQuiz}%
-    \ignorespaces
-}
-\def\aeb@endquiz
-{%
-    \eq@prior@endQuiz\noindent\eq@endQuiz
-    \global\let\eqQuizType\relax
-    \global\let\aebtitleQuiz\@empty
-    \global\let\aebTitleQuiz\@empty
-    \global\let\bqlabel\eq@bqlabel % reset beginning label to default
-    \global\let\eqlabel\eq@eqlabel % reset ending label to default
-    \global\let\sqsllabel\eq@sqsllabel
-    \global\let\sqslrtnlabel\eq@sqslrtnlabel
-    \global\let\bqlabelISO\eq@bqlabelISO
-    \eq@belowqskip
-}
-\newenvironment{quiz*}{\goodbreak\gdef\qstar{*}\@quiz*f}{\aeb@endquiz}
-\newcommand\eq@beginQuiz{\eq@BeginQuizLink}
-\newcommand\eq@endQuiz{\eq@EndQuizLink}
-\newcommand\useBeginQuizButton[1][]
-    {\renewcommand\eq@beginQuiz{\eq@BeginQuizButton[#1]}}
-\newcommand\useEndQuizButton[1][]
-    {\renewcommand\eq@endQuiz{\eq@EndQuizButton[#1]}}
-\newcommand\useBeginQuizLink
-    {\renewcommand\eq@beginQuiz{\eq@BeginQuizLink}}
-\newcommand\useEndQuizLink
-    {\renewcommand\eq@endQuiz{\eq@EndQuizLink}}
-\newcommand\@initQuiz{%
-    var \curr@quiz=new Object();\jsR
-    lstOfQuizzes["\curr@quiz"]=\curr@quiz;\jsR
-    \curr@quiz.oAlertCheck={bAfterValue:false};\jsR
-    \curr@quiz.Grp={};
-    \ifx\defaultColorJSLoc\@empty\else\jsR
-    \oField.DefaultColorJSLoc=\defaultColorJSLoc;\fi
-    \ifx\rghtColorJSLoc\@empty\else\jsR
-    \oField.RightColorJSLoc=\rghtColorJSLoc;\fi
-    \ifx\wrngColorJSLoc\@empty\else\jsR
-    \oField.WrongColorJSLoc=\wrngColorJSLoc;\fi
-    \ifx\partialColorJSLoc\@empty\else\jsR
-    \oField.PartialColorJSLoc=\partialColorJSLoc;\fi
-    \ifx\rghtAnsSymbJSLoc\@empty\else\jsR
-    \oField.RightAnsSymbJSLoc=\rghtAnsSymbJSLoc;\fi
-    \ifx\wrngAnsSymbJSLoc\@empty\else\jsR
-    \oField.WrongAnsSymbJSLoc=\wrngAnsSymbJSLoc;\fi
-    \ifx\corrAnsSymbJSLoc\@empty\else\jsR
-    \oField.CorrAnsSymbJSLoc=\corrAnsSymbJSLoc;\fi
-    \ifx\eqGradeScaleLoc\@empty\else\jsR
-    \oField.GradeScaleLoc=new Array(\eqGradeScaleLoc);\fi
-    \ifx\eqCorrLocalChoiceFully\@empty\else\jsR % dpsf07
-    \oField.fullyCorrectLoc=\eqCorrLocalChoiceFully;\fi
-    \ifx\priorInitQuiz\@empty\else\jsR\priorInitQuiz\fi %\jsR
-    InitializeQuiz("\curr@quiz",\ifnocorrections0\else1\fi);
-    \ifx\eq@CGI\@empty\jsR\curr@quiz.isSubmitted=false;\else
-    \jsR\curr@quiz.isSubmitted=true;\fi
-    \jsR\curr@quiz.initializeWith=%
-'InitializeQuiz("\curr@quiz",\ifnocorrections0\else1\fi);'
-    \ifx\postInitQuiz\@empty\else\jsR\postInitQuiz\fi
-}
-\newcommand{\priorInitQuiz}{}
-\newcommand{\postInitQuiz}{}
-\let\eq@submitURL\@empty
-\let\eq@insertHiddenFields\@empty
-\def\eq@@BeginQuizLinkActions
-{%
-    \A{\JS{%
-        \@initQuiz
-    }}%
-}
-\def\eq@BeginQuizLinkDefaults{\Border{0 0 0}}
-\let\bqlabelFmt\@empty
-\def\eq@BeginQuizLink
-{%
-    \qz@IDTxtField
-    \set@@Link{}{}{}{\color{\@linkcolor}\bqlabelFmt\bqlabel}{}%
-    {\eq@setWidgetProps\setLink@driver}%
-    {\eq@BeginQuizLinkDefaults\eq@@BeginQuizLinkActions\every@Link}%
-    \space\ignorespaces
-}
-\newcommand\priorSubmitQuiz{}
-\newcommand\postSubmitQuiz{}
-\def\eq@@EndQuizLinkActions{\A{\JS{%
-  if (!isQuizInitialized("\curr@quiz"))\jsR\jsT
-    eqAppAlert(InitMsg("\bqlabelISO"),3);\jsR
-  else {\jsR\jsT
-    if (\minQuizResp(\thequestionno)) {\jsR\jsT\jsT
-      \curr@quiz.PtValues=new %
-        Array(\pointValuesArray);\jsR\jsT\jsT
-      ProbType = [\ptypeArray];\jsR\jsT\jsT
-\if@inclkey
-      \curr@quiz.CorrAns=(new %
-        Array(\corrAnsArray));\jsR\jsT\jsT
-\fi
-      DisplayQuizResults("\curr@quiz",\theeqpointvalue,%
-        \thequestionno);\jsR\jsT\jsT
-      var h=this.getField("ScoreData.\curr@quiz");\jsR\jsT\jsT
-      h.value=Score+";"+NQuestions+";"%
-        +ptScore+";"+NPointTotal;\jsR\jsT\jsT
-      \eq@submitURL
-      \postSubmitQuiz
-      \jsT\jsT resetQuiz("\curr@quiz");\jsR\jsT
-    }\jsR
-  }}}%
-}
-\def\eq@EndQuizLinkDefaults{\Border{0 0 0}}
-\let\eqlabelFmt\@empty
-\def\eq@EndQuizLink
-{%
-    \ifx\eq@CGI\@empty
-        \let\eq@submitURL\@empty
-        \let\eq@insertHiddenFields\@empty
-    \fi
-    \set@@Link{}{}{}{\color{\@linkcolor}\eqlabelFmt\eqlabel}{}%
-    {\eq@setWidgetProps\setLink@driver}%
-    {\eq@EndQuizLinkDefaults\eq@@EndQuizLinkActions\every@Link}%
-    \makebox[0pt][r]{\textField[\BC{}\autoCenter{n}]%
-        {htxtfld.\curr@quiz}{0bp}{0bp}}%
-    \makebox[0pt][r]{\eq@hiddenScoreData\eq@insertHiddenFields}%
-    \global\let\eq@CGI\@empty\ignorespaces
-}
-\def\BeginQuizButtonDefaults
-{%
-    \CA{\bqlabel}\H{P}\F{\FPrint}
-    \BC{1 0 0}\BG{.7529 .7529 .7529}\W{1}\S{B}
-}
-\def\eq@@BeginQuizButtonActions
-{%
-    \A{\JS{%
-        \@initQuiz
-    }}%
-}
-\newcommand\eq@BeginQuizButton[1][]
-{%
-    \mbox{\qz@IDTxtField\push@@Button{#1}{beginQuiz.\curr@quiz}{}%
-        {\DefaultHeightOfWidget}{\eq@protect\A}%
-        {\eq@setButtonProps\eq@Button@driver}%
-        {\BeginQuizButtonDefaults\eq@@BeginQuizButtonActions
-         \every@ButtonField\every@BeginQuizButton}}%
-}
-\def\EndQuizButtonDefaults
-{%
-    \CA{\eqlabel}\F{\FPrint}\BC{1 0 0}
-    \BG{.7529 .7529 .7529}\W{1}\S{B}\H{P}
-}
-\def\eq@@EndQuizButtonActions{\A{\JS{%
-  if (!isQuizInitialized("\curr@quiz"))\jsR\jsT
-    eqAppAlert(InitMsg("\bqlabelISO"),3);\jsR
-  else {\jsR\jsT
-    if (\minQuizResp(\thequestionno)&&_ModalNotOn){\jsR\jsT\jsT
-      \curr@quiz.PtValues=(new %
-        Array(\pointValuesArray));\jsR\jsT\jsT
-      ProbType=[\ptypeArray];\jsR\jsT\jsT
-\if@inclkey
-      \curr@quiz.CorrAns=(new %
-        Array(\corrAnsArray));\jsR\jsT\jsT
-\fi
-      DisplayQuizResults("\curr@quiz",\theeqpointvalue,%
-        \thequestionno);\jsR\jsT\jsT
-      var h=this.getField("ScoreData.\curr@quiz");\jsR\jsT\jsT
-      h.value=Score+";"+NQuestions+";"%
-        +ptScore+";"+NPointTotal;\jsR\jsT\jsT
-      \eq@submitURL
-      \postSubmitQuiz
-      \jsT\jsT resetQuiz("\curr@quiz");\jsR\jsT
-    }\jsR
-  }}}%
-}
-\newcommand{\eq@hiddenScoreData}{\makebox[0pt][r]{%
-  \textField[\BC{}\F{\FHidden}]{ScoreData.\curr@quiz}{0bp}{0bp}}}
-\newcommand\eq@EndQuizButton[1][]
-{%
-    \ifx\eq@CGI\@empty
-        \let\eq@submitURL\@empty
-        \let\eq@insertHiddenFields\@empty
-    \fi
-    \mbox{\push@@Button{#1}{endQuiz.\curr@quiz}{}%
-        {\DefaultHeightOfWidget}{\eq@protect\A}%
-        {\eq@setButtonProps\eq@Button@driver}%
-        {\EndQuizButtonDefaults\eq@@EndQuizButtonActions
-         \every@ButtonField\every@EndQuizButton}}%
-    \makebox[0pt][r]{\eq@hiddenScoreData\eq@insertHiddenFields}%
-    \global\let\eq@CGI\@empty
-}
-\newcommand\databaseName[1]{\gdef\db@Name{#1}}\def\db@Name{}
-\newcommand\tableName[1]{\gdef\db@Table{#1}}\def\db@Table{}
-\newcommand\eqCGI{\definePath{\eq@CGI}}\def\eq@CGI{}
-\newcommand\eqSubmit{\hyper@normalise\eqSubmiti}
-\def\eqSubmiti#1{\xdef\eq@CGI{"#1"}\eqSubmitii}
-\def\eqSubmitii#1#2{\databaseName{#1}\tableName{#2}}
-\providecommand{\rtnURL}{\definePath{\thisRtnURL}}
-\let\thisRtnURL\@empty
-\newcommand\addHiddenTextField[3][]{}
-\newcommand\populateHiddenField[2]{}
-\def\eqButtonDefaults
-{%
-    \CA{\eq@local@CA}\AC{}\H{P}\W{1}\S{B}
-    \BC{1 0 0}\BG{.7529 .7529 .7529}
-}
-\def\@@eqButtonActions
-{%
-    \A{\JS{if (isEndQuizPushed("\eqBaseName")){\jsR\jsT%
-            correctQuiz("\eqBaseName",\thequestionno);%
-            \ifusesumrytbls\jsR\jsT\else\jsR\fi
-        if (typeof correctSumryTbl == "function")\jsR\jsT\jsT
-            correctSumryTbl("\eqBaseName",\thequestionno);\jsR
-    }
-    }}%
-}
-\newcommand\eqButton[2][]
-{%
-    \ifnocorrections\else
-        \def\eqBaseName{#2}%
-        \mbox{\push@@Button{#1}{correct.#2}{}{\DefaultHeightOfWidget}%
-        {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
-        {\eqButtonDefaults\@@eqButtonActions\every@ButtonField
-        \every@eqButton}}%
-    \fi
-}
-\def\CorrButton{\eqButton}
-\def\rbMarkup@Defaults
-{%
-    \BC{}\F{\FHidden}\Ff{\FfReadOnly}\textSize{12}
-    \textColor{0 g}\symbolchoice{check}\W{}
-}
-\newcommand\rbMarkup[1][]{%
-    \ifx\grpquestions\eq@One
-        \def\Fld@name{%
-            \oField.\thequestionno.\thegrpquestionno}\else
-        \def\Fld@name{\oField.\thequestionno}\fi
-    \mbox{\check@@Box{#1\V{Yes}\DV{Yes}}%
-    {rbmarkup.\Fld@name}%
-    {\RadioFieldSize}{\RadioFieldSize}{Yes}{}%
-    {\eq@setWidgetProps\eq@RadioCheck@driver}%
-    {\rbMarkup@Defaults\every@CheckBox\every@rbMarkup}}}%
-\newcommand\minQuizResp{lowThreshold}
-\newcommand\PTs{\@ifstar{\def\eq@star{*}\@PTs}{\def\eq@star{x}\@PTs}}
-\def\@PTs#1{\gdef\eq@PTs{#1}\ifx\eq@PTs\@empty\gdef\eq@PTs{1}\fi
-    \global\let\eqPTs\eq@PTs\global\let\eq@PTs\@empty
-    \if\eq@star*\else\PTs@Hook\fi}
-\def\eq@PTs{0} % initialize this variable
-\newcommand\QT[1]
-{%
-    \gdef\eq@qT{#1}\ifx\eq@qT\@empty\global\let\eq@qT\eq@na\fi
-    \global\let\eqQT\eq@qT\global\let\eq@qT\eq@na
-}
-\def\eq@na{na} % not applicable
-\let\eq@qT\eq@na
-\newcommand\PTsHook[1]{\def\PTs@Hook{#1}}
-\let\PTs@Hook\@empty
-\let\eq@PTs\@empty
-\newcommand\eqGradeScale{%
-    "A",[90, 100],"B",[80,90],"C",[70,80],"D",[60,70],"F",[0,60]}
-\let\eqGradeScaleLoc\@empty
-\newcommand{\resetGradeScaleLoc}{\global\let\eqGradeScaleLoc\@empty}
-\def\tallywidth#1{\def\TBW{#1}}
-\def\TBW{15bp}
-\def\DefaultHeightOfWidget{11bp}
-\def\RadioFieldSize{11bp}
-\def\RBW{2in}       % Response Box width (math,txt, txtpc, answer field)
-\def\SFW{1.5in}     % Score Field Width
-\def\GFW{20pt}      % Grade Field Width
-\def\PtFW{1.5in}    % Point Field Width
-\def\PcFW{1.5in}    % Percent Field Width
-\def\ScoreFieldDefaults
-{%
-    \Ff{\FfReadOnly}\BC{1 0 0}\BG{}\S{S}
-    \DV{\eqScore}\V{\eqScore}\W{1}
-}
-\newcommand\ScoreField[2][]
-{%
-    \mbox{\text@@Field{#1}{ScoreField.#2}{\SFW}%
-        {\DefaultHeightOfWidget}{}{\eq@setWidgetProps\eq@TextField}%
-        {\ScoreFieldDefaults\every@eqTextField\every@ScoreField}}%
-}
-\def\GradeFieldDefaults
-{%
-    \textColor{0 0 1 rg}\BC{1 0 0}\BG{1 1 1}\S{S}
-    \Ff{\FfReadOnly}\Q{1}\W{1}
-}
-\newcommand\GradeField[2][]
-{%
-    \mbox{\text@@Field{#1}{GradeField.#2}{\GFW}%
-        {\DefaultHeightOfWidget}{}{\eq@setWidgetProps\eq@TextField}%
-        {\GradeFieldDefaults\every@eqTextField\every@GradeField}}%
-}
-\def\AnswerFieldDefaults
-{%
-   \BC{0 0 0}\S{S}\Ff{\FfReadOnly}\W{1}%
-   \presets{\eq@resetAnsFieldOnClose}%
-}
-\let\eq@resetAnsFieldOnClose\@empty
-\newcommand{\noResetAnsFieldOnClose}{%
-    \global\let\eq@resetAnsFieldOnClose\@empty}
-\newcommand{\resetAnsFieldOnClose}{%
-    \gdef\eq@resetAnsFieldOnClose{%
-        \AApageclose{this.resetForm(["\Fld@name"]);}}}
-\newcommand\AnswerField[2][]
-{%
-    \mbox{\text@@Field{#1}{Ans.#2}{\RBW}{\DefaultHeightOfWidget}%
-        {}{\eq@setWidgetProps\eq@TextField}%
-        {\AnswerFieldDefaults\every@eqTextField\every@AnswerField}}%
-}
-\newcommand\autoAnswerField{%
-    \@ifundefined{lfooter}{\def\eq@next{\eq@autoAnswerFieldgobble}%
-    \PackageError{exerquiz}{The \string\autoAnswerField\space
-        command\MessageBreak requires the web package}{Use web package}
-    }{%
-        \PackageInfo{exerquiz}{%
-        For this auto answer field feature to run\MessageBreak
-        the webheadings pagestyle of the web package\MessageBreak
-        is required}\def\eq@next{\eq@autoAnswerField}%
-        \ifx\web@lfoot\@empty\else
-        \PackageWarning{exerquiz}{The left running footer already in
-        use\MessageBreak Will overwrite what is there now.
-        Better fix it.}\fi
-    }%
-    \eq@next
-}
-\newcommand\eq@autoAnswerFieldgobble[1][]{\relax}
-\newcommand\autoAnsFldRaiseBox[1]{\def\ef@aAFRB{#1}}
-\autoAnsFldRaiseBox{0pt}
-\let\autoAFOpts\@empty
-\newcommand\eq@autoAnswerField[1][]{\gdef\autoAFOpts{#1}%
-    \def\eq@insertAnswerField{\AnswerField[#1]{\currQuiz}}%
-    \eq@@autoAnswerField
-}
-\newcommand\eq@@autoAnswerField{\lfooter{\ifIsRespBox
-    \raisebox{\ef@aAFRB}{\eq@insertAnswerField}%
-    \global\IsRespBoxfalse\fi}%
-}
-\newcommand\manualAnswerField[1][\autoAFOpts]{%
-    \expandafter\AnswerField\expandafter[#1]{\currQuiz}}
-\def\PointsFieldDefaults
-{%
-   \rawPDF{}\BC{1 0 0}\BG{}\W{1}\S{S}\Ff{\FfReadOnly}
- }
-\newcommand\PointsField[2][]
-{%
-    \mbox{\text@@Field{#1}{PointsField.#2}{\PtFW}%
-        {\DefaultHeightOfWidget}{}{\eq@setWidgetProps\eq@TextField}%
-        {\PointsFieldDefaults\every@eqTextField\every@PointsField}}%
-}
-\def\PercentFieldDefaults
-{%
-    \rawPDF{}\BC{1 0 0}\BG{}\W{1}\S{S}\Ff{\FfReadOnly}%
-}
-\newcommand\PercentField[2][]
-{%
-    \mbox{\text@@Field{#1}{PercentField.#2}{\PcFW}%
-        {\DefaultHeightOfWidget}{}{\eq@setWidgetProps\eq@TextField}%
-        {\PercentFieldDefaults\every@eqTextField\every@PercentField}}%
-}
-\newcommand\RestoreScoreField
-{%
-    \global\let\eqScore\eq@Score
-    \global\let\eqOutOf\eq@OutOf
-}
-\def\DeclareQuiz#1{\edef\oField{#1}%
-    \edef\thisQuiz{#1}\edef\curr@quiz{#1}%
-    \edef\currQuiz{#1}\edef\curr@quiz{#1}%
-}
-\let\Quiz\DeclareQuiz
-\def\aeb@noindgobble{\noindent\@gobbletwo}
-\let\startQuizHere\relax
-\let\endQuizHere\relax
-\let\dockQuiz\relax
-\newcommand\floatQuiz{%
-    \global\let\eq@beginQuiz@saved\eq@beginQuiz
-    \global\let\eq@endQuiz@saved\eq@endQuiz
-    \global\let\startQuizHere\eq@beginQuiz
-    \global\let\endQuizHere\eq@endQuiz
-    \global\let\eq@beginQuiz\aeb@noindgobble
-    \global\let\eq@endQuiz\@empty
-    \global\let\dockQuiz\eq@dockQuiz
-}
-\newcommand\eq@dockQuiz{%
-    \global\let\eq@beginQuiz\eq@beginQuiz@saved
-    \global\let\eq@endQuiz\eq@endQuiz@saved
-    \global\let\startQuizHere\relax
-    \global\let\endQuizHere\relax
-    \global\let\eq@beginQuiz@saved\relax
-    \global\let\eq@endQuiz@saved
-    \global\let\dockQuiz\relax
-}
-\def\fancyQuizHeaders{%
-    \global\let\eq@sqsllabel@fancy@save\eq@sqsllabel
-    \gdef\eq@sqsllabel{\eq@fancyQuizHeaders}}
-\def\eq@fancyQuizHeaders{%
-    \if\eqQuizType\isQZ\expandafter\eq@fancyQuizHeadersfmt\else
-    \expandafter\eq@fancyShrtQuizHeadersfmt\fi
-}
-\let\eq@sqsllabel@fancy@save\@empty
-\def\restoreDefaultQuizHeaders{%
-    \global\let\eq@sqsllabel\eq@sqsllabel@fancy@save}
-\newcommand\fncyQHdrsColor{blue}
-\newcommand\FncyHdrsFmtNoTitleQuiz{Solution to Quiz:}
-\newcommand\FncyHdrsFmtQuestion{Question}
-\newcommand\dfltFncyQHdrsFmt{%
-    \protect\bfseries\protect\color{\fncyQHdrsColor}%
-    \ifx\aebTitleQuiz\@empty
-    \ifnum\@eqquestiondepth>0\relax\FncyHdrsFmtNoTitleQuiz\fi
-    \else\aebTitleQuiz:\ifnum\@eqquestiondepth=0\else\protect\ %
-    \FncyHdrsFmtQuestion\fi\fi\ifcase\@eqquestiondepth
-    \ifx\aebTitleQuiz\@empty\FncyHdrsFmtNoTitleQuiz\fi
-    \or\space\arabic{eqquestionnoi}.%
-    \or\space\arabic{eqquestionnoi}(\alph{eqquestionnoii})%
-    \or\space\arabic{eqquestionnoi}(\alph{eqquestionnoii})%
-        (\roman{eqquestionnoiii})\fi
-}
-\newcommand\dclrFncyQzHdrsFmt[1]{%
-    \def\eq@fancyQuizHeadersfmt{{#1}}%
-}
-\dclrFncyQzHdrsFmt{\dfltFncyQHdrsFmt}
-\newcommand\dclrFncySqHdrsFmt[1]{%
-    \def\eq@fancyShrtQuizHeadersfmt{{#1}}%
-}
-\dclrFncySqHdrsFmt{\dfltFncyQHdrsFmt}
-\let\tqhspace\space
-\newcommand\titleQuiz[1][]{#1\@titleQuizi}
-\def\@titleQuizi{\makeatletter
-    \@ifstar{\def\eq@tq@star{*}\eq@titleQuiz}%
-{\def\eq@tq@star{x}\eq@titleQuiz}}
-\def\eq@titleQuiz#1{%
-    \gdef\aebTitleQuiz{#1}\def\@currentlabelname{#1}%
-    \gdef\aeb@@titleQuiz{#1}%
-    \gdef\aebtitleQuiz{\mbox{\titleQuizfmt{#1}}\tqhspace}%
-\makeatother}
-\let\aebtitleQuiz\@empty
-\let\aebTitleQuiz\@empty
-\newcommand\titleQuizfmt{\bfseries}
-\def\ifQuizType#1#2{\if\eqQuizType\isQZ\def\qt@next{#1}%
-    \else\def\qt@next{#2}\fi\qt@next}
-\def\eq@ifstaroption#1#2{\if\eq@tq@star*\def\sq@next{#1}%
-    \else\def\sq@next{#2}\fi\sq@next}
-\let\eq@tq@star\relax
-\def\ifstaroption{\PackageWarning{exerquiz}
-    {\protect\ifstaroption\space is only defined within the\MessageBreak
-    shortquiz environment. Gobbling up its two\MessageBreak
-    arguments, sorry. This occurred}%
-    \@gobbletwo
-}
-\newcounter{qMarkCnt}
-\def\multipartquestion{\global\let\aeb@multipart\eq@One}
-\providecommand{\ptsLabel}[1]{\def\eqptsLabel{#1}}\ptsLabel{pts}
-\providecommand{\ptLabel}[1]{\def\eqptLabel{#1}}\ptLabel{pt}
-\let\aeb@multipart\eq@Zero
-\newcommand\pcMarkupColor{red}
-\def\markupWidth{12bp}\def\markupHeight{8bp}\def\markupTextSize{0}
-\newcommand{\aeb@creditmarkup}{%
-    \textField[\Ff\FfReadOnly\BC{}\F\FHidden
-    \textColor{\pcMarkupColor}\textSize{\markupTextSize}\autoCenter{n}%
-    \DV{0 \eqptsLabel}\V{0 \eqptsLabel}]%
-    {qMark.\currQuiz.\thequestionno.\arabic{qMarkCnt}}%
-    {\markupWidth}{\markupHeight}%
-}
-\def\showCreditMarkup{%
-    \def\qMark{\if\aeb@multipart\eq@Zero\aeb@creditmarkup
-    \stepcounter{qMarkCnt}\else\global\let\aeb@multipart\eq@Zero\fi}%
-    \def\qMark@Hook{\aeb@creditmarkupfmt}%
-}
-\def\hideCreditMarkup{\global\let\qMark@Hook\@empty}
-\newcommand{\aeb@creditmarkupfmt}{\makebox[0pt][r]{\qMark\hspace{-2bp}}}
-\long\def\gobbleToEndQt#1\endeqQt{\ifeqforpaper\expandafter\@gobble\fi}
-\long\def\gobbleToEndSQt#1\endeqSQt{%
-    \ifeqforpaper\expandafter\@gobble\fi}
-\newcommand\inclQtFilter[1]{\def\eqarg{#1}\ifx\eqarg\eqFilterArg
-    \else\expandafter\gobbleToEndQt\fi}
-\newcommand{\exclQt}[1]{\gobbleToEndQt}
-\newcommand{\useQtFilter}{%
-    \let\eqQt\inclQtFilter\let\eqSQt\exclSQt
-}
-\newcommand\inclSQtFilter[1]{\def\eqarg{#1}\ifx\eqarg\eqFilterArg
-    \else\expandafter\gobbleToEndSQt\fi}
-\newcommand{\exclSQt}[1]{\gobbleToEndSQt}
-\newcommand{\useSQtFilter}{\let\eqSQt\inclSQtFilter\let\eqQt\exclQt}
-\newcommand{\sqbookmarkfmt}{Short Quiz \@shortquizCnt.\space}
-\newcommand{\qzbookmarkfmt}{Quiz \@quizCnt.\space}
-\newcommand{\quizpdfbookmark}[1]{\relax\def\argi{#1}%
-    \if\eqQuizType\isSQZ\edef\aeb@bmmrkdest{sqbm.\@shortquizCnt}%
-    \def\aeb@thisbkmrkfmt{\sqbookmarkfmt}\else
-    \edef\aeb@bmmrkdest{qzbm.\@quizCnt}%
-    \def\aeb@thisbkmrkfmt{\qzbookmarkfmt}\fi
-    \def\quizpdfbookmarktitle{#1}%
-    \def\eqex@next{\belowpdfbookmark{\aeb@thisbkmrkfmt#1}%
-        {\aeb@bmmrkdest}}%
-    \ifx\aebTitleQuiz\@empty\else\ifx\argi\@empty
-        \def\quizpdfbookmarktitle{\aebTitleQuiz}%
-        \def\eqex@next{\belowpdfbookmark{\aebTitleQuiz}%
-        {\aeb@bmmrkdest}}\fi\fi
-    \eqex@next\ignorespaces
-}
-\def\pushEnvir{\xdef\eq@currenvir{\@currenvir}\endgroup}
-\def\popEnvir{\begingroup\@endpefalse
-    \edef\@currenvir{\eq@currenvir}%
-    \edef\@currenvline{\on@line}%
-}
-\def\answers@sq{\parindent0pt
-    \ifx\solutionparshape\@empty\else
-        \pushEnvir\par\noindent\expandafter\popEnvir\fi
-    \stepcounter{questionno}%
-    \if\sqstar*\relax
-        \if\aeb@FLOverride\eq@l
-            \let\@Ans\Ans@sq@l\else
-            \let\@Ans\Ans@sq@f\fi
-    \else
-        \if\aeb@FLOverride\eq@f
-            \let\@Ans\Ans@sq@f\else
-            \let\@Ans\Ans@sq@l\fi
-    \fi
-    \def\aeb@answerType{r}\@ifnextchar[{\answers@@sq}%
-    {\@ifstar{\answers@@sq[\curr@quiz.\thequestionno]}{\answers@@sq[]}}}
-\def\manswers@sq{\parindent0pt
-    \@ifundefined{ifuserectforms}{}
-        {\if\aeb@FLOverride\eq@f\ifuserectforms
-            \useRectForMC\else\useCircForMC\fi\fi}%
-    \ifx\solutionparshape\@empty\else
-        \pushEnvir\par\noindent\expandafter\popEnvir\fi
-    \stepcounter{questionno}%
-    \if\sqstar*\relax
-        \if\aeb@FLOverride\eq@l
-        \let\@Ans\Ans@ck@sq@l\else
-        \let\@Ans\Ans@ck@sq@f\fi
-    \else
-        \if\aeb@FLOverride\eq@f
-            \let\@Ans\Ans@ck@sq@f\else
-            \let\@Ans\Ans@ck@sq@l\fi
-    \fi
-    \def\aeb@answerType{c}\@ifnextchar[{\answers@@sq}%
-    {\@ifstar{\answers@@sq[\curr@quiz.\thequestionno]}{\answers@@sq[]}}}
-\let\sq@hwdest\@empty % hard-wired destination
-\def\answers@@sq[#1]#2{%
-    \xdef\aeb@numCols{#2}%
-    \ifx\sq@hwdest\@empty
-        \xdef\@qzsolndest{#1}\else
-        \gdef\@qzsolndest{\sq@hwdest}\fi
-    \if\aeb@numCols1\gdef\eq@listType{1}\expandafter\answers@sq@list
-    \else
-        \gdef\eq@listType{0}\expandafter\answers@@sq@tabular
-    \fi{\aeb@numCols}%
-}
-\def\setMClabelsepDefault#1{\def\eq@hspanner@default{#1}}
-\def\setMClabelsep#1{\def\eq@hspanner{#1}}
-\setMClabelsep{\ }\setMClabelsepDefault{\ }
-\def\resetMClabelsep{\expandafter\setMClabelsep\expandafter
-    {\eq@hspanner@default}}
-\def\eq@lw@l{\eq@l@l\eq@hspanner}
-\def\eq@l@l{\normalsize\normalfont(d)}
-\def\eq@lw@f{\kern\RadioFieldSize\eq@hspanner}
-\@ifundefined{ifwithsoldoc}{\newif\ifwithsoldoc\withsoldocfalse}{}
-\let\eq@ansChoiceArray\@empty
-\def\eq@recordAnsChoice{%
-    \ifx\eq@ansChoiceArray\@empty
-        \edef\tmp@exp{\noexpand\g@addto@macro
-            \noexpand\eq@ansChoiceArray{"\alph{quizno}"}}\else
-        \edef\tmp@exp{\noexpand\g@addto@macro
-            \noexpand\eq@ansChoiceArray{,"\alph{quizno}"}}\fi
-        \tmp@exp
-}
-\newcommand\Ans@list[2][0]{\gdef\eq@pPTs{#1}\xdef\Ans@choice{#2}%
-    \item\relax\noindent\if\eq@listType\eq@One
-    \addtocounter{quizno}{-1}\@ifundefined{ifwithsoldoc}
-        {\refstepcounter{quizno}}{\ifwithsoldoc\stepcounter{quizno}\else
-        \refstepcounter{quizno}\fi}\fi
-        \ignorespaces}
-\newenvironment{answers@sq@list}[1]
-{%
-    \ifx\aeb@answerType\eq@r
-        \let\endanswers\endanswers@sq@list\else
-        \let\endmanswers\endanswers@sq@list\fi
-    \list{\strut\@Ans}{%
-        \if\sqstar*\relax
-            \settowidth{\labelwidth}{\eq@lw@f}\else
-            \settowidth{\labelwidth}{\eq@lw@l}\fi
-        \setlength{\topsep}{-\parskip+\aboveanswersSkip}%
-        \setlength{\parsep}{0pt}\setlength{\itemindent}{0pt}%
-        \setlength{\itemsep}{0pt}\setlength{\partopsep}{0pt}%
-        \setlength{\listparindent}{\parindent}%
-        \ifnum\exerwparts@cols>1\relax
-            \ifx\itsExerParts\eq@YES
-             \setlength{\leftmargin}{\labelwidth}\else
-             \setlength{\leftmargin}{\labelwidth+\eqemargin}\fi
-        \else
-        \ifx\solutionparshape\@empty
-            \setlength{\leftmargin}{\labelwidth}\else
-            \setlength{\leftmargin}{\labelwidth+\eqemargin}\fi\fi
-       \setlength{\labelsep}{0pt}%
-%      \settowidth{\labelsep}{\eq@hspanner}%
-        \def\Ans{\Ans@list}%
-    }%
-}%
-{\endlist\setcounter{quizno}{0}\eq@answersEndHook}
-\newcommand\Ans@tabular[2][0]{\gdef\eq@pPTs{#1}\xdef\Ans@choice{#2}%
-    \leavevmode\@Ans
-}
-\newcommand\sqtabsep[1]{\def\eq@argi{#1}\ifx\eq@argi\@empty
-    \def\sq@tabsep{1.5pt}\else\def\sq@tabsep{#1}\fi}
-\sqtabsep{1.5pt}
-\def\sqTabPos#1{\def\sq@TabPos{[#1]}}\sqTabPos{}
-\def\answers@@sq@tabular#1{%
-    \ifinner
-        \ifx\itsExerParts\eq@YES\par\removelastskip
-            \removelastparskip\vskip\aboveanswersSkip\fi
-    \else\par\removelastskip\removelastparskip
-        \vskip\aboveanswersSkip\fi
-    \noindent\ifnum\exerwparts@cols>1\relax\parshape=0\fi
-    \tabcolsep=0pt
-    \eq@tmpdima=\linewidth
-    \@tempcnta#1\relax
-    \advance\@tempcnta-1\relax
-    \multiply\@tempcnta by2
-    \@tempdima\sq@tabsep\relax
-    \multiply\@tempdima\@tempcnta
-    \advance\eq@tmpdima-\@tempdima
-    \divide\eq@tmpdima by#1
-    \def\Ans{\Ans@tabular}%
-    \tabcolsep\sq@tabsep\relax
-    \expandafter\tabular\sq@TabPos{@{}*{#1}{p{\eq@tmpdima}}@{}}}%
-\let\eq@save@doendpe\@doendpe
-\def\reset@doendpe#1{\global\eq@scratchtoks=\expandafter{#1}%
-    \gdef\@doendpe{\par\@endpetrue\global\let\@doendpe\eq@save@doendpe
-        \def\par{\@restorepar
-        \expandafter\everypar
-            \expandafter{\the\eq@scratchtoks}\par\@endpefalse}%
-        \everypar{{\setbox\z@\lastbox}%
-            \everypar{}\@endpefalse}\the\eq@scratchtoks
-    }%
-}
-\newcommand\answersEndHook[1]{\def\eq@answersEndHook{#1}}
-\let\eq@answersEndHook\@empty
-\def\endanswers@sq{\endtabular\setcounter{quizno}{0}%
-    \eq@answersEndHook\reset@doendpe{\the\everypar}%
-    \ifinner\else%\par
-        \removelastskip
-        \vspace{\aboveanswersSkip}\@endpetrue\fi
-}
-\def\endmanswers@sq{\endtabular\setcounter{quizno}{0}%
-    \eq@answersEndHook\reset@doendpe{\the\everypar}%
-    \ifinner\else%\par
-        \removelastskip
-        \vspace{\aboveanswersSkip}\@endpetrue\fi
-}
-\def\popiiictm{\special{CTM: pop pop pop}}
-\def\sqWrongRespJS{OnBlurRespBox( false, "\oField" );}
-\def\sqRightRespJS{OnBlurRespBox( true, "\oField" );}
-\def\Ans@sq@l@Actions
-{%
-    \A{\if\Ans@choice1
-        \JS{\sqRightRespJS}
-        \ifx\@qzsolndest\@empty\else
-            \ifeq@solutionsafter\else
-                /Next <</S/GoTo/D(\@qzsolndest)>>
-            \fi
-        \fi
-    \else
-        \JS{\sqWrongRespJS\jsR
-        \ifx\oField\@empty\else
-            updateTally("\oField.\thequestionno");
-        \fi}%
-    \fi
-    }%
-}
-\def\linkContentFormat{\alph{quizno}}
-\def\aebChoiceAltFmt{\noexpand\ifaebshowgrayletters
-    \Alph{quizno}\noexpand\else\linkContentFormat\noexpand\fi}
-\def\linkContentWrapper{(\hfil\linkContentFormat\hfil)}%
-\def\Ans@sq@l{%
-    \leavevmode\if\eq@listType\eq@One\stepcounter{quizno}\else
-        \@ifundefined{ifwithsoldoc}{\refstepcounter{quizno}}
-        {\ifwithsoldoc\stepcounter{quizno}\else
-        \refstepcounter{quizno}\fi}\fi\PBS\raggedright
-    \settowidth{\eq@tmplength}{\eq@lw@l}\sbox{\eq@tmpbox}{\eq@l@l}%
-    \eq@tmpdima=\wd\eq@tmpbox
-    \def\link@@Content{\linkContentWrapper}%
-    \hangindent=\eq@tmplength\hangafter=1\relax
-    \set@@Link{}{}{}%
-        {\makebox[\eq@tmpdima]{\color{\@linkcolor}\link@@Content}}
-        {\eq@protect\A}{\eq@setWidgetProps\setLink@driver}%
-        {\set@LinkTextDefaults\Ans@sq@l@Actions\every@Link}%
-    \Ans@proofing{\eq@tmpdima}%
-\eq@hspanner\ignorespaces}
-\def\Ans@ck@sq@l{\Ans@ck@sq@f}
-\def\@@Ans@sq@f@Defaults
-{%
-    \BC{0 0 0}\Ff{\FfNoToggleToOff}\W{1}
-    \F{\FPrint}\textSize{12}\textColor{0 g}
-}
-\def\sqTurnOffAlerts{\let\@sqTurnOffAlerts\eq@Zero}
-\def\sqTurnOnAlerts{\let\@sqTurnOffAlerts\eq@One}
-\sqTurnOnAlerts
-\def\sqNoCorrections{\let\@sqAlertsOnly\eq@One}
-\def\sqCorrections{\let\@sqAlertsOnly\eq@Zero}
-\sqNoCorrections
-\def\Ans@sq@f@ActionsTrue{%
-  \if\@sqTurnOffAlerts1OnBlurRespBox(true,"\oField");\jsR\fi
-  \ifx\@qzsolndest\@empty\else\ifeq@solutionsafter\else
-    jmpToNamedDest("\oField","\@qzsolndest",%
-        \if\@sqTurnOffAlerts00\else1\fi);\fi
-  \fi\eqAddAAMouseUpMC}
-\def\Ans@sq@f@ActionsFalse{%
-  \if\@sqTurnOffAlerts1OnBlurRespBox(false,"\oField" );\jsR\fi
-  \ifx\oField\@empty\else
-    updateTally("\oField.\thequestionno");
-  \fi\jsR\eqAddAAMouseUpMC}
-\def\Ans@sq@f@Actions{\A{\if\Ans@choice\eq@One
-    \JS{\Ans@sq@f@ActionsTrue}\else
-    \JS{\Ans@sq@f@ActionsFalse}\fi}%
-    \AAmousedown{updateTally.downState=!!event.target.isBoxChecked%
-      (\arabic{quizno}-1);}}
-\def\Ans@proofing#1{\ifeq@proofing\if\Ans@choice1\relax
-    \llap{\@proofingsymbol\,\hskip#1\relax}%
-  \fi\fi}
-\def\sqRghtSymbChoice#1{\chooseJSsymbol*{#1}%
-    \ifx\eq@retnStyle\@empty
-    \edef\sq@corrsymch{\sqRghtSymbChoiceDef}\else
-    \edef\sq@corrsymch{#1}\fi}
-\def\sqRghtSymbColor#1{\edef\eq@arg{#1}\ifx\eq@arg\@empty
-    \edef\sq@corrsymcol{\sqRghtSymbColorDef}\else
-    \edef\sq@corrsymcol{#1}\fi}
-\def\sqWrngSymbChoice#1{\chooseJSsymbol*{#1}%
-    \ifx\eq@retnStyle\@empty
-    \edef\sq@wrgsymch{\sqWrngSymbChoiceDef}\else
-    \edef\sq@wrgsymch{#1}\fi}
-\def\sqWrngSymbColor#1{\edef\eq@arg{#1}\ifx\eq@arg\@empty
-    \edef\sq@wrgsymcol{\sqWrngSymbColorDef}\else
-    \edef\sq@wrgsymcol{#1}\fi}
-\def\sqRghtSymbChoiceDef{check}
-\def\sqRghtSymbColorDef{0 .6 0 rg}
-\def\sqWrngSymbChoiceDef{cross}
-\def\sqWrngSymbColorDef{1 0 0 rg}
-\edef\sq@corrsymch{\sqRghtSymbChoiceDef}
-\edef\sq@corrsymcol{\sqRghtSymbColorDef}
-\edef\sq@wrgsymch{\sqWrngSymbChoiceDef}
-\edef\sq@wrgsymcol{\sqWrngSymbColorDef}
-\def\sqResetSymbToDef{%
-    \sqRghtSymbChoice{}\sqRghtSymbColor{}%
-    \sqWrngSymbChoice{}\sqWrngSymbColor{}%
-}
-\def\qChoiceSymb#1{\chooseJSsymbol*{#1}%
-    \ifx\eq@retnStyle\@empty
-    \edef\qz@chksymb{\qChoiceSymbDef}\else
-    \edef\qz@chksymb{#1}\fi}
-\def\qChoiceColor#1{\edef\eq@arg{#1}\ifx\eq@arg\@empty
-    \edef\qz@chksymbcol{\qChoiceColorDef}\else
-    \edef\qz@chksymbcol{#1}\fi}
-\def\qChoiceSymbDef{check}
-\def\qChoiceColorDef{0 0 0 rg}
-\edef\qz@chksymb{\qChoiceSymbDef}
-\edef\qz@chksymbcol{\qChoiceColorDef}
-\let\rbf@Opts\@empty
-\def\Ans@sq@f{%
-    \if\eq@listType\eq@One\stepcounter{quizno}\else
-        \@ifundefined{ifwithsoldoc}{\refstepcounter{quizno}}
-        {\ifwithsoldoc\stepcounter{quizno}\else
-        \refstepcounter{quizno}\fi}\fi\PBS\raggedright
-    \if\Ans@choice\eq@One
-        \def\rbf@Opts{\symbolchoice{\sq@corrsymch}%
-            \textColor{\sq@corrsymcol}}\else
-        \def\rbf@Opts{\symbolchoice{\sq@wrgsymch}%
-            \textColor{\sq@wrgsymcol}}\fi
-    \settowidth{\eq@tmplength}{\eq@lw@f}%
-    \eq@tmpdima=\wd\eq@tmpbox%
-    \hangindent=\eq@tmplength\hangafter=1\relax
-    \insertGrayLetters % 6.3d
-    \mbox{\expandafter\radio@@Button\expandafter{\rbf@Opts}%
-        {mc.\oField.\thequestionno}%
-        {\RadioFieldSize}% 11/16/05 changed from \oField to mc.\oField
-        {\RadioFieldSize}{\Ans@choice\alph{quizno}}{\eq@protect\A}%
-        {\eq@setWidgetProps\eq@RadioCheck@driver}%
-        {\@@Ans@sq@f@Defaults\Ans@sq@f@Actions\every@RadioButton
-         \every@sqRadioButton}}%
-    \Ans@proofing{\RadioFieldSize}%
-\eq@hspanner\ignorespaces}
-\def\@@Ans@ck@sq@f@Defaults
-{%
-    \BC{0 0 0}\Ff{\FfNoToggleToOff}
-    \F{\FPrint}\textSize{12}\textColor{0 g}\W{1}
-}
-\begingroup
-\catcode`\&=12
-\gdef\eq@AND{&&}
-\endgroup
-\def\Ans@ck@sq@f@ActionsTrue{%
-  var fName=event.target.name;\jsR
-  var g=this.getField("mc.\oField.\thequestionno");\jsR
-  var a=g.getArray();\jsR
-  for (var i=0; i<a.length; i++)\jsR\jsT
-    if ( a[i].isBoxChecked(0) \eq@AND\space
-      a[i].value.charAt(0)==0)\jsR\jsT\jsT
-   a[i].checkThisBox(0,false);\jsR
-      \if\@sqTurnOffAlerts1OnBlurRespBox(%
-        true,"\oField");\jsR\fi
-      \ifx\@qzsolndest\@empty\else
-        \ifeq@solutionsafter\else
-  % if all correct answers are check, jump to solution
-          for (var i=0; i<a.length; i++){\jsR\jsT
-            if ( a[i].exportValues[0].charAt(0)==1 \eq@AND\space
-              !a[i].isBoxChecked(0))\jsR\jsT\jsT
-              break;\jsR
-          }\jsR
-          if (i>=a.length) jmpToNamedDest("\oField","\@qzsolndest",%
-          \if\@sqTurnOffAlerts00\else1\fi);
-        \fi
-      \fi\eqAddAAMouseUpMS}
-\def\Ans@ck@sq@f@ActionsFalse{%
-  var fName=event.target.name;\jsR
-  var g=this.getField("mc.\oField.\thequestionno");\jsR
-  var a=g.getArray();\jsR
-  for (var i=0; i<a.length; i++)\jsR
-  {\jsR\jsT
-   if (a[i].value.charAt(0)==0) {\jsR\jsT\jsT
-   if ( fName != a[i].name )\jsR\jsT\jsT\jsT
-     a[i].checkThisBox(0,false);\jsR\jsT
-   }\jsR
-  }\jsR
-  \if\@sqTurnOffAlerts1OnBlurRespBox( false, "\oField" );\fi
-  \ifx\oField\@empty\else
-    updateTally("\oField.\thequestionno");
-  \fi\eqAddAAMouseUpMS}
-\def\Ans@ck@sq@f@Actions{%
-  \A{\if\Ans@choice\eq@One
-    \JS{\Ans@ck@sq@f@ActionsTrue}\else
-    \JS{\Ans@ck@sq@f@ActionsFalse}\fi}%
-  \AAmousedown{updateTally.downState=!!event.target.isBoxChecked(0);}}
-\def\Ans@ck@sq@f{%
-    \if\eq@listType\eq@One\stepcounter{quizno}\else
-        \@ifundefined{ifwithsoldoc}{\refstepcounter{quizno}}
-        {\ifwithsoldoc\stepcounter{quizno}\else
-        \refstepcounter{quizno}\fi}\fi\PBS\raggedright
-    \if\Ans@choice1%
-        \def\rbf@Opts{\symbolchoice{\sq@corrsymch}%
-            \textColor{\sq@corrsymcol}}\else
-        \def\rbf@Opts{\symbolchoice{\sq@wrgsymch}%
-            \textColor{\sq@wrgsymcol}}\fi
-    \settowidth{\eq@tmplength}{\eq@lw@f}%
-    \eq@tmpdima=\wd\eq@tmpbox%
-    \hangindent=\eq@tmplength\hangafter=1\relax
-    \insertGrayLetters % 6.3d
-    \mbox{\expandafter\check@@Box\expandafter{\rbf@Opts}%
-        {mc.\oField.\thequestionno.\arabic{quizno}}%
-        {\RadioFieldSize}{\RadioFieldSize}
-        {\Ans@choice\alph{quizno}}{\eq@protect\A}%
-        {\eq@setWidgetProps\eq@RadioCheck@driver}%
-        {\@@Ans@ck@sq@f@Defaults\Ans@ck@sq@f@Actions\every@CheckBox
-         \every@sqCheckBox}}%
-    \Ans@proofing{\RadioFieldSize}%
-\eq@hspanner\ignorespaces}
-\newskip\aboveanswersSkip
-\setlength\aboveanswersSkip{3pt}
-\let\q@hwdest\@empty % hard-wired destination
-\let\pointValuesArray\@empty
-\newif\ifeqshowmarkup\eqshowmarkupfalse
-\newif\ifeqshowOutOf \eqshowOutOffalse
-\def\showOutOfinSmryTbl{false}
-\def\eq@recordThesePTs{%
-    \ifx\pointValuesArray\@empty
-    \edef\ptsValue{\showOutOfinSmryTbl,\eqPTs}\else
-        \edef\ptsValue{,\eqPTs}\fi
-    \expandafter\g@addto@macro\expandafter\pointValuesArray
-    \expandafter{\ptsValue}}
-\let\ptypeArray\@empty
-\def\eq@recordProbType{%
-    \ifx\ptypeArray\@empty
-        \edef\tmp@exp{\noexpand\g@addto@macro
-            \noexpand\ptypeArray{null,"\eqQT"}}\else
-        \edef\tmp@exp{\noexpand\g@addto@macro
-            \noexpand\ptypeArray{,"\eqQT"}}\fi
-        \tmp@exp
-}
-\let\corrAnsArray\@empty
-\def\eq@recordCorrAns#1{%
-    \ifx\corrAnsArray\@empty
-        \edef\tmp@exp{\noexpand\g@addto@macro
-            \noexpand\corrAnsArray{null,#1}}\else
-        \edef\tmp@exp{\noexpand\g@addto@macro
-            \noexpand\corrAnsArray{,#1}}\fi
-        \tmp@exp
-}
-\def\aeb@answerType@r{r}
-\def\aeb@answerType@c{c}
-\newcommand\answers@q{%
-    \eq@AddProbToQzQuesList
-    \def\aeb@answerType{r}\setdefault@Ans\eq@recordThesePTs
-    \eq@recordProbType
-    \addtocounter{eqpointvalue}{\eqPTs}\stepcounter{questionno}%
-    \def\aeb@thisType{"mc"}\@ifnextchar[{\answers@@q}%
-    {\@ifstar{\answers@@q[\curr@quiz.\thequestionno]}{\answers@@q[]}}%
-}
-\def\answers@@q[#1]#2{\global\let\eq@ansChoiceArray\@empty
-    \xdef\aeb@numCols{#2}\edef\eqtmp{\aPointType}%
-    \xdef\aPointType{\eqtmp,[\eqPTs,\aeb@thisType]}%
-    \ifx\q@hwdest\@empty
-        \xdef\@qzsolndest{#1}\else
-        \gdef\@qzsolndest{\q@hwdest}\fi
-    \ifnum\aeb@numCols=1
-    \gdef\eq@listType{1}\expandafter\answers@q@list\else
-    \gdef\eq@listType{0}\expandafter\answers@q@tabular\fi{\aeb@numCols}%
-}
-\newcommand\manswers@q
-{%
-    \eq@AddProbToQzQuesList
-    \def\aeb@answerType{c}\@setFormLinkType
-    \global\expandafter\let\expandafter\@Ans
-    \expandafter=\csname Ans@ck@\@@quiztype\endcsname
-    \eq@recordThesePTs\eq@recordProbType
-    \addtocounter{eqpointvalue}{\eqPTs}\stepcounter{questionno}%
-    \def\aeb@thisType{"ms"}\@ifnextchar[{\answers@@q}%
-    {\@ifstar{\answers@@q[\curr@quiz.\thequestionno]}{\answers@@q[]}}%
-}
-\newenvironment{answers@q@list}[1]{%
-    \ifx\aeb@answerType\eq@r
-        \let\endanswers\endanswers@q@list\else
-        \let\endmanswers\endanswers@q@list\fi
-    \list{\strut\@Ans}{%
-        \if\qstar*\relax
-            \if\aeb@FLOverride\eq@l
-            \settowidth{\labelwidth}{\eq@lw@l}\else
-            \settowidth{\labelwidth}{\eq@lw@f}\fi
-        \else
-            \if\aeb@FLOverride\eq@f
-            \settowidth{\labelwidth}{\eq@lw@f}\else
-            \settowidth{\labelwidth}{\eq@lw@l}\fi
-        \fi
-        \setlength{\topsep}{-\parskip+\aboveanswersSkip}%
-        \setlength{\parsep}{0pt}\setlength{\itemindent}{0pt}%
-        \setlength{\listparindent}{\parindent}%
-        \setlength{\leftmargin}{\labelwidth}%
-        \setlength{\labelsep}{0pt}%
-        \def\Ans{\Ans@list}%
-    }%
-}{\endlist\setcounter{quizno}{0}%
-    \eq@answersEndHook
-    \setdefault@Ans
-    \ifx\aeb@answerType\aeb@answerType@r
-        \eq@recordCorrAns{\eq@ansChoiceArray}\ifwithinMCFI
-            \eq@recordCorrAns{\s@veCorrAnsMCFI}\fi\else
-            \eq@recordCorrAns{[\eq@ansChoiceArray]}\fi
-    \global\let\eqlimselTo\@empty
-}
-\newcommand\qztabsep[1]{\def\eq@argi{#1}\ifx\eq@argi\@empty
-    \def\qz@tabsep{1.5pt}\else\def\qz@tabsep{#1}\fi}
-\qztabsep{1.5pt}
-\def\qzTabPos#1{\def\qz@TabPos{[#1]}}\qzTabPos{}
-\def\answers@q@tabular#1{%
-    \ifinner\else\par\removelastparskip\vspace{\aboveanswersSkip}\fi
-    \eq@tmpdima=\linewidth
-    \@tempcnta#1\relax
-    \advance\@tempcnta-1\relax
-    \multiply\@tempcnta by2
-    \@tempdima\qz@tabsep\relax
-    \multiply\@tempdima\@tempcnta
-    \advance\eq@tmpdima-\@tempdima
-    \divide\eq@tmpdima by#1
-    \tabcolsep\qz@tabsep\relax
-    \def\Ans{\Ans@tabular}%
-    \ifx\aeb@answerType\eq@r
-        \let\endanswers\endanswers@q@tabular\else
-        \let\endmanswers\endanswers@q@tabular\fi
-    \noindent\expandafter
-        \tabular\qz@TabPos{@{}*{#1}{p{\eq@tmpdima}}@{}}%
-}
-\def\endanswers@q@tabular
-{%
-    \endtabular\setcounter{quizno}{0}%
-    \eq@answersEndHook
-    \setdefault@Ans
-    \ifx\aeb@answerType\aeb@answerType@r
-        \eq@recordCorrAns{\eq@ansChoiceArray}\ifwithinMCFI
-        \eq@recordCorrAns{\s@veCorrAnsMCFI}\fi\else
-        \eq@recordCorrAns{[\eq@ansChoiceArray]}\fi
-    \global\let\eqlimselTo\@empty
-}
-\let\qRadionActionsHook\@empty
-\def\Ans@@l@Actions{\A{\JS{%
-   this.getField("mc.\curr@quiz.\thequestionno").value
-        = "\Ans@choice\alph{quizno}";\jsR
-   RecordPointValue([0,\eqPTs,\eq@pPTs],\thequestionno);\jsR
-   RecordProblemType("\eqQT",\thequestionno);\jsR
-   ProcessQuestion(\Ans@choice,"\alph{quizno}",\thequestionno,%
-\arabic{quizno},"\curr@quiz",0,\ifnocorrections0\else1\fi,%
-"\bqlabelISO"\if\eqQuizType\isQZ\ifx\eq@online\eq@YES
-\ifeq@noquizsolutions\else,1\fi\fi\fi);\qRadionActionsHook}}%
-}
-\def\Ans@r@l@Defaults
-{%
-    \BC{}\S{S}\W{1}\Ff{\FfNoToggleToOff}\F{\FPrint}
-    \textSize{12}\textColor{0 g}\Ff{\FfReadOnly}
-}
-\def\Ans@l{\leavevmode\if\eq@listType1\stepcounter{quizno}%
-    \else\refstepcounter{quizno}\fi\PBS\raggedright
-    \settowidth{\eq@tmplength}{\eq@lw@l}\sbox{\eq@tmpbox}{\eq@l@l}%
-    \hangindent=\eq@tmplength\hangafter=1\relax
-    \eq@tmpdima=\wd\eq@tmpbox
-    \def\link@@Content{(\hfil\linkContentFormat\hfil)}%
-    \def\late@options{\BC{}}%
-\if\Ans@choice1\relax\eq@recordAnsChoice\fi
-    \makebox[0pt][l]{\radio@@Button{}{mc.\curr@quiz.\thequestionno}%
-        {\eq@tmpdima}{\RadioFieldSize}{\Ans@choice\alph{quizno}}%
-        {\eq@protect\A}{\eq@setWidgetProps\eq@l@check@driver}%
-        {\Ans@r@l@Defaults\every@RadioButton
-        \every@qRadioButton\late@options}}%
-    \set@@Link{}{}{}%
-    {\makebox[\eq@tmpdima]{\color{\@linkcolor}\link@@Content}}%
-    {\eq@protect\A}{\eq@setWidgetProps\setLink@driver}%
-    {\set@LinkTextDefaults\Ans@@l@Actions\every@Link}%
-    \ifnocorrections\else
-        \if\Ans@choice1\relax
-            \edef\Ans@c@l@Choice{\noexpand\DV{Yes}%
-                \ifx\@qzsolndest\@empty
-                    \noexpand\Ff{\FfReadOnly}%
-                \else % there is a solution
-                    \ifeq@noquizsolutions
-                        \noexpand\Ff{\FfReadOnly}%
-                    \else
-                        \noexpand\A{\noexpand\quiz@SolutionActionHook}%
-                    \fi
-                \fi
-            }%
-        \else
-            \def\Ans@c@l@Choice{\Ff{\FfReadOnly}\BC{}}%
-        \fi
-        \def\late@options{\BC{}}%
-        \if\Ans@choice1\relax
-            \ifx\@qzsolndest\@empty\else
-                \ifeq@noquizsolutions\else
-                    \edef\late@options{\noexpand\BC{\solution@Color}}%
-                \fi
-            \fi
-        \fi
-        \makebox[0pt][r]{\check@@Box{}%
-            {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}%
-            {\eq@tmpdima}{0pt}{Yes}{}% \@tempdimb
-            {\eq@setWidgetProps\eq@l@check@driver}%
-            {\Ans@c@f@Defaults\Ans@c@l@Choice\every@RadioButton
-             \every@qRadioButton\late@options}}%
-    \fi
-    \Ans@proofing{\eq@tmpdima}%
-\eq@hspanner\ignorespaces}
-\def\Ans@ck@@l@Actions{\A{\JS{%
-    var ckfName="mck.\curr@quiz.\thequestionno.\arabic{quizno}";\jsR
-    var ckf = this.getField(ckfName);\jsR
-    ckf.checkThisBox(0,!ckf.isBoxChecked(0));\jsR
-    var _bOK=true;\jsR
-\ifx\eqlimselTo\@empty\else _bOK = LimitSelection(\eqlimselTo,%
-"mck.\curr@quiz.\thequestionno","\arabic{quizno}");\jsR\fi
-if (_bOK) {\jsR\jsT
-       var aPMSretn=ProcessMultiSelection(\Ans@choice,"\alph{quizno}",%
-\thequestionno,\arabic{quizno},"\curr@quiz",\eqPTs,\eq@pPTs);\jsR\jsT
-       RecordProblemType("\eqQT",\thequestionno);\jsR\jsT
-       ProcessQuestion(aPMSretn[0],aPMSretn[1],\thequestionno,%
-\arabic{quizno},"\curr@quiz",0,\ifnocorrections0\else1\fi,%
-"\bqlabelISO"\if\eqQuizType\isQZ\ifx\eq@online\eq@YES
-\ifeq@noquizsolutions\else,1\fi\fi\fi);\jsR
-}
-    }}
-}
-\def\Ans@ck@l@Defaults
-{%
-    \BC{}\S{S}\W{1}\H{N}\Ff{\FfNoToggleToOff}
-    \textSize{12}\textColor{0 g}\Ff{\FfReadOnly}
-}
-\def\Ans@ck@l{%
-    \leavevmode\if\eq@listType1\stepcounter{quizno}%
-    \else\refstepcounter{quizno}\fi
-    \if\Ans@choice1\eq@recordAnsChoice\fi\PBS\raggedright
-    \settowidth{\eq@tmplength}{\eq@lw@l}\sbox{\eq@tmpbox}{\eq@l@l}%
-    \hangindent=\eq@tmplength\hangafter=1\relax
-    \eq@tmpdima=\wd\eq@tmpbox
-    \def\link@@Content{(\hfil\linkContentFormat\hfil)}%
-    \makebox[0pt][l]{%
-        \check@@Box{}{mck.\curr@quiz.\thequestionno.\arabic{quizno}}%
-        {\eq@tmpdima}{\RadioFieldSize}{\Ans@choice\alph{quizno}}%
-        {\eq@protect\A}{\eq@setWidgetProps\eq@l@check@driver}%
-        {\Ans@ck@l@Defaults\every@RadioButton
-         \every@qckCheckbox}}%
-    \set@@Link{}{}{}%
-    {\makebox[\eq@tmpdima]{\color{\@linkcolor}\link@@Content}}%
-    {\eq@protect\A}{\eq@setWidgetProps\setLink@driver}%
-    {\set@LinkTextDefaults\Ans@ck@@l@Actions\every@Link}%
-    \ifnocorrections\else
-        \if\Ans@choice1\relax
-            \edef\Ans@c@l@Choice{\noexpand\DV{Yes}%
-                \ifx\@qzsolndest\@empty\noexpand\BC{}%
-                \noexpand\Ff{\FfReadOnly}%
-                \else % there is a solution
-                    \ifeq@noquizsolutions
-                        \noexpand\BC{}\noexpand\Ff{\FfReadOnly}%
-                    \else
-                        \noexpand\BC{\solution@Color}%
-                        \noexpand\A{\noexpand\quiz@SolutionActionHook}%
-                    \fi
-                \fi
-            }%
-        \else
-            \def\Ans@c@l@Choice{\Ff{\FfReadOnly}\BC{}}%
-        \fi
-        \makebox[0pt][r]{\check@@Box{}%
-            {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}%
-            {\eq@tmpdima}{0pt}{Yes}{}%
-            {\eq@setWidgetProps\eq@l@check@driver}%
-            {\Ans@c@f@Defaults\Ans@c@l@Choice\every@RadioButton
-             \every@qRadioButton}}%
-    \fi
-    \Ans@proofing{\eq@tmpdima}%
-\eq@hspanner\ignorespaces}
-\def\Ans@f{\leavevmode\if\eq@listType1\stepcounter{quizno}%
-    \else\refstepcounter{quizno}\fi
-    \PBS\raggedright\Ans@@f}
-\def\Ans@r@f@Defaults
-{%
-    \BC{0 0 0}\S{S}\W{1}\Ff{\FfNoToggleToOff}
-    \F{\FPrint}\textSize{12}\textColor{0 g}
-}
-\def\Ans@r@f@Actions{\A{\JS{%
-    RecordPointValue([0,\eqPTs,\eq@pPTs],\thequestionno);\jsR
-    RecordProblemType("\eqQT",\thequestionno);\jsR
-    ProcessQuestion(\Ans@choice,"\alph{quizno}",\thequestionno,%
-    \arabic{quizno},"\curr@quiz",0,\ifnocorrections0\else1\fi,%
-    "\bqlabelISO"\if\eqQuizType\isQZ\ifx\eq@online\eq@YES
-    \ifeq@noquizsolutions\else,1\fi\fi\fi);\qRadionActionsHook}}
-}
-\def\quiz@SolutionActionHook{%
-    /S/GoTo/D(\@qzsolndest)/Next<<\JS{this.resetForm(%
-        ["mcq.\curr@quiz.\thequestionno.\arabic{quizno}"]);}>>
-}
-\def\Ans@c@f@Defaults
-{%
-    \BC{0 0 0}\S{S}\W{1}\F{\FHidden}\textSize{12}
-    \textColor{0 g}\symbolchoice{circle}
-}
-\let\bottomOfAnsfStack\relax
-\providecommand\graylettersColor{gray}
-\def\insertGrayLetters{\ifaebshowgrayletters
-    \rlap{\makebox[\RadioFieldSize]%
-        {\textcolor{\graylettersColor}{\Alph{quizno}}}}\else\relax\fi}
-\def\Ans@@f
-{%
-    \settowidth{\eq@tmplength}{\eq@lw@f}%
-    \hangindent=\eq@tmplength\hangafter=1
-    \bottomOfAnsfStack\insertGrayLetters
-    \edef\rbf@Opts{\ifaeb@usecircles\else
-    \noexpand\symbolchoice{\qz@chksymb}\fi
-    \noexpand\textColor{\qz@chksymbcol}}%
-    \if\Ans@choice1\eq@recordAnsChoice\fi
-    \mbox{\expandafter\radio@@Button\expandafter{\rbf@Opts}%
-        {mc.\curr@quiz.\thequestionno}%
-        {\RadioFieldSize}{\RadioFieldSize}{\Ans@choice\alph{quizno}}%
-        {\eq@protect\A}{\eq@setWidgetProps\eq@RadioCheck@driver}%
-        {\Ans@r@f@Defaults\Ans@r@f@Actions\every@RadioButton
-         \every@qRadioButton\insert@circlesymbol}}%
-    \let\late@options\@empty
-    \ifnocorrections\else
-        \if\Ans@choice1\relax
-            \edef\Ans@c@f@Choice{\noexpand\DV{Yes}%
-                \ifx\@qzsolndest\@empty\noexpand\Ff{\FfReadOnly}%
-                \else
-                    \ifeq@noquizsolutions
-                        \noexpand\Ff{\FfReadOnly}%
-                    \else
-                        \noexpand\A{\noexpand\quiz@SolutionActionHook}%
-                    \fi
-                \fi
-            }%
-        \else
-            \def\Ans@c@f@Choice{\Ff{\FfReadOnly}}%
-        \fi
-        \ifaeb@usecircles\def\late@options{\BC{}}\fi
-        \if\Ans@choice1\relax
-            \ifx\@qzsolndest\@empty\else
-                \ifeq@noquizsolutions\else
-                    \edef\late@options{\noexpand\BC{\solution@Color}}%
-                \fi
-            \fi
-        \fi
-        \makebox[0pt][r]{\check@@Box{}%
-            {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}%
-            {\RadioFieldSize}{\RadioFieldSize}{Yes}{}%
-            {\eq@setWidgetProps\eq@RadioCheck@driver}%
-            {\Ans@c@f@Defaults\Ans@c@f@Choice\every@CheckBox
-             \every@qCheckBox\late@options}}%
-    \fi
-    \Ans@proofing{\RadioFieldSize}%
-\eq@hspanner\ignorespaces}
-\def\limitSelectionTo#1{\def\eqlimselTo{#1}}
-\let\eqlimselTo\@empty
-\def\Ans@ck@f{\leavevmode\if\eq@listType1\stepcounter{quizno}%
-    \else\refstepcounter{quizno}\fi
-    \if\Ans@choice1\eq@recordAnsChoice\fi
-    \PBS\raggedright\Ans@@ck@f}
-\def\Ans@ck@f@Defaults
-{%
-    \BC{0 0 0}\S{S}\W{1}\Ff{\FfNoToggleToOff}
-    \textSize{12}\textColor{0 g}
-}
-\def\Ans@ck@f@Actions
-{%
-    \A{\JS{%
-    var _bOK=true;\jsR
-\ifx\eqlimselTo\@empty\else _bOK = LimitSelection(\eqlimselTo,%
-"mck.\curr@quiz.\thequestionno","\arabic{quizno}");\jsR\fi
-if (_bOK) {\jsR\jsT
-       var aPMSretn=ProcessMultiSelection(\Ans@choice,"\alph{quizno}",%
-\thequestionno,\arabic{quizno},"\curr@quiz",\eqPTs,\eq@pPTs);\jsR\jsT
-       RecordProblemType("\eqQT",\thequestionno);\jsR\jsT
-       ProcessQuestion(aPMSretn[0],aPMSretn[1],\thequestionno,%
-\arabic{quizno},"\curr@quiz",0,\ifnocorrections0\else1\fi,%
-"\bqlabelISO"\if\eqQuizType\isQZ\ifx\eq@online\eq@YES
-\ifeq@noquizsolutions\else,1\fi\fi\fi);\jsR
-}}}%
-}
-\def\quiz@SolutionActionHook{%
-    /S/GoTo/D(\@qzsolndest)/Next<<\JS{this.resetForm(%
-["mcq.\curr@quiz.\thequestionno.\arabic{quizno}"]);}>>
-}
-\def\Ans@@ck@f
-{%
-    \settowidth{\eq@tmplength}{\eq@lw@f}%
-    \hangindent=\eq@tmplength\hangafter=1
-    \bottomOfAnsfStack\insertGrayLetters
-    \bottomOfAnsfStack\insertGrayLetters
-\def\cbf@Opts{\symbolchoice{\qz@chksymb}%
-    \textColor{\qz@chksymbcol}}%
-    \mbox{\expandafter\check@@Box\expandafter{\cbf@Opts}%
-        {mck.\curr@quiz.\thequestionno.\arabic{quizno}}%
-        {\RadioFieldSize}{\RadioFieldSize}{\Ans@choice\alph{quizno}}%
-        {\eq@protect\A}{\eq@setWidgetProps\eq@RadioCheck@driver}%
-        {\Ans@ck@f@Defaults\Ans@ck@f@Actions\every@RadioButton
-        \every@qckCheckbox}}%
-    \ifnocorrections\else
-        \if\Ans@choice1\relax
-            \edef\Ans@c@f@Choice{\noexpand\DV{Yes}%
-                \ifx\@qzsolndest\@empty\noexpand\Ff{\FfReadOnly}%
-                \else
-                    \ifeq@noquizsolutions
-                        \noexpand\Ff{\FfReadOnly}%
-                    \else
-                        \noexpand\A{\noexpand\quiz@SolutionActionHook}%
-                    \fi
-                \fi
-            }%
-        \else
-            \def\Ans@c@f@Choice{\Ff{\FfReadOnly}}%
-        \fi
-        \let\late@options\@empty
-        \if\Ans@choice1\relax
-            \ifx\@qzsolndest\@empty\else
-                \ifeq@noquizsolutions\else
-                    \edef\late@options{\noexpand\BC{\solution@Color}}%
-                \fi
-            \fi
-        \fi
-        \makebox[0pt][r]{\check@@Box{}%
-            {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}%
-            {\RadioFieldSize}{\RadioFieldSize}{Yes}{}%
-            {\eq@setWidgetProps\eq@RadioCheck@driver}%
-            {\Ans@c@f@Defaults\Ans@c@f@Choice\every@CheckBox
-            \every@qCheckBox\late@options}}%
-    \fi
-    \Ans@proofing{\RadioFieldSize}%
-\eq@hspanner\ignorespaces}
-\newcount\eq@tabColCnt
-\define@key{bchoice}{nCols}{\def\bChoiceNumCols{#1}}
-\@for\eqi:=1,2,3,4,5,6,7,8,9,10 \do{\edef\temp@expand@def{%
-    \noexpand\define@key{bchoice}{\eqi}[\eqi]{%
-        \noexpand\def\noexpand\bChoiceNumCols{\eqi}}%
-    }\temp@expand@def
-}
-\def\bChoiceNumCols{\aeb@numCols}
-\define@key{bchoice}{random}[true]{%
-    \csname if#1\endcsname\eq@randomizeChoicestrue
-        \else\eq@randomizeChoicesfalse\fi
-}
-\define@key{bchoice}{label}[]{\xdef\bChoiceLabel{#1}}
-\def\bChoices{\@ifnextchar[{\@ansChoices}{\@ansChoices[\aeb@numCols]}}
-\def\@ansChoices[#1]%
-{%
-    \global\let\@tempholdSaveAns\@empty %4/5
-    \global\let\@tempholdSaveChoice\@empty %4/5
-    \global\let\bChoiceLabel\@empty %4/5
-    \setkeys{bchoice}{#1}%
-    \global\eq@tabColCnt=0
-    \ifnum\aeb@numCols=1 % list mode
-        \def\eq@next{\@layoutListAns}\else % tabular mode
-        \def\eq@next{\@layoutTabularAns{\bChoiceNumCols}}\fi
-    \eq@next
-}
-\let\eChoices\relax
-\def\@layoutListAns{\@ifnextchar\Ans{\@getListAns}%
-    {\@lookforendansChoices{\@layoutListAns}}%
-}
-\newcommand{\eq@saveAns}[2][]{%
-    \let\eq@next\@@@SaveAnsGobbleAns
-    \ifx\bChoiceLabel\@empty\else
-    \def\eq@savedAnsOpt{#1}\def\eq@savedAnsZO{#2}%
-    \if\eq@savedAnsZO1 \let\eq@next\@@@SaveAns\fi
-    \fi\eq@next
-}
-\long\def\@@@SaveAns#1\eAns{% 4/5
-    \g@addto@macro\@tempholdSaveAns{\\{\ignorespaces#1}}%
-    \addtocounter{quizno}{1}%
-    \edef\temp@expand{\noexpand\g@addto@macro\noexpand
-    \@tempholdSaveChoice{%
-        \noexpand\\{\ifx\sqstar\@empty\aebChoiceAltFmt\else
-        \ifaebshowgrayletters\Alph{quizno}\else
-        \linkContentFormat\fi\fi}}}\temp@expand
-    \addtocounter{quizno}{-1}%
-}
-\newif\ifoxfordcomma \oxfordcommatrue
-\def\oxfordCommaOn{\oxfordcommatrue}
-\def\oxfordCommaOff{\oxfordcommafalse}
-\def\eq@insertComma{%
-    \ifx\eq@comma\@empty
-        \ifnum\@nameuse{NumAns\eq@namearg}>2\relax
-            \def\eq@comma{,}\fi
-    \else\ifx\eq@insertAnd\@empty\eq@comma\space
-        \else\ifnum\@tempcnta=\@nameuse{NumAns\eq@namearg}%
-            \ifoxfordcomma\eq@comma\fi\else\eq@comma\fi\space
-        \fi
-    \fi
-}
-\newcommand\eqAnd{and}\def\eq@insertAnd{%
-    \ifnum\@nameuse{NumAns\eq@namearg}<2\relax\else
-    \ifnum\@nameuse{NumAns\eq@namearg}>2\relax
-    \else\leavevmode\space\fi\eqAnd\space\fi}
-\long\def\eq@displayAns#1{\advance\@tempcnta1\relax
-    \eq@insertComma
-    \ifnum\@tempcnta=\@nameuse{NumAns\eq@namearg}\eq@insertAnd\fi#1}
-\def\eq@displayAlts#1{\advance\@tempcnta1
-    \eq@insertComma
-    \ifnum\@tempcnta=\@nameuse{NumAns\eq@namearg}\eq@insertAnd\fi
-    \savedAltFmt{#1}}
-\def\eq@displayAltsAns#1{\advance\@tempcnta1\relax
-    \eq@insertComma
-    \ifnum\@tempcnta=\@nameuse{NumAns\eq@namearg}\eq@insertAnd\fi#1}
-\newcommand{\savedAltFmt}[1]{(#1)}
-\newcommand{\useSavedAns}{\bgroup\@ifstar{\useSavedAns@i}
-    {\let\eq@insertAnd\@empty\useSavedAns@i}}
-\newcommand{\useSavedAns@i}[2][]{\@tempcnta=0\relax
-    \def\eq@namearg{#2}\let\label\@gobble
-    \def\eq@argi{#1}\ifx\eq@argi\@empty
-        \let\eq@comma\@empty
-        \let\\\eq@displayAns\@nameuse{SavedAns#2}\else
-        \@nameuse{SavedAns#2-Idx#1}\fi
-    \egroup
-}
-\newcommand{\useSavedAlts}{\bgroup\@ifstar{\useSavedAlts@i}
-    {\let\eq@insertAnd\@empty\useSavedAlts@i}}
-\newcommand{\useSavedAlts@i}[2][]{\@tempcnta=0\relax
-    \def\eq@namearg{#2}\@nameuse{caseFor#2}%
-    \def\eq@argi{#1}\ifx\eq@argi\@empty
-        \let\eq@comma\@empty
-        \let\\\eq@displayAlts\@nameuse{SavedAlts#2}\else
-        \savedAltFmt{\@nameuse{SavedAlts#2-Idx#1}}\fi
-    \egroup
-}
-\newcommand{\useSavedAltsAns}{\bgroup\@ifstar{\useSavedAltsAns@i}
-    {\let\eq@insertAnd\@empty\useSavedAltsAns@i}}
-\newcommand{\useSavedAltsAns@i}[2][]{\@tempcnta=0\relax
-    \def\eq@namearg{#2}\@nameuse{caseFor#2}\let\label\@gobble
-        \def\eq@argi{#1}\ifx\eq@argi\@empty
-            \let\eq@comma\@empty
-            \let\\\eq@displayAltsAns\@nameuse{SavedAltsAns#2}\else
-            \savedAltFmt{\@nameuse{SavedAlts#2-Idx#1}}
-            \@nameuse{SavedAns#2-Idx#1}\fi
-    \egroup
-}
-\newcommand{\useSavedNumAns}[1]{\@nameuse{NumAns#1}}
-\long\def\@@@SaveAnsGobbleAns#1\eAns{} % 4/5
-\long\def\@getListAns\Ans#1\eAns{%\@@par %start new paragraph
-    \eq@saveAns#1\eAns % 4/5
-    \Ans#1\vspace{\@rowskip}%
-    \@layoutListAns
-}
-\long\def\@lookforendansChoices#1{%
-    \@ifnextchar\eChoices{\rowsep{\rowsep@default}%
-        \expandafter\@findendans\@gobble}{\expandafter#1\@gobble}%
-}
-\def\@layoutTabularAns#1{%
-    \let\eq@tabSep\@empty
-    \xdef\numShortCols{#1}%
-    \ifnum#1>\aeb@numCols \xdef\numShortCols{\aeb@numCols}\fi
-    \@@layoutTabularAns
-}
-\def\@@layoutTabularAns{%
-    \@ifnextchar\Ans{\@getTabAns}%
-        {\@lookforendansChoices{\@@layoutTabularAns}}%
-}
-\def\rowsep#1{\gdef\@rowsep{[#1]}\gdef\@rowskip{#1}}%
-\rowsep{\rowsep@default}
-\def\rowsepDefault#1{\def\rowsep@default{#1}}
-\def\rowsep@default{0pt}
-\long\def\@getTabAns\Ans#1\eAns{%
-    \eq@saveAns#1\eAns
-    \global\advance\eq@tabColCnt1
-    \let\@save@tabSep=\eq@tabSep
-    \ifnum\eq@tabColCnt=\numShortCols
-        \global\eq@tabColCnt=0
-            \xdef\eq@tabSep{\noexpand\\\noalign{\kern\@rowskip\relax}}%
-    \else
-        \gdef\eq@tabSep{&}%
-    \fi
-    \@ifnextchar\eChoices{\@save@tabSep\Ans#1\rowsep{\rowsep@default}
-        \expandafter\@findendans\@gobble}%
-        {\@save@tabSep\Ans#1\@@layoutTabularAns}%
-}
-\def\@findendans{\@ifnextchar\end{% 4/5
-    \ifx\bChoiceLabel\@empty\else
-    \processLabeledAns\fi
-    }{\expandafter\@findendans\@gobble}}%
-\def\defineEachAns#1{\advance\count0by1\relax
-    \@temptokena={#1}\csarg\xdef
-    {SavedAns\bChoiceLabel-Idx\the\count0}{\the\@temptokena}%
-    \ifsolutionsonly\else
-        {\let\\\relax\eq@IWDefs{\string
-            \csarg\string\gdef{SavedAns\bChoiceLabel-Idx\the\count0}%
-            {\the\@temptokena}}}\fi
-}
-\def\defineEachChoice#1{\advance\count0by1\relax
-    \@temptokena={#1}\csarg\xdef
-        {SavedAlts\bChoiceLabel-Idx\the\count0}%
-        {\the\@temptokena}\ifsolutionsonly\else
-        {\let\\\relax\eq@IWDefs{\string
-            \csarg\string\gdef{SavedAlts\bChoiceLabel-Idx\the\count0}%
-            {\the\@temptokena}}}\fi
-}
-\def\processLabeledAns{%
-    \bgroup
-        \let\label\@gobble
-\if\aeb@FLOverride\eq@l
-    \global\@namedef{caseFor\bChoiceLabel}{\graylettersOff}\else
-    \ifaebshowgrayletters
-        \global\@namedef{caseFor\bChoiceLabel}{\graylettersOn}\else
-        \global\@namedef{caseFor\bChoiceLabel}{\graylettersOff}\fi
-\fi
-        \toks@=\expandafter{\@tempholdSaveAns}\csarg
-        \xdef{SavedAns\bChoiceLabel}{\the\toks@}%
-        \ifsolutionsonly\else{\let\\\relax\eq@IWDefs{\string
-        \csarg\string\gdef{SavedAns\bChoiceLabel}{\the\toks@}}}\fi
-        \count0=0\relax\let\\\defineEachAns\the\toks@
-        \xdef\@currNCntAns{\the\count0 }\csarg
-        \xdef{NumAns\bChoiceLabel}{\@currNCntAns}%
-        \ifsolutionsonly\else{\eq@IWDefs{\string
-        \csarg\string\gdef{NumAns\bChoiceLabel}{\the\count0 }}}\fi
-        \toks@=\expandafter{\@tempholdSaveChoice}\csarg
-        \xdef{SavedAlts\bChoiceLabel}{\the\toks@}%
-        \ifsolutionsonly\else{\let\\\relax\eq@IWDefs{\string
-        \csarg\string\gdef{SavedAlts\bChoiceLabel}{\the\toks@}}}\fi
-        \count0=0\relax\let\\\defineEachChoice\the\toks@
-        \count0=1\relax\toks@={}%{\ignorespaces\@gobble}%
-        \loop
-            \edef\temp@exp{\the\toks@\noexpand\\{%
-            \noexpand\useSavedAlts[\the\count0]{\bChoiceLabel}
-            \noexpand\useSavedAns[\the\count0]{\bChoiceLabel}}}%
-            \toks@=\expandafter{\temp@exp}%
-            \ifnum\count0<\@currNCntAns
-            \advance\count0by1
-        \repeat
-        \csarg\xdef{SavedAltsAns\bChoiceLabel}{\the\toks@}%
-        \ifsolutionsonly\else{\let\\\relax\eq@IWDefs{\string
-        \csarg\string\gdef{SavedAltsAns\bChoiceLabel}{\the\toks@}}}\fi
-    \egroup
-}
-\def\graylettersOn{\aebshowgrayletterstrue}
-\def\graylettersOff{\aebshowgraylettersfalse}
-\def\aeb@exiii{\expandafter\expandafter\expandafter}
-\def\REF{\@ifstar{\let\isREFstar\eq@One\aeb@REFstar}
-    {\let\isREFstar\eq@Zero\aeb@REF}}
-\def\aeb@REFstar#1{\@ifundefined{r@#1}{\hbox{\reset@font\bfseries ??}}
-    {\ifaebshowgrayletters\aeb@buildUpperCaseRef{#1}%
-     \else\ref*{#1}\fi}%
-}
-\def\aeb@REF#1{\@ifundefined{r@#1}{\hbox{\reset@font\bfseries ??}}
-    {\ifaebshowgrayletters\aeb@buildUpperCaseRef{#1}%
-     \else\ref{#1}\fi}%
-}
-\def\aeb@buildUpperCaseRef#1{%
-    \xdef\tmp@expand{\aeb@exiii\@firstoffive\csname r@#1\endcsname}%
-    \xdef\tmp@expand{\uppercase{\tmp@expand}}%
-    \if\isREFstar\eq@One\tmp@expand\else\hyperref[#1]{\tmp@expand}\fi
-}
-\newif\ifaeb@usecircles\aeb@usecirclesfalse
-\let\insert@circlesymbol\@empty
-\def\useMCCircles{\useForms
-    \ifaeb@usecircles\else
-        \global\aeb@usecirclestrue
-        \gdef\insert@circlesymbol{\symbolchoice{circle}}%
-    \fi
-}
-\def\useMCRects{\useForms
-    \ifaeb@usecircles\global\aeb@usecirclesfalse
-        \global\let\insert@circlesymbol\@empty
-    \fi
-}
-\let\useMCCRects\useMCRects
-\let\oqpriorhook\@empty
-\newenvironment{oQuestion}[1]{%
-    \let\@currentQues\@empty
-    \xdef\eq@pageThisQ{\the\c@page}%
-    \global\let\eqQzQuesList\@empty
-    \xdef\oField{#1}\xdef\curr@quiz{#1}\xdef\currQuiz{#1}%
-    \g@addto@macro\ListOfSQuizNames{,#1}\let\@qzsolndest\@empty
-    \let\eqQuizType\isSQZ\gdef\eqPTs{1}\global\let\eqQT\eq@na
-    \let\answers\answers@sq
-    \let\endanswers\endanswers@sq
-    \let\manswers\manswers@sq
-    \let\endmanswers\endmanswers@sq
-    \let\solution\solution@sq
-    \let\endsolution\endsolution@sq
-    \noindent\oqpriorhook\sq@IDTxtField\ifx\aebTitleQuiz\@empty
-    \else\aebtitleQuiz\fi\ignorespaces
-}{%
-    \global\let\aebtitleQuiz\@empty
-    \global\let\aebTitleQuiz\@empty
-    \global\let\eq@tq@star\relax
-    \aftergroup\ignorespaces
-}
-\def\oSolution#1{\edef\@qzsolndest{#1}}
-\def\replaceExclPt#1{\def\replaceexclaim{#1}}
-\replaceExclPt{false}
-\def\negPointsAllowed{\def\negpointsallowed{true}}
-\@onlypreamble{\negPointsAllowed}
-\def\negpointsallowed{false}
-\def\negPointsMarkupAllowed{\def\negpointsmarkupallowed{true}}
-\def\negpointsmarkupallowed{false}
-\@onlypreamble{\negPointsMarkupAllowed}
-\def\requireAlertBox{\def\bcheckboxused{false}}
-\def\allowNoAlertBox{\def\bcheckboxused{true}}
-\allowNoAlertBox
-\newcommand\RespBoxNT{\RespBoxMath}
-\newcommand\RespBox{\RespBoxMath}
-\newcommand\RespBoxMath{\def\rbFlag{0}\begingroup\Hy@unicodefalse
-    \@makeother\^\@makeother\&\@RespBox}
-\def\eq@rpl#1#2{_rplVarsBy('#1','#2')@} % dps17
-\ifnum\eq@drivernum=0\def\RorRT{\r\t}\else\def\RorRT{\r}\fi
-\def\toAltApprCnt{0}\def\toAltApprVar{_toAltAppr\toAltApprCnt}
-\def\toAltApprCntInc{{\@tempcnta=\toAltApprCnt\relax
-  \advance\@tempcnta1\relax
-  \xdef\toAltApprCnt{\the\@tempcnta}}}
-\def\setCoreInitAltAppr{%
-var\eqSP_substVars=\indepVars;\RorRT
-var\eqSP_mathVars=processMathVars(_substVars);\RorRT
-var\eqSP_substValue=getSubstValue(_substVars,event.value);\RorRT
-    event.value=RespBoxAppr(event);\RorRT
-    getSubstValue.aSubsts=[];%
-}
-\def\bInitAltAppr{\ifShowAppr
-  \def\ShowApprSAVE{true}\toAltApprCntInc\ShowApprfalse
-  \def\eqAddAAFormat{\ifnum\eq@drivernum=0try\eqLBr\RorRT\fi
-    \setCoreInitAltAppr\ifnum\eq@drivernum=0 \r\eqRBr catch(e){\RorRT
-    var\eqSP\toAltApprVar=%
-    app.setTimeOut('this.resetForm("'+event.target.name+'");%
-    app.clearTimeOut(\toAltApprVar);',250);\r}\fi}\else
-    \def\ShowApprSAVE{false}\fi
-}
-\def\eInitAltAppr{\@nameuse{ShowAppr\ShowApprSAVE}%
-  \ifShowAppr\altApprOn\let\eqAddAAFormat\@empty\fi}
-\def\AAKqRespBoxMath{%
-  if(event.willCommit){\r\t
-    RecordPointValue(\eqPTs,\thequestionno\ifx\grpquestions1,%
-\thegrpquestionno,\grpPointValue,\grpTotalWeight,%
-"\grpEvalFunction"\fi);\r\t
-    RecordProblemType("\eqQT",\thequestionno);\r\t
-\ifSubstVars % dps17
-    var\eqSP_substVars=\indepVars;\r\t
-    var\eqSP_mathVars=processMathVars(_substVars);\r\t
-    var\eqSP_substValue=getSubstValue(_substVars,event.value);\r\t
-    var\eqSP_substAns=getSubstValue(_substVars,"\eqCorrectAns");\r\t
-    var\eqSP retn=\processJSfunc(\rbArgs,%
-      \compareJSfunc,_substValue);\r\t
-\else
-    var\eqSP_mathVars=\indepVars;\r\t
-    var\eqSP retn=\processJSfunc(\rbArgs,\compareJSfunc);\r\t
-\fi
-    ProcUserResp(retn,event.value,\thequestionno,%
-0\ifx\grpquestions1,\thegrpquestionno\fi);\r
-  }\r
-  if (!isQuizInitialized("\currQuiz")) {\r\t
-    \eqObjAlert\space eqAppAlert(InitMsg("\bqlabelISO"),3);\r\t
-    event.rc = false;\r
-  }
-}
-\def\RespBoxMathDefaults
-{%
-    \BC{0 0 0}\S{S}\textColor{0 g}\F{\FPrint}\W{1}
-}
-\def\moreRespBoxMathDefaults
-{%
-    \edef\@moreRespBoxMathDefaults{%
-        \if\eqQuizType\isQZ\ifx\eq@online\eq@YES
-            \ifeq@noquizsolutions
-            \else\noexpand\Ff{\FfReadOnly}\fi\fi\fi
-    }%
-}
-\let\eqAddAAFormat\@empty
-\def\eqSP{\string\040} % dps17
-\def\eqLBr{\string\173}
-\def\eqRBr{\string\175}
-\def\@@RespBoxMathActions{%
-  \AA{\if\eqQuizType\isQZ
-    \AAKeystroke{\AAKqRespBoxMath\eqAddAAKeystroke}
-    \AAFormat{\ifShowAppr\ifSubstVars\ifarrowDelim % dps17
-      try{event.value=RespBoxAppr(event);}catch(e){}\r
-        \fi\fi\fi\eqAddAAFormat}
-  \else
-    \AAKeystroke{if(event.willCommit) {\r\t
-\ifSubstVars%
-      var\eqSP_substVars=\indepVars;\r\t
-      var\eqSP_mathVars=processMathVars(_substVars);\r\t
-      var\eqSP_substValue=getSubstValue(_substVars,event.value);\r\t
-      var\eqSP_substAns=getSubstValue(_substVars,"\eqCorrectAns");\r\t
-      var\eqSP retn=\processJSfunc(\rbArgs,%
-        \compareJSfunc,_substValue);\r\t
-\else
-      var\eqSP_mathVars=\indepVars;\r\t
-      var\eqSP retn=\processJSfunc(\rbArgs,\compareJSfunc);
-\fi
-\if\@sqTurnOffAlerts1\r\t
-      OnBlurRespBox(retn,"\curr@quiz");
-\fi
-      \eqAddAAKeystroke\r
-    }}
-    \AAFormat{\ifShowAppr\ifSubstVars\ifarrowDelim % dps17
-      try{event.value=RespBoxAppr(event);}catch(e){}\r\fi\fi\fi
-        \eqAddAAFormat}%
-    \AAOnFocus{\JS{var retn = null;}}%
-    \AAOnBlur{\JS{OnBlurRespBox(null,"\curr@quiz");}}%
-\fi
-  }
-}
-\def\annot@subtype@rbm{rbm}
-\newcommand\@RespBox[1][]
-{%
-  \edef\annot@subtype{\annot@subtype@rbm}%
-  \eq@AddProbToQzQuesList
-  \smallskip\ifx\grpquestions\eq@Zero
-    \addtocounter{eqpointvalue}{\eqPTs}\fi
-  \if\eqQuizType\isQZ
-    \def\rbFlag{1}\global\IsRespBoxtrue
-    \ifx\grpquestions\eq@One
-      \stepcounter{grpquestionno}%
-      \def\Fld@name{%
-        grpobj.\curr@quiz.\thequestionno.\thegrpquestionno}%
-    \else
-      \eq@recordThesePTs\eq@recordProbType
-      \edef\eqtmp{\aPointType}%
-      \xdef\aPointType{\eqtmp,[\eqPTs,"math"]}%
-      \stepcounter{questionno}%
-      \def\Fld@name{obj.\curr@quiz.\thequestionno}%
-    \fi
-  \else % shortquiz
-    \ifx\grpquestions\eq@One
-      \stepcounter{grpquestionno}%
-      \def\Fld@name{%
-        grpobj.\oField.\thequestionno.\thegrpquestionno}%
-    \else
-      \stepcounter{questionno}%
-      \def\Fld@name{%
-        obj.\oField.\thequestionno}%
-    \fi
-  \fi
-  \let\Array\aeb@array
-  \moreRespBoxMathDefaults
-  \leavevmode\hbox\bgroup\let\rpl\eq@rpl
-  \text@@Field{#1}{\Fld@name}%
-  {\RBW}{\DefaultHeightOfWidget}%
-  {\eq@protect\AA}{\eq@setWidgetProps\eq@RespBox}%
-  {\RespBoxMathDefaults\@moreRespBoxMathDefaults
-  \@@RespBoxMathActions\every@eqTextField\every@RespBoxMath}%
-}
-\def\eq@RespBox#1{\pdfstringdef\eqCorrectAns{#1}%
-  \gdef\eqCorrectAnsTeX{#1}\if\grpquestions\eq@Zero
-    \ifwithinMCFI\gdef\s@veCorrAnsMCFI{"#1"}\fi
-  \else
-    \eq@recordGrpAnsArray{"#1"}\fi
-  \@ifnextchar({\@eq@RespBox{#1}}{\@eq@RespBox{#1}(x)}}
-\def\@eq@RespBox#1(#2){\@ifnextchar[{\@eq@RespB@x{#1}(#2)}%
-  {\@ifstar{\@eq@RespB@x{#1}(#2)[\curr@quiz.\thequestionno]}%
-    {\@eq@RespB@x{#1}(#2)[]}}}
-\def\eq@ZERO{0}
-\def\defaultRDPrecision#1{\def\eq@defaultRDPrecision{#1}}
-\defaultRDPrecision{1E-14}
-\newif\ifarrowDelim\arrowDelimfalse % dps17
-\def\rpl@#1#2{\rpl@i#1->\@nil}
-\def\rpl@i#1->#2\@nil{\def\argii{#2}\ifx\argii\@empty\else
-  \global\arrowDelimtrue\fi}
-\def\GiiRpli#1{\global\arrowDelimfalse\GiiRplii#1\rpl{}{}\@nil}
-\def\GiiRplii#1\rpl#2#3#4\@nil{\def\argiv{#4}%
-  \ifx\argiv\@empty\let\eq@next\relax\else
-  \rpl@{#2}{#3}\ifarrowDelim\let\eq@next\relax\else
-    \def\eq@next{\GiiRplii#4\@nil}\fi\fi
-  \eq@next}
-\def\isAltApprSpec#1{\bgroup\if\frstIsrpl\eq@YES\GiiRpli{#1}\else
-  \expandafter\GiiRpli\expandafter{#1}\fi\egroup} % dps17
-\def\isFrstrpl#1#2\@nil{\ifx#1\rpl\let\frstIsrpl\eq@YES\else
-  \let\frstIsrpl\eq@NO\fi}
-\def\cntComm@s#1{\@tempcnta\z@\expandafter\cntComm@si#1,,\@nil}
-\def\cntComm@si#1,#2,\@nil{\def\argii{#2}\ifx\argii\@empty
-  \def\eq@next{\edef\nC{\the\@tempcnta}}\else
-  \advance\@tempcnta\@ne\def\eq@next{\cntComm@si#2,\@nil}\fi
-  \eq@next}\def\eq@SC{;}\def\rplSofT#1#2{#2}
-\def\cntVars#1{\let\rpl\rplSofT\edef\eV@rs{#1}\let\rpl\eq@rpl
-  \cntComm@s{\eV@rs}\ifnum\nC>\z@
-  \@tempcnta\nC\relax\advance\@tempcnta\@ne
-  \xdef\nV{\the\@tempcnta}\else\@tempcnta\z@
-  \expandafter\cntVarsi\eV@rs;\@nil\fi}
-  \def\cntVarsi#1#2\@nil{\def\argii{#2}%
-  \ifx\argii\eq@SC\def\eq@next{\advance\@tempcnta\@ne
-    \edef\nV{\the\@tempcnta}}\else\advance\@tempcnta\@ne
-    \def\eq@next{\cntVarsi#2\@nil}\fi
-  \eq@next}
-\def\eq@X{x}
-\def\eq@isThereRept#1{\let\eq@isRept\eq@Zero\expandafter
-  \eq@isThereRepti#1*\@nil}
-\def\eq@isThereRepti#1*#2\@nil{\def\argii{#2}\ifx\argii\@empty
-  \let\eq@isRept\eq@Zero\else\let\eq@isRept\eq@One\fi}
-\def\eq@obeyReptOfIntrvls#1{%
-  \expandafter\eq@isThereRept\expandafter{#1}% sets \eq@isRept
-  \if\eq@isRept\eq@Zero\relax\let\eq@interv@ls\@empty\expandafter
-    \g@addto@macro\expandafter\eq@interv@ls
-    \expandafter{#1}\let\eq@next\relax\else\let\eq@interv@ls\@gobble
-    \def\eq@next{\expandafter
-      \eq@obeyReptOfIntrvlsi#1x[]x\@nil}\fi\eq@next}
-\def\eq@obeyReptOfIntrvlsi#1[#2]#3#4x#5\@nil{%
-  \def\argi{#2}\def\argii{#3}\def\argiv{#5}%
-  \ifx\argi\@empty\let\eq@next\relax\else
-    \ifx\argii\eq@X\g@addto@macro\eq@interv@ls{x[#2]}%
-      \def\eq@next{\eq@obeyReptOfIntrvlsi#4x#5x\@nil}\else
-      % repetition of an interval
-      \eq@ddtorepIntrvl{[#2]}{#4}%
-      \def\eq@next{\eq@obeyReptOfIntrvlsi#5x\@nil}\fi
-  \fi
-  \eq@next
-}
-\def\eq@ddtorepIntrvl#1#2{\@tempcnta=#2 \eq@ddtorepIntrvli{#1}{#2}}
-\def\eq@ddtorepIntrvli#1#2{\@whilenum\@tempcnta>\z@\do
-  {\g@addto@macro\eq@interv@ls{x#1}\advance\@tempcnta\m@ne}}
-\def\cntIv@ls#1{\@tempcnta\z@\expandafter\cntIv@lsi#1xxx\@nil}%
-\def\cntIv@lsi#1x#2x\@nil{\def\argii{#2}\ifx\argii\eq@X
-  \advance\@tempcnta\@ne
-  \edef\nI{\the\@tempcnta}\let\eq@next\relax\else
-  \advance\@tempcnta\@ne\def\eq@next{\cntIv@lsi#2x\@nil}\fi
-\eq@next}
-\begingroup\@makeother\&
-\gdef\eq@ProcIntrvls#1{\expandafter
-  \eq@ProcIntrvlsi#1&&\@nil}
-\gdef\eq@ProcIntrvlsi#1&#2&#3\@nil{\def\argii{#2}%
-  \ifx\argii\@empty
-    \eq@obeyReptOfIntrvls{#1}%
-    \cntIv@ls{\eq@interv@ls}%
-  \else
-    \eq@obeyReptOfIntrvls{#1}%
-    \edef\interv@ls{\eq@interv@ls}%
-    \cntIv@ls{\eq@interv@ls}%
-    \eq@obeyReptOfIntrvls{#2}%
-    \edef\eq@interv@ls{\interv@ls&\eq@interv@ls}%
-  \fi
-}
-\endgroup
-\def\@eq@RespB@x#1(#2)[#3]#4#5#6{\xdef\@qzsolndest{#3}% dps17
-    \gdef\indepVars{"#2"}\isFrstrpl#2\@nil\if\frstIsrpl\eq@YES
-      \def\@IVi{#2}\else\expandafter\def\expandafter
-      \@IVi\expandafter{#2}\fi\edef\@IVii{#2}\ifx\@IVi\@IVii
-        \global\SubstVarsfalse\else\global\SubstVarstrue
-        \isAltApprSpec{#2}\fi
-    \cntVars{#2}\def\eq@precision{#5}%
-    \ifx\eq@precision\eq@ZERO
-        \def\eq@defaultCompare{reldiffCompare}%
-        \def\rbArgstmp{\rbFlag,% dps17
-          \ifSubstVars_substAns\else"#1"\fi,#4,%
-            \eq@defaultRDPrecision}\else
-          \def\eq@defaultCompare{diffCompare}%
-        \def\rbArgstmp{\rbFlag,% dps17
-          \ifSubstVars_substAns\else"#1"\fi,#4,#5}\fi
-    \edef\eq@ixparam{#6}\expandafter\eq@chkivIntrvls\eq@ixparam\\%
-}
-\def\viidna{[0,1]}
-\def\eq@chkivIntrvls{\@ifnextchar[{\eq@chkivIntrvlsi}%
-  {\eq@chkivIntrvlsii}}
-\def\eq@chkivIntrvlsi#1\\{\eq@ProcIntrvls{#1}%
-  \def\rbArgs{\rbArgstmp,"\eq@interv@ls",_mathVars}% dps17
-  \@ifnextchar[{\@eq@@RespBox[ \expandafter\@gobble}%
-    {\@eq@@RespBox[\eq@defaultCompare]}%
-}
-\def\eq@chkivIntrvlsii#1\\#2{\def\nI{1}%
-  \def\rbArgs{\rbArgstmp,"[#1,#2]",_mathVars}%
-  \@ifnextchar[{\@eq@@RespBox}{\@eq@@RespBox[\eq@defaultCompare]}%
-}
-\def\@eq@@RespBox[#1]{\@ifstar{\jsRespBox[#1]}%
-    {\jsRespBox[#1]{ProcResp}}}
-\def\eq@ProcRespIntervals{ProcRespIntervals}
-\def\eq@ProcRespSetNum{ProcRespSetNum}
-\def\eq@ProcRespSetSym{ProcRespSetSym}
-\def\eq@ProcRespEvalEq{ProcRespEvalEq}
-\def\eq@ProcRespEvalEqNonZero{ProcRespEvalEqNonZero}
-\def\eq@ProcRespEvalEqList{ProcRespEvalEqList}
-\def\eq@ProcRespEvalEqListNonZero{ProcRespEvalEqListNonZero}
-\def\jsRespBox[#1]#2{\def\compareJSfunc{#1}%
-  \def\processJSfunc{#2}\gdef\g@processJSfunc{#2}% 01/11
-  \ifnum\nV=\nI\relax\else
-  \ifx\processJSfunc\eq@ProcRespSetNum\else
-  \ifx\processJSfunc\eq@ProcRespSetSym\else
-  \ifx\processJSfunc\eq@ProcRespEvalEq\else
-  \ifx\processJSfunc\eq@ProcRespEvalEqNonZero\else
-  \ifx\processJSfunc\eq@ProcRespEvalEqList\else
-  \ifx\processJSfunc\eq@ProcRespEvalEqListNonZero\else
-  \PackageWarning{exerquiz}{The number of variables does not
-    match\MessageBreak the number of intervals. The
-    problem\MessageBreak may not evaluate properly}\fi\fi\fi\fi\fi\fi\fi
-  \ifx\eq@ProcRespIntervals\g@processJSfunc
-    \let\@inmathwarn@SAVE\@inmathwarn\let\@inmathwarn\@gobble
-    \pdfstringdef{\eqCorrectAns}{\eqCorrectAns}%
-    \let\@inmathwarn\@inmathwarn@SAVE\fi
-\ifx\grpquestions\eq@Zero
-  \eq@recordCorrAns{"\eqCorrectAns"}% 2018/03/18
-\fi
-  \ifeq@proofing\makebox[0pt][l]{\space\math@correctAnswer}\fi
-  \eq@TextField % send to the driver-dependent macro
-  \egroup   % hbox
-  \endgroup % \RespBoxMath
-}
-\def\gobbleMacro#1>{}
-\gdef\math@correctAnswer{\ttfamily
-  \color{\@proofingsymbolColor}\spaceskip=2pt\xspaceskip=2pt%
-  \expandafter\gobbleMacro\meaning\eqCorrectAnsTeX
-}
-\newcommand\RespBoxTxtNT{\def\rbFlag{0}\@RespBoxTxt}
-\newcommand\RespBoxTxt{\def\rbFlag{0}\@RespBoxTxt}
-\def\RespBoxTxtOnBlur{OnBlurRespBox(%
-    \if\@sqTurnOffAlerts1retn\else null\fi,"\curr@quiz");}
-\def\eqObjAlert{%
-    \ifx\eqQuizType\isQZ\ifx\eq@online\eq@YES\ifeq@noquizsolutions
-    \else if (false)\fi\fi\fi}
-\begin{defineJS}[%
-    \catcode`\@=0\relax\catcode`\%=14\relax]{\AAKqRespBoxTxt}
-if(event.willCommit){
-    RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
-@thegrpquestionno,@grpPointValue,@grpTotalWeight,%
-"@grpEvalFunction"@fi);
-    RecordProblemType("@eqQT",@thequestionno);
-    var retn = ProcRespTxt(@rbTxtAlt);
-    ProcUserResp(retn,event.value,@thequestionno,%
-0@ifx@grpquestions1,@thegrpquestionno@fi);
-}
-if (!isQuizInitialized("@currQuiz")) {
-    @eqObjAlert@space eqAppAlert(InitMsg("@bqlabelISO"),3);
-    event.rc = false;
-}
-\end{defineJS}
-\def\RespBoxTxtDefaults
-{%
-    \BC{0 0 0}\W{1}\S{S}\textColor{0 g}\F{\FPrint}%
-}
-\def\moreRespBoxTxtDefaults
-{%
-    \edef\@moreRespBoxTxtDefaults{%
-        \if\eqQuizType\isQZ\ifx\eq@online\eq@YES
-        \ifeq@noquizsolutions\else
-        \noexpand\Ff{\FfReadOnly}\fi\fi\fi
-    }%
-}
-\def\@@RespBoxTxtActions
-{%
-    \AA{\if\eqQuizType\isQZ
-            \AAKeystroke{\AAKqRespBoxTxt\eqAddAAKeystroke}
-            \AAFormat{\eqAddAAFormat}
-        \else
-            \AAKeystroke{%
-                if(event.willCommit) {\r\t
-                    retn = ProcRespTxt(\rbTxtAlt);\r
-\if\@sqTurnOffAlerts1
-                \t\RespBoxTxtOnBlur\r
-\fi
-                \eqAddAAKeystroke\r
-                }%
-            }
-            \AAFormat{\eqAddAAFormat}
-            \AAOnFocus{\JS{var retn = null;}}
-\if\@sqTurnOffAlerts0
-            \AAOnBlur{\JS{\RespBoxTxtOnBlur}}%
-\fi
-        \fi
-    }
-}
-\def\annot@subtype@rbt{rbt}
-\newcommand\@RespBoxTxt[1][]
-{%
-    \edef\annot@subtype{\annot@subtype@rbt}%
-    \eq@AddProbToQzQuesList
-    \ifx\grpquestions\eq@Zero\addtocounter{eqpointvalue}{\eqPTs}\fi
-    \if\eqQuizType\isQZ
-        \def\rbFlag{1}\global\IsRespBoxtrue
-        \ifx\grpquestions\eq@One
-            \stepcounter{grpquestionno}%
-            \def\Fld@name{%
-                grpobj.\curr@quiz.\thequestionno.\thegrpquestionno}%
-        \else
-            \eq@recordThesePTs\eq@recordProbType
-            \edef\eqtmp{\aPointType}%
-            \xdef\aPointType{\eqtmp,[\eqPTs,"text"]}%
-            \stepcounter{questionno}%
-            \def\Fld@name{obj.\curr@quiz.\thequestionno}%
-        \fi
-    \else
-        \stepcounter{questionno}%
-        \def\Fld@name{obj.\oField.\thequestionno}%
-    \fi
-    \moreRespBoxTxtDefaults
-    \leavevmode\hbox\bgroup\text@@Field{#1}{\Fld@name}%
-    {\RBW}{\DefaultHeightOfWidget}%
-    {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxTxt}%
-    {\RespBoxTxtDefaults\@moreRespBoxTxtDefaults
-     \@@RespBoxTxtActions\every@eqTextField\every@RespBoxTxt}%
-}
-\def\@@RespBoxTxt#1#2{%
-    \@ifnextchar[{\@@@RespBoxTxt{#1}{#2}}
-        {\@ifstar{\@@@RespBoxTxt{#1}{#2}[\curr@quiz.\thequestionno]}%
-            {\@@@RespBoxTxt{#1}{#2}[]}}}
-\def\eq@ZERO{0}\def\eq@ONE{1}\def\eq@TWO{2}
-\def\@@@RespBoxTxt#1#2[#3]#4{%
-    \xdef\@qzsolndest{#3}%
-    \def\eq@argi{#1}\ifx\eq@argi\eq@ZERO\else
-        \ifx\eq@argi\eq@ONE\else\ifx\eq@argi\eq@TWO\else
-        \def\eq@argi{-1}\fi\fi\fi
-    \def\eq@argii{#2}\ifx\eq@argii\eq@ONE\else\def\eq@argii{0}\fi
-    \begingroup
-    \ifnum\eq@argii=1\relax
-        \def\rexpStr##1{\eqbs\eqbs\eqbs\eqbs##1}%
-        \def\\##1{\eqbs\eqbs\eqbs\eqbs##1}%
-        \def\word##1{\\b##1\\b}\def\any{@any@}\fi
-    \xdef\rbTxtAlt{\rbFlag,\eq@argi,\eq@argii}%
-    \global\let\txtAltList\@empty
-    \count0=#4 \ifnum\count0 > 0 \expandafter\@argRead\else
-    \PackageError{exerquiz}{%
-        The fourth required parameter of \string\RespBoxTxt\MessageBreak
-        is required to be a positive integer. You entered\MessageBreak
-        #4\space instead}{Enter a positive integer.}\fi
-}
-\def\@argRead#1{\xdef\jsTempArgs{\txtAltList}%
-    \ifx\txtAltList\@empty\xdef\txtAltList{"#1"}\else
-    \xdef\txtAltList{\jsTempArgs,"#1"}\fi\@@argRead}
-\def\@@argRead{\advance\count0 by-1\relax
-    \ifnum\count0=0\relax
-        \def\eq@next{\endgroup
-            \xdef\rbTxtAlt{\rbTxtAlt,\txtAltList}%
-            \if\grpquestions\eq@Zero
-                \ifwithinMCFI
-                    \xdef\s@veCorrAnsMCFI{[\txtAltList]}\else
-                    \eq@recordCorrAns{[\txtAltList]}\fi
-            \else
-                \eq@recordGrpAnsArray{[\txtAltList]}%
-            \fi
-            \eq@@RespBoxTxt
-        }%
-    \else
-        \def\eq@next{\@argRead}%
-    \fi\eq@next
-}
-\def\eq@@RespBoxTxt{%
-    \ifeq@proofing\makebox[0pt][l]{\space\txt@correctAnswer}\fi
-    \eq@TextField
-    \egroup
-}
-\def\gobbleTxt#1>#2,#3,#4,{}
-\gdef\txt@correctAnswer{\ttfamily\color{\@proofingsymbolColor}%
-    \spaceskip=2pt\xspaceskip=2pt
-    \expandafter\gobbleTxt\meaning\rbTxtAlt
-}
-\begin{defineJS}[%
-    \catcode`\@=0\relax\catcode`\%=14\relax]{\AAKqRespBoxTxtPC}
-if(event.willCommit){
-    RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
-@thegrpquestionno,@grpPointValue,@grpTotalWeight,%
-"@grpEvalFunction"@fi);
-    RecordProblemType("@eqQT",@thequestionno);
-    var retn = ProcRespTxtPC(@rbTxtAlt);
-@ifx@grpquestions1%
-        ProbValue[@thequestionno][3+@thegrpquestionno]%
-=ProcRespTxtPC.txtPCpCr;@else%
-        ProbValue[@thequestionno]=ProcRespTxtPC.txtPCpCr;@fi
-        ProcUserResp(retn,event.value,@thequestionno,0%
-@ifx@grpquestions1,@thegrpquestionno@fi);
-}
-if (!isQuizInitialized("@currQuiz")) {
-    @eqObjAlert@space eqAppAlert(InitMsg("@bqlabelISO"),3);
-    event.rc = false;
-}
-\end{defineJS}
-\def\@@RespBoxTxtPCActions
-{%
-    \AA{\if\eqQuizType\isQZ
-            \AAKeystroke{\AAKqRespBoxTxtPC}
-        \else
-            \AAKeystroke{%
-                if(event.willCommit) {\r\t
-                    retn = ProcRespTxtPC(\rbTxtAlt);\r
-\if\@sqTurnOffAlerts1%
-                \t\RespBoxTxtOnBlur\r
-\fi
-                }%
-            }
-            \AAOnFocus{\JS{var retn = null;}}
-\if\@sqTurnOffAlerts0%
-            \AAOnBlur{\JS{\RespBoxTxtOnBlur}}%
-\fi
-        \fi
-    }
-}
-\newcommand{\RespBoxTxtPC}{\def\rbFlag{0}\@RespBoxTxtPC}
-\def\annot@subtype@rbtpc{rbtpc}
-\newcommand\@RespBoxTxtPC[1][]
-{%
-    \edef\annot@subtype{\annot@subtype@rbtpc}%
-    \eq@AddProbToQzQuesList
-    \smallskip\ifx\grpquestions\eq@Zero
-        \addtocounter{eqpointvalue}{\eqPTs}\fi
-    \if\eqQuizType\isQZ\def\rbFlag{1}\global\IsRespBoxtrue
-        \ifx\grpquestions\eq@One
-            \stepcounter{grpquestionno}%
-            \def\Fld@name{%
-                grpobj.\curr@quiz.\thequestionno.\thegrpquestionno}%
-        \else
-            \eq@recordThesePTs\eq@recordProbType
-            \edef\eqtmp{\aPointType}%
-            \xdef\aPointType{\eqtmp,[\eqPTs,"text"]}%
-            \stepcounter{questionno}%
-            \def\Fld@name{obj.\curr@quiz.\thequestionno}%
-        \fi
-    \else
-        \stepcounter{questionno}%
-        \def\Fld@name{obj.\oField.\thequestionno}%
-    \fi
-    \moreRespBoxTxtDefaults
-    \leavevmode\hbox\bgroup\text@@Field{#1}{\Fld@name}%
-    {\RBW}{\DefaultHeightOfWidget}%
-    {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxTxtPC}%
-    {\RespBoxTxtDefaults\@moreRespBoxTxtDefaults
-     \@@RespBoxTxtPCActions\every@eqTextField\every@RespBoxTxt}%
-}
-\def\@@RespBoxTxtPC#1{\@ifnextchar[{\@@@RespBoxTxtPC{#1}}
-    {\@ifstar{\@@@RespBoxTxtPC{#1}[\curr@quiz.\thequestionno]}%
-    {\@@@RespBoxTxtPC{#1}[]}}}
-\def\@@@RespBoxTxtPC#1[#2]#3{\xdef\@qzsolndest{#2}%
-    \begingroup
-    \def\rexpStr##1{\eqbs\eqbs\eqbs\eqbs##1}%
-    \def\\##1{\eqbs\eqbs\eqbs\eqbs##1}%
-    \def\word##1{\\b##1\\b}\def\any{@any@}
-    \gdef\rbTxtAlt{\rbFlag,#1,1}% force sub-string match
-    \global\let\txtAltList\@empty
-    \count0=#3 \ifnum\count0>0 \expandafter\@argReadPC\else
-    \PackageError{exerquiz}{%
-        The third required parameter of
-        \string\RespBoxTxtPC\MessageBreak
-        is required to be a positive integer.
-        You entered\MessageBreak #3\space instead}
-        {Enter a positive integer.}\fi
-}
-\newcommand\@argReadPC[2][0]{\xdef\jsTempArgs{\txtAltList}%
-    \ifx\txtAltList\@empty\xdef\txtAltList{["#2",#1]}\else
-    \xdef\txtAltList{\jsTempArgs,["#2",#1]}\fi\@@argReadPC}
-\def\@@argReadPC{\advance\count0 by-1\relax
-    \ifnum\count0=0\relax
-        \def\eq@next{\endgroup
-            \xdef\rbTxtAlt{\rbTxtAlt,\txtAltList}%
-            \if\grpquestions\eq@Zero
-                \ifwithinMCFI
-                    \xdef\s@veCorrAnsFCFI{[\txtAltList]}\else
-                    \eq@recordCorrAns{[\txtAltList]}\fi
-            \else
-                \eq@recordGrpAnsArray{[\txtAltList]}%
-            \fi
-            \eq@@RespBoxTxtPC
-        }%
-    \else
-        \def\eq@next{\@argReadPC}%
-    \fi\eq@next
-}
-\def\eq@@RespBoxTxtPC{%
-    \ifeq@proofing\makebox[0pt][l]{\space\txt@correctAnswer}\fi
-    \eq@TextField
-     \egroup
-}
-\def\RespBoxEssayDefaults
-{%
-    \BC{0 0 0}\W{1}\S{S}\Ff{\FfMultiline}\rawPDF{}%
-}
-\def\@@RespBoxEssayActions
-{%
-    \AA{\if\eqQuizType\isQZ
-        \AAKeystroke{%
-            if(event.willCommit){\jsR\jsT
-            RecordPointValue(\eqPTs,\thequestionno);\jsR\jsT
-            RecordProblemType("\eqQT",\thequestionno);\jsR\jsT
-            }\jsR
-            if (!isQuizInitialized("\curr@quiz")) {\jsR\jsT
-                @eqObjAlert\space eqAppAlert(%
-                    InitMsg("\bqlabelISO"),3);\jsR\jsT
-                event.rc = false;\jsR
-            }%
-        }%
-    \fi
-    }
-}
-\newcommand\RespBoxEssay[3][]
-{%
-    \smallskip\addtocounter{eqpointvalue}{\eqPTs}%
-    \stepcounter{questionno}%
-    \mbox{\text@@Field{#1}{essay.\curr@quiz.\thequestionno}{#2}{#3}%
-    \edef\eqtmp{\aPointType}\xdef\aPointType{\eqtmp,[\eqPTs,"essay"]}%
-    {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxEssayActions
-     \eq@TextField}{\RespBoxEssayDefaults\every@eqTextField}}%
-}
-\let\@@sqTallyBoxActions\@empty
-\@ifundefined{calcOrder}{%
-\ifpdf\def\@@sqTallyBoxActions{%
-    \AA{\AAValidate{getTotalTally("\oField");}}}\fi}{}
-\def\sqTallyBoxDefaults
-{%
-    \BC{0 0 0}\W{1}\textColor{1 0 0 rg}\S{I}\Q{2}\Ff{\FfReadOnly}
-}
-\ifpdf\def\@@sqTallyBoxActions{%
-    \AA{\AAValidate{getTotalTally("\oField");}}}\else
-    \let\@@sqTallyBoxActions\@empty
-\fi
-\newcommand\sqTallyBox[1][]
-{%
-    \mbox{\text@@Field{#1}{tally.\oField.\thequestionno}%
-        {\TBW}{\DefaultHeightOfWidget}%
-        {}{\eq@setWidgetProps\eq@TextField}%
-        {\sqTallyBoxDefaults\@@sqTallyBoxActions\every@eqTextField
-        \every@sqTallyBox}}%
-}
-\def\sqTallyTotalDefaults
-{%
-    \rawPDF{}\W{1}\BC{0 0 0}\S{I}\textColor{1 0 0 rg}%
-    \Q{2}\Ff{\FfReadOnly}%
-}
-\def\@@sqTallyTotalActions
-{%
-    \AA{%
-        \AAKeystroke{AFNumber_Keystroke(0,0,0,0,"",true);}
-        \AAFormat{AFNumber_Format(0,0,0,0,"",true);}
-        \AACalculate{%
-            AFSimple_Calculate("SUM",new Array("tally.\oField"));
-    }}
-}
-\newcommand\sqTallyTotal[1][]
-{%
-    \mbox{\text@@Field{#1}{tallytotal.\oField}{\TBW}%
-        {\DefaultHeightOfWidget}{\eq@protect\AA}%
-        {\eq@setWidgetProps\eq@TextField}%
-        {\sqTallyTotalDefaults\@@sqTallyTotalActions\every@eqTextField
-         \every@sqTallyTotal}}%
-}
-\def\CorrAnsButtonDefaults
-{%
-   \CA{\eq@local@CorrAnsButton}\W{1}\S{S}
-    \BC{0 0 0}\BG{.7529 .7529 .7529}\H{P}
-}
-\def\normalCABtnBC{0 0 0}
-\def\qCorrAnsButtonActionHook{\JS{%
-\ifx\@qzsolndest\@empty\else
-  if (event.shift)\jsR\jsT
-      this.gotoNamedDest("\@qzsolndest");\jsR
-  else {\jsR\jsT\fi
-\ifShowAppr % dps17
-  \ifarrowDelim
-    if (typeof event.target.appr=="undefined")\r\JST\t
-      event.target.appr=false;\r\JST
-    event.target.appr=!event.target.appr;\r\JST
-    if (event.target.appr) {\r\t\JST
-      var _substVars=\indepVars;\r\t\JST
-      var _substAns=getSubstValue(_substVars,"\CorrectAns");\r\t\JST
-      var value=RespBoxAppr("\CorrectAns");\r\JST
-    } else value="\CorrectAns";\r\JST
-  \else
-    value="\CorrectAns";\r\JST
-  \fi
-\else
-      value="\CorrectAns";\r\JST
-\fi
-    \processJSfunc("Ans.\curr@quiz",value,\currQuiz);\r
-\ifx\@qzsolndest\@empty\else % dps17
-  }\fi
-}}
- \def\sqCorrAnsButtonActionHook
- {%
-     \JS{%
-        \ifx\@qzsolndest\@empty\else
-            if (event.shift)\jsR\jsT
-            this.gotoNamedDest("\@qzsolndest");\jsR
-            else\jsR\jsT
-        \fi
-        \processJSfunc("obj.\oField.\thequestionno","\CorrectAns",%
-\currQuiz);
-     }%
- }
-\newcommand\CorrAnsButton[1][]{\eq@@CorrAnsButton{#1}}
-\def\eq@@CorrAnsButton#1#2{\bgroup\makeJSspecials % 1/12
-    \@ifstar{\eq@@@CorrAnsButton{#1}{#2}}{%
-        \eq@@@CorrAnsButton{#1}{#2}{DisplayAnswer}}%
-}
-\def\eq@@@CorrAnsButton#1#2#3{\gdef\CorrectAns{#2}%
-    \def\processJSfunc{#3}\ifx\@qzsolndest\@empty\let\JST\@empty\else
-    \let\JST\jsT\fi % dps17
-    \ifx\eq@ProcRespIntervals\g@processJSfunc % 01/11
-        \let\@inmathwarn@SAVE\@inmathwarn\let\@inmathwarn\@gobble
-        \pdfstringdef{\CorrectAns}{\CorrectAns}%
-        \let\@inmathwarn\@inmathwarn@SAVE\fi
-    \if\eqQuizType\isQZ\def\Fld@name{corr.\curr@quiz.\thequestionno}%
-    \else\def\Fld@name{corr.\oField.\thequestionno}\fi
-    \if\eqQuizType\isQZ
-        \edef\@@CorrAnsButtonActions{\noexpand\F{\FHidden}%
-            \ifx\@qzsolndest\@empty%\noexpand\BC{\normalCABtnBC}%
-            \else\noexpand\BC{\solution@Color}\fi
-            \noexpand\A{\noexpand\qCorrAnsButtonActionHook}}%
-        \ifeq@noquizsolutions\else % dps17 (\let\rpl\eq@rpl)
-           \mbox{\let\rpl\eq@rpl
-              \push@@Button{#1}{\Fld@name}{}{\DefaultHeightOfWidget}%
-                {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
-                {\CorrAnsButtonDefaults\@@CorrAnsButtonActions
-                \every@ButtonField\every@CorrAnsButton}}%
-        \fi
-    \else
-        \edef\@@CorrAnsButtonActions{%
-        \ifx\@qzsolndest\@empty%\noexpand\BC{\normalCABtnBC}
-        \else\noexpand\BC{\solution@Color}\fi
-        \noexpand\A{\noexpand\sqCorrAnsButtonActionHook}}%
-        \mbox{\push@@Button{#1}{\Fld@name}{}{\DefaultHeightOfWidget}%
-            {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
-            {\CorrAnsButtonDefaults\@@CorrAnsButtonActions
-            \every@ButtonField\every@CorrAnsButton}}%
-    \fi
-    \egroup
-}
-\def\sqClearButtonDefaults
-{%
-    \CA{\eq@local@sqClearButton}\textColor{0 g}\F{\FPrint}
-    \BC{0 0 0}\BG{.7529 .7529 .7529}\W{1}\S{B}\Ff{\FfNoExport}
-}
-\def\@@sqClearButtonActions
-{%
-    \A{\JS{ProcessIt = false;\jsR
-        if ( typeof \oField\space== "undefined" )\jsR\jsT
-            \oField\space= new Object;\jsR
-        if (typeof appAlerts["\oField"] == "undefined")\jsR\jsT
-            appAlerts["\oField"] = new Object;\jsR
-        this.resetForm(new Array("mc.\oField","obj.\oField",%
-        "tally.\oField","grpobj.\oField"));\jsR
-        var f = this.getField("obj.\oField");\jsR
-        if ( f != null ) f.strokeColor=\ifx\defaultColorJSLoc\@empty
-\defaultColorJS\else\defaultColorJSLoc\fi;\jsR
-        f = this.getField("grpobj.\oField");\jsR
-        if ( f != null ) f.strokeColor=\ifx\defaultColorJSLoc\@empty
-\defaultColorJS\else\defaultColorJSLoc\fi;\jsR
-        f = this.getField("rbmarkup.\oField");\jsR
-        if ( f != null ) f.display=display.hidden;\jsR
-        \oField.Grp = {};\jsR
-        appAlerts["\oField"].bAfterValue=false;\jsR
-        ProcessIt=true;}%
-    }
-}
-\newcommand\sqClearButton[1][]
-{%
-    \mbox{\push@@Button{#1}{clear.\oField}{}{\DefaultHeightOfWidget}%
-        {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
-        {\sqClearButtonDefaults\@@sqClearButtonActions\every@ButtonField
-         \every@sqClearButton}}%
-}
-\def\PromptButtonDefaults
-{%
-   \CA{\eq@local@CorrAnsButton}\W{1}\S{S}\BC{0 0 0}
-   \BG{.7529 .7529 .7529}\H{P}
-}
-\newcommand{\promptButtonMsg}{%
-    "Would you like to see the correct answer at this time? "\r\t\t
-    + "Your current answer will be the one that will be scored. "\r\t\t
-    + "If you click on \\"Yes\\",
-        you will not be able to change your answer."
-}
-\newcommand{\AnsPromptBtnStr}{Answer:\space}
-\def\PromptButtonActionHook
-{%
-     \JS{%
-        if (!isQuizInitialized("\currQuiz")) {\r\t
-            eqAppAlert(InitMsg("\bqlabelISO"),3);\r\t
-            event.rc=false;\r
-        } else {\r\t
-            if ( !\currQuiz.oAlertCheck.bAfterValue ) {\r\t
-                var resp=eqAppAlert({\r\t\t
-                    cMsg:\promptButtonMsg,\r\t\t
-                    nIcon: 2, nType: 2,\r\t\t
-                    cTitle: ("AcroTeX Prompt Message"),\r\t\t
-                    oCheckbox: \currQuiz.oAlertCheck\r\t
-                });\r\t
-            }\r
-            if ( promptQuiz.oAlertCheck.bAfterValue || resp==4 )\r\t
-            {\r\t\t
-                var field=this.getField(%
-                    "obj.\currQuiz.\thequestionno");\r\t\t
-                field.readonly=true;\r\t\t
-                field=this.getField("Ans.\currQuiz");\r\t\t
-                if (field!=null)
-                    field.value = "\AnsPromptBtnStr\PromptAns";\r\t
-            }\r
-        }
-    }%
-}
-\newcommand\@PromptButton[2][]
-{%
-    \def\PromptAns{#2}\if\eqQuizType\isQZ
-    \def\Fld@name{promptButton.\curr@quiz.\thequestionno}%
-    \else\def\Fld@name{promptButton.\oField.\thequestionno}\fi
-    \if\eqQuizType\isQZ
-        \def\@@PromptButtonActions{%
-            \A{\PromptButtonActionHook}}%
-            \mbox{\push@@Button{#1}{\Fld@name}{}%
-                {\DefaultHeightOfWidget}{\eq@protect\A}%
-                {\eq@setButtonProps\eq@Button@driver}%
-                {\PromptButtonDefaults\@@PromptButtonActions
-                \every@ButtonField\every@CorrAnsButton}}%
-        \else\PackageWarning{exerquiz}{The \string\PromptButton
-            is for quiz questions only.}
-    \fi
-}
-\newcommand{\PromptButton}{\makebox[0pt][r] % assumes xcolor
-    {\@PromptButton[\textColor{1 0 0 rg}]{\CorrectAns}}}
-\let\eq@ansGrpArray\@empty
-\def\eq@recordGrpAnsArray#1{%
-    \ifx\eq@ansGrpArray\@empty
-        \edef\tmp@exp{\noexpand\g@addto@macro
-            \noexpand\eq@ansGrpArray{#1}}\else
-        \edef\tmp@exp{\noexpand\g@addto@macro
-            \noexpand\eq@ansGrpArray{,#1}}\fi
-        \tmp@exp
-}
-\let\grpquestions\eq@Zero
-\def\mathGrp{\global\let\eq@ansGrpArray\@empty
-    \@ifnextchar[{\@imathGrp}{\@imathGrp[groupEval]}}
-\def\@imathGrp[#1]{\def\argi{#1}%
-    \@ifnextchar[{\@iimathGrp}{\@iimathGrp[]}}
-\def\@iimathGrp[#1]{\def\argii{#1}%
-    \eq@AddProbToQzQuesList
-    \global\let\grpquestions\eq@One
-    \setcounter{grpquestionno}{0}%
-    \stepcounter{questionno}%
-    \xdef\beginGrp{\thequestionno}%
-    \xdef\grpPointValue{\eqPTs}%
-    \eq@recordThesePTs\eq@recordProbType
-    \if\eqQuizType\isQZ
-        \edef\eqtmp{\aPointType}%
-        \xdef\aPointType{\eqtmp,[\eqPTs,"grp"]}\fi
-    \addtocounter{eqpointvalue}{\eqPTs}%
-    \ifx\argii\@empty
-        \xdef\grpTotalWeight{\eqPTs}%
-        \xdef\grpEvalFunction{\argi}%
-    \else
-        \xdef\grpTotalWeight{\argi}%
-        \xdef\grpEvalFunction{\argii}%
-    \fi
-}
-\def\endmathGrp{\global\let\grpquestions\eq@Zero
-    \eq@recordCorrAns{[\eq@ansGrpArray]}%
-    \xdef\endGrp{\thequestionno}}
-\def\CorrAnsButtonGrpDefaults
-{%
-   \CA{\eq@local@CorrAnsButton}\W{1}\S{S}\BC{0 0 0}
-   \BG{.7529 .7529 .7529}\H{P}
-}
-\def\CorrAnsButtonGrpActionHook{\JS{%
-\ifx\@qzsolndest\@empty\else
-    if (event.shift)\jsR\jsT
-        this.gotoNamedDest("\@qzsolndest");\jsR
-    else\jsR
-\fi
-    {\jsR\jsT
-        var aCorrectAns=\CorrectAns;\jsR\jsT
-        var beginGrp = 1;\jsR\jsT
-        grpOffset = beginGrp;\jsR\jsT
-        if ( \currQuiz.Grp==null ) \currQuiz.Grp = {};\jsR\jsT
-        if (typeof \currQuiz.Grp["\thequestionno"]=="undefined")\jsR\jsT
-        {\jsR\jsT\jsT
-            \currQuiz.Grp["\thequestionno"] = {offset: 0};\jsR\jsT\jsT
-            var f = this.getField(%
-                "grpobj.\curr@quiz.\thequestionno."
-                    + grpOffset)\jsR\jsT\jsT
-            if ( f.readonly ) {\jsR\jsT\jsT
-                f.readonly = false;\jsR\jsT\jsT
-                f.setFocus();\jsR\jsT\jsT
-                eqDelay = app.setTimeOut(%
-                    "f.readonly = true;
-                    app.clearTimeOut(eqDelay);",10);\jsR\jsT
-            } else f.setFocus();\jsR\jsT
-        }\jsR\jsT
-        else \jsR\jsT
-        {\jsR\jsT\jsT
-            \currQuiz.Grp["\thequestionno"].offset =
-                ++\currQuiz.Grp["\thequestionno"].offset
-                \% aCorrectAns.length;\jsR\jsT\jsT
-            grpOffset = beginGrp
-                + \currQuiz.Grp["\thequestionno"].offset;\jsR\jsT\jsT
-            var f = this.getField("grpobj.\curr@quiz.\thequestionno."
-                + grpOffset);\jsR\jsT\jsT
-            if ( f.readonly ) {\jsR\jsT\jsT
-                f.readonly = false;\jsR\jsT\jsT
-                f.setFocus();\jsR\jsT\jsT
-                eqDelay = app.setTimeOut("f.readonly = true;
-                    app.clearTimeOut(eqDelay);",10);\jsR\jsT
-            } else f.setFocus();\jsR\jsT
-        }\jsR\jsT
-\if\eqQuizType\isQZ
-        DisplayAnswer("Ans.\curr@quiz",
-            aCorrectAns[\currQuiz.Grp["\thequestionno"].offset],%
-\currQuiz);
-\else
-        DisplayAnswer("grpobj.\oField.\thequestionno."+ grpOffset,
-            aCorrectAns[\currQuiz.Grp["\thequestionno"].offset],%
-\oField);\jsR
-\fi
-    }
-}}
-\newcommand\CorrAnsButtonGrp[2][]
-{%
-    \makeStringArray{#2}%
-    \edef\CorrectAns{\stringArray}%
-    \if\eqQuizType\isQZ\def\Fld@name{corr.\curr@quiz.\thequestionno}%
-    \else\edef\currQuiz{\oField}%
-    \def\Fld@name{corr.\oField.\thequestionno}\fi
-    \if\eqQuizType\isQZ
-        \edef\@@CorrAnsButtonGrpActions{\noexpand\F{\FHidden}%
-            \ifx\@qzsolndest\@empty%\noexpand\BC{\normalCABtnBC}
-            \else\noexpand\BC{\solution@Color}\fi
-            \noexpand\A{\noexpand\CorrAnsButtonGrpActionHook}}%
-        \ifeq@noquizsolutions\else
-           \mbox{\push@@Button{#1}{\Fld@name}{}{\DefaultHeightOfWidget}%
-                {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
-                {\CorrAnsButtonGrpDefaults\@@CorrAnsButtonGrpActions
-                \every@ButtonField\every@CorrAnsButton}}%
-        \fi
-    \else
-        \edef\@@CorrAnsButtonGrpActions{%
-            \ifx\@qzsolndest\@empty%\noexpand\BC{\normalCABtnBC}
-            \else\noexpand\BC{\solution@Color}\fi
-            \noexpand\A{\noexpand\CorrAnsButtonGrpActionHook}}%
-        \mbox{\push@@Button{#1}{\Fld@name}{}{\DefaultHeightOfWidget}%
-            {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
-            {\CorrAnsButtonGrpDefaults\@@CorrAnsButtonGrpActions
-            \every@ButtonField\every@CorrAnsButton}}%
-    \fi
-}
-\def\makeStringArray#1{\def\stringArray{[}\@makeStringArray#1,\@nil}
-\def\@makeStringArray#1,#2\@nil{%
-    \edef\eq@temp{\stringArray}\def\argii{#2}%
-    \ifx\argii\@empty
-        \edef\stringArray{\eq@temp"#1"]}%
-        \def\eq@next{}%
-    \else
-        \edef\stringArray{\eq@temp"#1",}%
-        \def\eq@next{\@makeStringArray#2\@nil}%
-    \fi
-    \eq@next
-}
-\let\@eqListExp\relax
-\let\@currentQues\@empty
-\let\eqQzQuesList\@empty
-\def\eq@AddProbToQzQuesList{%
-    \edef\eq@tmpExp{\noexpand\g@addto@macro%
-        \noexpand\eqQzQuesList{%
-            \noexpand\@eqListExp{\@currentQues}{\thepage}}}%
-    \ifx\grpquestions\eq@Zero\eq@tmpExp\fi
-}
-\LangRedefinitions
-\input{aebjs.def}
-\inputSumryTblCode
-\inputMCFICode
-\newcommand{\solutionColor}[1]{\def\eq@argi{#1}\ifx\eq@argi\@empty
-    \def\solution@Color{\solutionColorDef}\else
-    \def\solution@Color{#1}\fi}
-\newcommand{\solutionColorDef}{0 .6 0}
-\solutionColor{\solutionColorDef}
-\@ifundefined{jsColor}{%
-    \InputIfFileExists{eqcolor.def}{\PackageInfo{exerquiz}
-        {Inputting eqcolor.def}}
-        {\PackageError{exerquiz}{cannot find eqcolor.def}
-        {Refresh your file name database and try again.}}
-}{}
-\newcommand\rghtColorJSDef{["RGB", 0, .6, 0]}
-\newcommand\rghtColorJS{\rghtColorJSDef}
-\newcommand\wrngColorJSDef{color.red}
-\newcommand\wrngColorJS{\wrngColorJSDef}
-\newcommand\partialColorJSDef{color.blue}
-\newcommand\partialColorJS{\partialColorJSDef}
-\newcommand\defaultColorJSDef{color.black}
-\newcommand\defaultColorJS{\defaultColorJSDef}
-\let\defaultColorJSLoc\@empty
-\let\defaultColorJSLocDef\@empty
-\let\rghtColorJSLoc\@empty
-\let\rghtColorJSLocDef\@empty
-\let\wrngColorJSLoc\@empty
-\let\wrngColorJSLocDef\@empty
-\let\partialColorJSLoc\@empty
-\let\partialColorJSLocDef\@empty
-\def\chooseJSsymbol{\@ifstar{\let\eq@isstar\eq@YES\chooseJSsymboli}
-    {\let\eq@isstar\eq@NO\chooseJSsymboli}}
-\def\chooseJSsymboli#1{\lowercase{\edef\eq@arg{#1}}%
-    \def\eq@carg{check}\ifx\eq@arg\eq@carg
-    \def\eq@retnStyle{style.ch}\else
-    \def\eq@carg{cross}\ifx\eq@arg\eq@carg
-    \def\eq@retnStyle{style.cr}\else
-    \def\eq@carg{diamond}\ifx\eq@arg\eq@carg
-    \def\eq@retnStyle{style.di}\else
-    \def\eq@carg{circle}\ifx\eq@arg\eq@carg
-    \def\eq@retnStyle{style.ci}\else
-    \def\eq@carg{star}\ifx\eq@arg\eq@carg
-    \def\eq@retnStyle{style.st}\else
-    \def\eq@carg{square}\ifx\eq@arg\eq@carg
-    \def\eq@retnStyle{style.sq}\else
-    \let\eq@retnStyle\@empty
-    \ifx\eq@isstar\eq@NO\PackageWarning{exerquiz}
-    {Argument `#1' not recognized.\MessageBreak
-     Permissible values are check, cross, diamond,\MessageBreak
-     circle, star, square. Will use the default}\fi
-    \fi\fi\fi\fi\fi\fi
-}
-\newcommand\setRghtAnsSymb[1]{\chooseJSsymbol{#1}%
-    \ifx\eq@retnStyle\@empty\else
-    \edef\rghtAnsSymbJS{\eq@retnStyle}%
-    \edef\rghtAnsSymb{\eq@carg}\fi}
-\def\rghtAnsSymbJS{style.ch}
-\def\rghtAnsSymb{check}
-\newcommand\setCorrAnsSymb[1]{\chooseJSsymbol{#1}%
-    \ifx\eq@retnStyle\@empty\else
-    \edef\corrAnsSymbJS{\eq@retnStyle}%
-    \edef\corrAnsSymb{\eq@carg}\fi}
-\def\corrAnsSymbJS{style.ci}
-\def\corrAnsSymb{circle}
-\newcommand\setWrngAnsSymb[1]{\chooseJSsymbol{#1}%
-    \ifx\eq@retnStyle\@empty\else
-    \edef\wrngAnsSymbJS{\eq@retnStyle}%
-    \edef\wrngAnsSymb{\eq@carg}\fi}
-\def\wrngAnsSymbJS{style.cr}
-\def\wrngAnsSymb{cross}
-\def\setRghtAnsSymbLoc#1{\chooseJSsymbol*{#1}%
-    \ifx\eq@retnStyle\@empty
-        \let\rghtAnsSymbJSLoc\@empty\else
-        \edef\rghtAnsSymbJSLoc{\eq@retnStyle}\fi
-}
-\def\setCorrAnsSymbLoc#1{\chooseJSsymbol*{#1}%
-    \ifx\eq@retnStyle\@empty
-        \let\corrAnsSymbJSLoc\@empty\else
-        \edef\corrAnsSymbJSLoc{\eq@retnStyle}\fi
-}
-\def\setWrngAnsSymbLoc#1{\chooseJSsymbol*{#1}%
-    \ifx\eq@retnStyle\@empty
-        \let\wrngAnsSymbJSLoc\@empty\else
-        \edef\wrngAnsSymbJSLoc{\eq@retnStyle}\fi
-}
-\let\rghtAnsSymbJSLoc\@empty
-\let\rghtAnsSymbJSLocDef\@empty
-\let\corrAnsSymbJSLoc\@empty
-\let\corrAnsSymbJSLocDef\@empty
-\let\wrngAnsSymbJSLoc\@empty
-\let\wrngAnsSymbJSLocDef\@empty
-\newcommand\everyeqTextField[1]{\def\every@eqTextField{#1}}
-\def\every@eqTextField{}
-\newcommand\everyRespBoxMath[1]{\def\every@RespBoxMath{#1}}
-\def\every@RespBoxMath{}
-\newcommand\everyRespBoxTxt[1]{\def\every@RespBoxTxt{#1}}
-\def\every@RespBoxTxt{}
-\newcommand\everyrbMarkup[1]{\def\every@rbMarkup{#1}}
-\def\every@rbMarkup{}
-\newcommand\everysqTallyBox[1]{\def\every@sqTallyBox{#1}}
-\def\every@sqTallyBox{}
-\newcommand\everysqTallyTotal[1]{\def\every@sqTallyTotal{#1}}
-\def\every@sqTallyTotal{}
-\newcommand\everyScoreField[1]{\def\every@ScoreField{#1}}
-\def\every@ScoreField{}
-\newcommand\everyAnswerField[1]{\def\every@AnswerField{#1}}
-\def\every@AnswerField{}
-\newcommand\everyPointsField[1]{\def\every@PointsField{#1}}
-\def\every@PointsField{}
-\newcommand\everyPercentField[1]{\def\every@PercentField{#1}}
-\def\every@PercentField{}
-\newcommand\everyGradeField[1]{\def\every@GradeField{#1}}
-\def\every@GradeField{}
-\newcommand{\everysqRadioButton}[1]{\def\every@sqRadioButton{#1}}
-\def\every@sqRadioButton{}
-\newcommand{\everyqRadioButton}[1]{\def\every@qRadioButton{#1}}
-\def\every@qRadioButton{}
-\newcommand{\everyqckCheckBox}[1]{\def\every@qckCheckbox{#1}}
-\def\every@qckCheckbox{}
-\newcommand{\everyqCheckBox}[1]{\def\every@qCheckBox{#1}}
-\def\every@qCheckBox{}
-\newcommand{\everysqCheckBox}[1]{\def\every@sqCheckBox{#1}}
-\def\every@sqCheckBox{}
-\let\everyeqButtonField\everyButtonField
-\newcommand\everyCorrAnsButton[1]{\def\every@CorrAnsButton{#1}}
-\def\every@CorrAnsButton{}
-\newcommand\everysqClearButton[1]{\def\every@sqClearButton{#1}}
-\def\every@sqClearButton{}
-\newcommand\everyeqButton[1]{\def\every@eqButton{#1}}
-\newcommand\everyCorrButton{\everyeqButton}
-\def\every@eqButton{}
-\newcommand\everyBeginQuizButton[1]{\def\every@BeginQuizButton{#1}}
-\def\every@BeginQuizButton{}
-\newcommand\everyEndQuizButton[1]{\def\every@EndQuizButton{#1}}
-\def\every@EndQuizButton{}
-\let\everyeqGenButton\everyPushButton
-\let\every@eqGenButton\every@PushButton
-\let\eqGenButton\pushButton
-\newcommand\everyeqIcon[1]{\def\every@eqIcon{#1}}
-\def\every@eqIcon{}
-\def\formatInitAltApprs{\formatInitAltApprs}
-\def\@eqAddAAFormat#1{\def\@rgi{#1}\ifx\@rgi\formatInitAltApprs
-  \bInitAltAppr\else\def\eqAddAAFormat{#1}\fi}
-\def\eqAddAAFormat{}
-\def\formatAsSet{try{formatAsSet()}catch(e){}}
-\def\formatAsVector{try{formatAsVector()}catch(e){}}
-\def\eq@SupActnLst{{\AddAAKeystroke}{\AddAAMouseUpMC}%
-  {\AddAAMouseUpMS}{\AddAAFormat}}
-\newcommand\setActionKeys{\edef\catOfAt{\the\catcode`@}%
-  \ifnum\catOfAt=11 \let\eq@CatTail\relax\else
-  \makeatletter\let\eq@CatTail\makeatother\fi\setActionKeysi}
-\def\setActionKeysi#1{\let\eq@itsGood\eq@One
-  \def\setActionKeys@cont{\processAppArgs#1\end\@nil}%
-  \begingroup\eq@checkivValidKeys#1\end\ef@nil\endgroup\eq@CatTail}
-\def\eq@checkivValidKeys#1#2{\def\eq@GOOD{good}\expandafter
-    \@tfor\expandafter
-    \@ction\expandafter:\expandafter=\eq@SupActnLst\do{%
-    \expandafter\def\@ction{good}}%
-    \ifx\end#1% if #1=\end, #2=\ef@nil.
-      \def\eq@next{\aftergroup\setActionKeys@cont}%
-    \else
-      \if\eq@itsGood\eq@One
-        \let\itp@ss0\let\@@next\relax
-        \expandafter\@tfor\expandafter
-          \@ction\expandafter:\expandafter=\eq@SupActnLst\do{%
-          \expandafter\ifx\expandafter#1\@ction
-          \let\itp@ss\eq@One\@break@tfor
-        \fi}% do
-        \if\itp@ss\eq@Zero\let\eq@itsGood\eq@Zero
-          \def\eq@next{\def\eq@lastArg{#1}\expandafter
-            \eq@sqkErrorMsg\ef@gobbletonil}\else
-          \let\eq@next\eq@checkivValidKeys\fi
-        \else\let\eq@next\ef@gobbletonil\fi
-    \fi %\ifx\end
-    \eq@next
-}
-\def\eq@sqkErrorMsg#1{\PackageError{exerquiz}{The key \expandafter
-  \string\eq@lastArg\space is not supported by
-  \string\setActionKeys.\MessageBreak
-  Remove the key or correct the spelling of the key}{}}
-\def\addToAction{\makeatletter\@ifstar{\let\isSt@r\eq@YES\@ddToAction}
-  {\let\isSt@r\eq@NO\@ddToAction}}
-\def\@ddToAction#1#2{\let\eq@itsGood\eq@One
-  \def\setActionKeys@cont{\@@ddToAction{#1}{#2}}\begingroup
-  \eq@checkivValidKeys{#1}{#2}\end\ef@nil\endgroup\makeatother}
-\def\@@ddToAction#1#2{\@getCmdName{#1}%
-  \if\isSt@r\eq@YES\toks2={#2}%
-    \toks@=\aeb@exiii{\csname eq\@CmdName\endcsname}%
-    \edef\tmp@tokshold{\the\toks2 \the\toks@}%
-    \toks@=\expandafter{\tmp@tokshold}\else
-    \toks@=\aeb@exiii{\csname eq\@CmdName\endcsname#2}\fi
-  \expandafter\edef\csname eq\@CmdName\endcsname{\the\toks@}%
-}
-\def\@eqAddAAKeystroke#1{\def\argi{#1}\ifx\argi\@empty
-    \def\eqAddAAKeystroke{}\else\def\eqAddAAKeystroke{#1}\fi} %\r
-\def\eqAddAAKeystroke{}
-\def\@eqAddAAMouseUpMC#1{\def\argi{#1}\ifx\argi\@empty
-    \def\eqAddAAMouseUpMC{}\else\def\eqAddAAMouseUpMC{#1}\fi}
-\def\eqAddAAMouseUpMC{}
-\def\@eqAddAAMouseUpMS#1{\def\argi{#1}\ifx\argi\@empty
-    \def\eqAddAAMouseUpMS{}\else\def\eqAddAAMouseUpMS{#1}\fi}
-\def\eqAddAAMouseUpMS{}
-\def\eqIconDefaults
-{%
-    \rawPDF{}\S{}\mkIns{/TP 1}\W{}
-    \CA{}\RC{}\AC{}\BC{}\BG{}\H{N}
-    \textColor{0 g}\Ff{\FfReadOnly}
-}
-\newcommand\eqIcon[4][]
-{%
-    \mbox{\push@@Button{#1}{#2}{#3}{#4}{}{\eq@setButtonProps
-        \eq@Button@driver}{\eqIconDefaults\every@ButtonField
-        \every@eqIcon}}%
-}
-\eq@restoreCats
-\endinput
-%%
-%% End of file `exerquiz.sty'.
+%%
+%% This is file `exerquiz.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% exerquiz.dtx  (with options: `copyright,package')
+%% 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Exerquiz.sty package,                                %%
+%% Copyright (C) 1999-2018  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{exerquiz}
+ [2018/03/21 v8.2.2 %
+  Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
+\usepackage{keyval}
+\RequirePackage{ifpdf}[2006/02/20]
+\RequirePackage{ifxetex}[2006/08/21]
+\RequirePackage{ifluatex}
+\@ifundefined{exqtable}{\def\exqtable{table}}{}
+\IfFileExists{xcolor.sty}{%
+    \def\eq@ColorPackage{xcolor}%
+    \PassOptionsToPackage{\exqtable,hyperref}{xcolor}}
+    {\def\eq@ColorPackage{color}}
+\DeclareOption{noxcolor}{\def\eq@ColorPackage{color}}
+\DeclareOption{forpaper}{%
+   \eqforpapertrue\PassOptionsToPackage{monochrome}{\eq@ColorPackage}
+   \AtBeginDocument{\ifnum\eq@drivernum=4 \else\AllowPeeking\fi}
+}
+\DeclareOption{forcolorpaper}{\eqforpapertrue  % for print
+   \AtBeginDocument{\ifnum\eq@drivernum=4 \else\AllowPeeking\fi}
+}
+\DeclareOption{preview}{\PassOptionsToPackage{preview}{eforms}}
+\DeclareOption{nosolutions}{\eq@nosolutionstrue\eq@nolinktrue}
+\DeclareOption{noquizsolutions}{\eq@noquizsolutionstrue\eq@nolinktrue}
+\let\eq@YES=y \let\eq@NO=n
+\let\eq@One=1 \let\eq@Zero=0
+\def\eq@r{r}\let\eq@f=f \let\eq@l=l
+\DeclareOption{online}{\let\eq@online\eq@YES}
+\let\eq@online\eq@NO
+\DeclareOption{nohiddensolutions}{\eq@globalshowsolutionstrue}
+\DeclareOption{noHiddensolutions}%
+    {\eq@globalshowsolutionstrue\AtBeginDocument{\def\Hidesymbol{h}}}
+\DeclareOption{solutionsafter}{\eq@solutionsaftertrue\eq@nolinktrue}
+\DeclareOption{solutionsonly}{\solutionsonlytrue\answerkeytrue
+    \therearesolutionstrue\AtEndOfPackage{\let\exerSolnsHeadnToc\relax}}
+\newif\ifsolutionsonly\solutionsonlyfalse
+\@ifundefined{ifanswerkey}{\newif\ifanswerkey\answerkeyfalse}{}
+\DeclareOption{contsolns}{\AtEndOfPackage{\InputIfFileExists
+    {contsolns.def}{\contsolnsInputMsg}{\contsolnsErrorMsg}}}
+\def\contsolnsInputMsg{\PackageInfo{exerquiz}{contsolns option,
+    inputting file contsolns.def}}
+\def\contsolnsErrorMsg{\PackageWarning{exerquiz}{contsolns option,
+    cannot find file contsolns.def}}
+\DeclareOption{nocorrections}{\nocorrectionstrue}
+\DeclareOption{proofing}{\eq@proofingtrue}
+\newif\ifaebshowgrayletters\aebshowgraylettersfalse
+\DeclareOption{showgrayletters}{\aebshowgrayletterstrue}
+\@ifundefined{ifvspacewithsolns}{%
+    \DeclareOption{vspacewithsolns}{\vspacewithsolnstrue}
+    \newif\ifvspacewithsolns\vspacewithsolnsfalse
+}{}
+\@ifundefined{ifdisplayworkarea}{\newif\ifdisplayworkarea
+  \displayworkareafalse}{}
+\DeclareOption{nodljs}{\PassOptionsToPackage{nodljs}{insdljs}%
+     \AtEndOfPackage{\let\importdljs\eq@YES}}
+\DeclareOption{execJS}{\PassOptionsToPackage{execJS}{insdljs}}
+\DeclareOption{exercisesonly}{\PassOptionsToPackage{nodljs}{insdljs}}
+\DeclareOption{debug}{\PassOptionsToPackage{debug}{insdljs}}
+\DeclareOption{allowrandomize}{\AtEndOfPackage{\inputRandomizeChoices}}
+\def\inputRandomizeChoices{\InputIfFileExists{aebrandom.def}
+    {\PackageInfo{exerquiz}{inputting aebrandom.def}}
+    {cannot find aebrandom.def}}
+\newif \ifusesumrytbls \usesumrytblsfalse
+\DeclareOption{usesumrytbls}{\usesumrytblstrue
+    \def\inputSumryTblCode{\InputIfFileExists{aebsumrytbls.def}
+    {\PackageInfo{exerquiz}{inputting aebsumrytbls.def}}%
+    {cannot find aebsumrytbls.def}}}
+\let\inputSumryTblCode\relax
+\DeclareOption{usemcfi}{%
+    \def\inputMCFICode{\InputIfFileExists{usemcfi.def}
+    {\PackageInfo{exerquiz}{inputting usemcfi.def}}%
+    {cannot find usemcfi.def}}}
+\let\inputMCFICode\relax
+\newif\ifwithinMCFI\withinMCFIfalse
+\DeclareOption{dvipsone}{%
+    \def\eq@drivernum{0}\def\eq@driver{dvipsone}%
+    \PassOptionsToPackage{dvipsone}{eforms}
+}
+\DeclareOption{dvips}{%
+    \def\eq@drivernum{0}\def\eq@driver{dvips}%
+    \PassOptionsToPackage{dvips}{eforms}
+}
+\DeclareOption{pdftex}{%
+    \def\eq@drivernum{1}\def\eq@driver{pdftex}%
+    \PassOptionsToPackage{pdftex}{\eq@ColorPackage}
+    \PassOptionsToPackage{pdftex}{eforms}
+}
+\DeclareOption{luatex}{%
+    \def\eq@drivernum{1}\def\eq@driver{luatex}%
+    \PassOptionsToPackage{luatex}{\eq@ColorPackage}
+    \PassOptionsToPackage{luatex}{eforms}
+}
+\DeclareOption{dvipdfm}{%
+    \def\eq@drivernum{2}\def\eq@driver{dvipdfm}%
+    \PassOptionsToPackage{dvipdfm}{\eq@ColorPackage}%
+    \PassOptionsToPackage{dvipdfm}{eforms}%
+}
+\DeclareOption{dvipdfmx}{%
+    \def\eq@drivernum{2}\def\eq@driver{dvipdfmx}%
+    \PassOptionsToPackage{dvipdfmx}{\eq@ColorPackage}%
+    \PassOptionsToPackage{dvipdfmx}{eforms}%
+}
+\DeclareOption{xetex}{%
+    \def\eq@drivernum{2}\def\eq@driver{xetex}%
+    \PassOptionsToPackage{xetex}{\eq@ColorPackage}
+    \PassOptionsToPackage{xetex}{eforms}%
+}
+\DeclareOption{textures}{\def\eq@drivernum{3}%
+  \def\eq@driver{textures}%
+  \PassOptionsToPackage{textures}{\eq@ColorPackage}%
+  \PassOptionsToPackage{textures}{eforms}%
+}
+\DeclareOption{dviwindo}{\def\eq@drivernum{4}\def\eq@driver{dviwindo}%
+    \eq@noformstrue\PassOptionsToPackage{nodljs}{insdljs}}
+\DeclareOption{unicode}{\PassOptionsToPackage{unicode}{hyperref}}
+\DeclareOption{useui}{\PassOptionsToPackage{useui}{eforms}}
+\let\LangRedefinitions\relax
+\DeclareOption{french}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqfr.def}%
+     {\PackageInfo{exerquiz}{Inputting French Option}}%
+     {\PackageInfo{exerquiz}{French Option: Cannot find the file
+      eqfr.def, using the default, English.}}}}
+\DeclareOption{german}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqde.def}%
+   {\PackageInfo{exerquiz}{Inputting German Option}}%
+   {\PackageInfo{exerquiz}{German Option: Kann die Datei eqde.def
+     nicht finden, benutze Default, Englisch.}}}}
+\DeclareOption{norsk}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqno.def}%
+   {\PackageInfo{exerquiz}{Inputting Norsk Option}}%
+   {\PackageInfo{exerquiz}{Norsk Option: Cannot find the file eqno.def,
+   using the default, English.}}}}
+\DeclareOption{dutch}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqnl.def}%
+   {\PackageInfo{exerquiz}{Inputting Dutch Option}}%
+   {\PackageInfo{exerquiz}{Dutch Option: Kan bestand eqnl.def niet
+    vinden, gebruik default, Engels.}}}}
+\DeclareOption{spanish}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqes.def}%
+   {\PackageInfo{exerquiz}{Inputting Spanish Option}}%
+   {\PackageInfo{exerquiz}{Spanish Option: Opci\'on Espa\~nola: no puede
+    encontrar el fichero eqes.def, usar\'a por defecto, English.}}}}
+\DeclareOption{italian}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqit.def}%
+   {\PackageInfo{exerquiz}{Opzione Lingua Italiana}}%
+   {\PackageInfo{exerquiz}{pzione Italiano: Non trovo il file eqit.def,
+    utilizzo  quello di default, English.}}}}
+\DeclareOption{russian}{%
+   \@ifpackageloaded{hyperref}{%
+    \ifHy@unicode\else\PackageWarning{exerquiz}{%
+        The unicode option recommended for hyperref\MessageBreak}\fi
+   }{\PassOptionsToPackage{unicode}{hyperref}}
+   \def\LangRedefinitions{\InputIfFileExists{eqru.def}%
+   {\PackageInfo{exerquiz}{Inputting Russian Option}}%
+   {\PackageInfo{exerquiz}{Russian Option: Cannot find the file
+    eqru.def, using the default, English.}}}}
+\DeclareOption{dansk}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqda.def}%
+   {\PackageInfo{exerquiz}{Inputting Dansk Option}}%
+   {\PackageInfo{exerquiz}{Dansk Option: Cannot find the file eqda.def,
+   using the default, English.}}}}
+\DeclareOption{polish}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqpo.def}%
+   {\PackageInfo{exerquiz}{Inputting Polish Option}}%
+   {\PackageInfo{exerquiz}{Polish Option: Cannot find the file
+    eqpo.def, using the default, English.}}}}
+\DeclareOption{finnish}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqfin.def}%
+   {\PackageInfo{exerquiz}{Inputting Finnish Option}}%
+   {\PackageInfo{exerquiz}{Finnish Option: Cannot find the file
+    eqfin.def, using the default, English.}}}}
+\DeclareOption{catalan}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqcat.def}%
+   {\PackageInfo{exerquiz}{Inputting Catalan Option}}%
+   {\PackageInfo{exerquiz}{Catalan Option: Cannot find the file
+    eqcat.def, using the default, English.}}}}
+\DeclareOption{czech}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqcz.def}%
+   {\PackageInfo{exerquiz}{Inputting Czech Option}}%
+   {\PackageInfo{exerquiz}{Czech Option: Cannot find the file eqcz.def,
+   using the default, English.}}}}
+\DeclareOption{brazil}{%
+   \def\LangRedefinitions{\InputIfFileExists{eqbr.def}%
+   {\PackageInfo{exerquiz}{Inputting Brazilian Portuguese Option}}%
+   {\PackageInfo{exerquiz}{Portuguese Option: Opc\~ao Portugu\^es:
+    n\~ao foi poss\'ivel encontrar o arquivo eqbr.def, usaremos
+    o padr\~ao, English.}}}}
+\DeclareOption{turkish}{%
+   \@ifpackageloaded{hyperref}{%
+    \ifHy@unicode\else\PackageWarning{exerquiz}{%
+        The unicode option recommended for hyperref\MessageBreak}\fi
+   }{\PassOptionsToPackage{unicode}{hyperref}}
+   \def\LangRedefinitions{\InputIfFileExists{eqtr.def}%
+   {\PackageInfo{exerquiz}{Inputting Turkish Option}}%
+   {\PackageInfo{exerquiz}{Cannot find the file eqtk.def,
+    using the default, English.}}}}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{\eq@ColorPackage}}
+\@ifpackageloaded{xcolor}%
+{%
+    \@ifpackagelater{xcolor}{2004/07/04}{}
+    {%
+    \PackageError{exerquiz}{%
+    *************************************************\MessageBreak
+    * Your Version of `xcolor.sty' is too old!\MessageBreak
+    * You need the version from 2004/07/04 or newer\MessageBreak
+    * or use: \string\usepackage[noxcolor]{exerquiz}\MessageBreak
+    *************************************************}{}%
+    }%
+}{}
+\let\iterate\relax
+\newif\ifeq@solutionsafter \eq@solutionsafterfalse
+\newif\ifeq@hidesolution \eq@hidesolutionfalse
+\newif\ifeq@globalshowsolutions \eq@globalshowsolutionsfalse
+\newif\ifeq@nosolutions \eq@nosolutionsfalse
+\newif\ifeq@proofing \eq@proofingfalse
+\providecommand\turnProofingOn{\eq@proofingtrue}
+\providecommand\turnProofingOff{\eq@proofingfalse}
+\newif\ifeqforpaper \eqforpaperfalse
+\newif\ifeq@noforms \eq@noformsfalse
+\newif\ifeq@noquizsolutions \eq@noquizsolutionsfalse
+\newif\ifnocorrections \nocorrectionsfalse
+\@ifundefined{ifeqe@flextended}{\newif\ifeqe@flextended
+  \eqe@flextendedfalse}{}
+\@ifundefined{ifcont@nnot}{\newif\ifcont@nnot \cont@nnotfalse}{}
+\@ifundefined{if@eqalignfilllinestoleft}{\newif\if@eqalignfilllinestoleft
+  \@eqalignfilllinestoleftfalse}{}
+\newif\ifkeepdeclaredvspacing \keepdeclaredvspacingfalse
+\newif\ifeq@nolink \eq@nolinkfalse
+\def\eq@ckglobalhide{\ifeq@globalshowsolutions\eq@hidesolutionfalse\fi}
+\def\hidesymbol{h}\def\Hidesymbol{H}
+\newif\iftherearesolutions \therearesolutionsfalse
+\newif\ifIsRespBox \global\IsRespBoxfalse
+\def\SolutionsAfter{\eq@solutionsaftertrue\eq@nolinktrue}
+\newif\ifcqSA\cqSAfalse
+\def\SolutionsAtEnd{\eq@solutionsafterfalse\eq@nolinkfalse
+  \displayworkareatrue\ifvspacewithsolns\eq@nosolutionsfalse\else
+  \eq@nosolutionstrue\fi\eq@proofingfalse\answerkeyfalse}
+\def\NoSpaceToWork{\let\eq@insertverticalspace\eq@NO}
+\def\SpaceToWork{\let\eq@insertverticalspace\eq@YES}
+\SpaceToWork
+\long\def\ifNoSolutions#1#2{%
+    \ifeq@nosolutions\expandafter#1\else
+    \expandafter#2\fi
+}
+\newif\ifeq@randomizeChoices \eq@randomizeChoicesfalse
+\newif\ifeq@randomizeallChoices \eq@randomizeallChoicesfalse
+\def\turnOnRandomize{\eq@randomizeallChoicestrue}
+\def\obeyLocalRandomize{\eq@randomizeallChoicesfalse}
+\let\saveRandomSeed\relax
+\let\inputRandomSeed\relax
+\def\CorrectionsOn{\global\nocorrectionsfalse}
+\def\CorrectionsOff{\global\nocorrectionstrue}
+\AtBeginDocument{\ifeq@noforms\else\Form\fi}
+\AtEndDocument{%
+    \include@solutions
+    \ifeq@noforms\else\include@quizsolutions\fi
+    \clearpage
+    \csname endForm\endcsname
+    \if\eq@drivernum2\else\clearpage\fi
+}
+\InputIfFileExists{exerquiz.cfg}{}{}
+\@ifpackageloaded{web}{%
+    \ExecuteOptions{\eq@driver@name}%
+}{%
+    \ifluatex\ExecuteOptions{luatex}\else
+    \ifpdf\ExecuteOptions{pdftex}\else
+    \ifxetex\ExecuteOptions{xetex}\else
+        \InputIfFileExists{web.cfg}{}
+        {\@ifundefined{l@tex@@@@driver}{\ExecuteOptions{dvips}}
+            {\ExecuteOptions{dvipsone}}}\fi\fi\fi
+}
+\ProcessOptions
+\RequirePackage{array}
+\RequirePackage{\eq@ColorPackage}
+\RequirePackage{comment}
+\RequirePackage{verbatim}
+\RequirePackage{hyperref}
+\RequirePackage{amssymb}% used for return symbols
+\RequirePackage{eforms}[2012/06/20]
+\@ifundefined{eq@drivernum}{%
+    \PackageError{exerquiz}%
+        {You  have not specified dvips, dvipsone, pdftex, dvipdfm,
+        dvipdfmx, or xetex
+        \MessageBreak in the option list of the exerquiz package}
+        {Place one of the drivers dvips, dvipsone, pdftex, dvipdfm,
+        dvipdfmx, or xetex
+        \MessageBreak in the option list of the exerquiz package.}
+}{}
+\edef\eq@restoreCats{% dps17
+  \catcode`\noexpand\"=\the\catcode`\"\relax
+  \catcode`\noexpand\'=\the\catcode`\'\relax
+  \catcode`\noexpand\,=\the\catcode`\,\relax
+  \catcode`\noexpand\(=\the\catcode`\(\relax
+  \catcode`\noexpand\!=\the\catcode`\!\relax
+  \catcode`\noexpand\_=\the\catcode`\_\relax
+}
+\@makeother\"\@makeother\'\@makeother\,%
+\@makeother\(\@makeother\!\@makeother\_
+\@ifundefined{ifsolutionsAtEnd}
+    {\newif\ifsolutionsAtEnd\solutionsAtEndtrue}{}
+\ifeq@nosolutions\solutionsAtEndfalse\fi
+\ifeq@solutionsafter\solutionsAtEndfalse\fi
+\@ifundefined{if@fleqn}{\let\fleqnOn\relax\let\fleqnOff\relax}
+    {\def\fleqnOn{\@fleqntrue}\def\fleqnOff{\@fleqnfalse}}
+\@ifundefined{if@inclkey}{\newif\if@inclkey\@inclkeytrue}{}
+\def\eqretnSymb{$\blacksquare$}%{\rule{6bp}{6.8bp}}
+\newcommand\exlabel{Exercise}
+\newcommand\exlabelsol{\exlabel}
+\newcommand\exsectitle{Solutions to \exlabel s}
+\newcommand\exsecrunhead{\exsectitle} %% change to @ form
+\newcommand{\exsolafter}{\eq@exsolafterDefault}
+\newcommand{\resetSolnAfterToDefault}{%
+    \def\exsolafter{\eq@exsolafterDefault}}
+\newcommand{\exsolafterDefault}[1]{\def\eq@exsolafterDefault{#1}%
+    \def\exSolafterDefault{#1}\resetSolnAfterToDefault}
+\exsolafterDefault{\textit{Solution}:}
+\newcommand{\renameSolnAfterTo}[1]{\def\exsolafter{#1}}
+\newcommand{\adjDisplayBelow}{\vskip-\lastskip\vskip-\baselineskip}
+\newcommand{\adjDisplayBelowPlus}{\adjDisplayBelow\recoverDisplayBelow}
+\def\recoverDisplayBelow{\vskip\belowdisplayskip}
+\newcommand\eq@sqslsectitle{Solutions to Quizzes}
+\newcommand\sqslsectitle{\eq@sqslsectitle}
+\newcommand\eq@sqslsecrunhead{Solutions to Quizzes}
+\newcommand\sqslsecrunhead{\eq@sqslsecrunhead}
+\newcommand\eq@sqsllabel{\protect\textbf{Solution to Quiz:}}
+\newcommand\sqsllabel{\eq@sqsllabel}
+\newcommand\sqsolafter{\textit{Solution}:}
+\newcommand{\sqDefaultFmtTitle}[1]%
+      {\def\eq@sqlabel{#1}\def\sqlabel{#1}}
+\newcommand\sqlabel{\eq@sqlabel}
+\sqDefaultFmtTitle{\textcolor{red}{Quiz}}
+\newcommand\eq@sqslrtnlabel{\protect\eqretnSymb}
+\newcommand\sqslrtnlabel{\eq@sqslrtnlabel}
+\newcommand\eqsqrtmsg{"Right!"}
+\newcommand\eqsqwgmsg{"Wrong!"}
+\newcommand\doNotShowAgainMsg{Do not show this message again}
+\newcommand\eq@bqlabel{Begin Quiz}
+\newcommand\bqlabel{\eq@bqlabel}
+\newcommand\eq@bqlabelISO{\eq@bqlabel}
+\newcommand\bqlabelISO{\eq@bqlabelISO}
+\newcommand\setDefShortQuizLabelName[1]%
+    {\def\eq@defaultShortQuizLabelName{#1}}
+\setDefShortQuizLabelName{Quiz}
+\newcommand\setDefQuizLabelName[1]
+    {\def\eq@defaultQuizLabelName{#1}}
+\setDefQuizLabelName{Quiz}
+\newcommand\eq@eqlabel{End Quiz}
+\newcommand\eqlabel{\eq@eqlabel}
+\newcommand\eq@Score{Score:}\newcommand\eq@OutOf{out of}
+\newcommand\eq@ptScore{Score:}
+\newcommand\stOutOf{of}
+\newcommand\eqScore{\eq@Score}\newcommand\eqOutOf{\eq@OutOf}
+\newcommand\eqptScore{\eq@ptScore}
+\newcommand\eqInitQuizMsg{%
+  "You must initialize the Quiz! Click on "+msg+"."}
+\newcommand\eqQuizTotalMsg{%
+  "\eqScore\space"+Score+" \eqOutOf\space"+nQuestions}
+\newcommand\eqQuizPointsMsg{%
+  "\eqptScore\space"+ptScore+" \eqOutOf\space"+nPointTotal}
+\newcommand\eqQuizPercentMsg{pcScore+"\%"}
+\newcommand\eqQuizGradeMsg{quizGrade}
+\newcommand\eqMadeChoice{%
+  "You have already made a choice."
+  + " Your choice was ("+Responses[probno]+")."
+  + " Do you want to change it?"}
+\newcommand\eq@local@CA{Correct}
+\newcommand\eq@local@RC{My Answers!}
+\newcommand\eq@local@AC{Please!}
+\newcommand\eq@local@CorrAnsButton{Ans}
+\newcommand{\eq@local@sqClearButton}{Clear}
+\newcommand\eqerrABS{"Absolute values not balanced. Please correct."}
+\dlJSStr[noquotes]\eqerrBadMathFunc{"The expression \""+aF[i]
+    +"\" is neither a defined function nor a valid math expression."}
+\newcommand\eqParens{"Parentheses"}
+\newcommand\eqBrackets{"Brackets"}
+\newcommand\eqBraces{"Braces"}
+\newcommand\eqerrDelimNotBal{aGroup[i][2] + " not balanced.
+    Please correct."}
+\newcommand\eqerrBadExp{"Invalid mathematical expression.
+    A problem with one of the exponents. Please correct."}
+\newcommand\eqerrUnfinishQuiz{"There is an unfinished quiz,
+    please finish before moving on to another."}
+\newcommand\noPeekMsg{"Viewing Solutions to quizzes is not allowed
+    until you take or finish this quiz!"}
+\newcommand\highThresholdMsg{"You are required to respond to all
+    questions before the quiz is evaluated."}
+\newcommand\eqSyntaxErrorUndefVar{"Syntax Error: Possibly an undefined
+    variable present, or an expression is not written in an expected
+    format."}
+\dlJSStr[noquotes]{\eqSyntaxErrorComma}{%
+    "Syntax Error: A comma was found"
+    + " in your response \""
+    + UserAns + "\". Please remove the comma, or this answer"
+    + " will be marked as wrong."}
+\newcommand{\limSelWarningMsg}{"For this question, you are allowed to
+    make at most " + n + " selections."}
+\newcommand{\defaultReqFormMsg}{%
+    "The expression is not in the expected form."}
+\PackageInfo{exerquiz}{* Using \eq@driver\space option *}
+\ifsolutionsonly
+\InputIfFileExists{\jobname_xdefs.cut}{%
+    \typeout{^^JExerquiz|Eqexam: Reading \jobname_xdefs.cut^^J}}
+    {\PackageWarningNoLine{exerquiz|eqexam}{%
+    \jobname_xdefs.cut not found.\MessageBreak
+     Recompile file under the vspacewithsolns\MessageBreak
+     option, then compile with the solutionsonly\MessageBreak
+     option}}
+\else
+\newwrite\ex@solns \immediate\openout \ex@solns \jobname.sol
+\newcommand{\writeToExSolns}[1]{%
+    \set@display@protect
+    \immediate\write\ex@solns{#1}%
+    \set@typeset@protect
+}
+\newwrite\eq@xrefdefns \immediate\openout\eq@xrefdefns\jobname_xdefs.cut
+\fi
+\newwrite\quiz@solns \immediate\openout \quiz@solns \jobname.qsl
+\newcommand{\writeToQzSolns}[1]{%
+    \set@display@protect
+    \immediate\write\quiz@solns{#1}%
+    \set@typeset@protect
+}
+\def\eq@IWAuxOut#1{\immediate\write\@auxout{#1}}
+\def\eq@IWDefs#1{\immediate\write\eq@xrefdefns{#1}}
+\newcounter{eqexno} \setcounter{eqexno}{0}
+\newcounter{@exno} \setcounter{@exno}{0}  % running exno
+\newcounter{quizno} \setcounter{quizno}{0}
+\renewcommand\thequizno{\alph{quizno}}
+\def\theHquizno{\curr@quiz.\theeqquestionnoi.%
+    \ifcase\@eqquestiondepth\or\or\arabic{eqquestionnoii}.%
+    \or\arabic{eqquestionnoii}.\roman{eqquestionnoiii}.%
+    \else\fi\alph{quizno}}
+\newlength\eqemargin \eqemargin=0pt
+\newcounter{eqpointvalue} \setcounter{eqpointvalue}{0}
+\newlength\eq@tmplength
+\newlength\eqtmplength
+\newcounter{questionno}
+\newcounter{eqquestionnoi}
+\newcounter{eqquestionnoii}
+\newcounter{eqquestionnoiii}
+\newcount\@eqquestiondepth \@eqquestiondepth=0
+\newcounter{grpquestionno}
+\newcounter{partno}
+\newif\ifuseNumForParts\useNumForPartsfalse
+\def\alphaParts{\def\partnoFmt{\alph}\useNumForPartsfalse}\alphaParts
+\def\numberParts{\def\partnoFmt{\arabic}\useNumForPartstrue}
+\renewcommand\thepartno{\partnoFmt{partno}}
+\newtoks\eq@scratchtoks
+\def\theHpartno{partno\the@exno\thepartno}
+\def\verbatimwrite{\@bsphack
+  \let\do\@makeother\dospecials
+  \catcode`\^^M\active \catcode`\^^I=12
+  \def\verbatim@processline{%
+    \immediate\write\verbatim@out
+      {\the\verbatim@line}}%
+  \verbatim@start}
+\def\endverbatimwrite{\@esphack}
+\providecommand\PBS[1]{\let\temp=\\#1\let\\=\temp}
+\newcommand\exlabelformat{{\scshape\exlabel\ \theeqexno.}}
+\newcommand\exlabelformatwp{\exlabelformat}
+\newcommand\exsllabelformat{\protect\textbf{\exlabelsol\ \theeqexno.}}
+\newcommand\exsllabelformatwp
+     {\protect\textbf{\exlabelsol\ \theeqexno(\thepartno)}}
+\newcommand\exrtnlabelformat{$\square$}
+\newcommand\exrtnlabelformatwp{$\square$}
+\newcommand{\belowexskip}[1]{\setlength{\eq@tmplength}{#1}%
+    \edef\eq@exerskip{\noexpand\removelastparskip
+    \noexpand\vskip\the\eq@tmplength\relax\kern0pt}}
+\let\eqexerskip\belowexskip
+\belowexskip{\medskipamount}
+\newcommand{\aboveexskip}[1]{\setlength{\eq@tmplength}{#1}%
+    \edef\eq@priorexskip{\noexpand\vskip\the\eq@tmplength\relax
+        \kern0pt}}
+\let\priorexskip\aboveexskip
+\aboveexskip{\medskipamount}
+\let\eq@postexerciseHook\relax
+\newcommand\belowexsolnskip{\protect\medskip}
+\def\removelastparskip{\ifdim\parskip>0pt\vskip-\parskip\fi}
+\newcommand{\nolinkcolor}[1]{\def\@nolinkcolor{#1}}
+\nolinkcolor{blue}
+\newcommand{\exerSolnsInExtFile}[2][]
+    {\let\exerSolns@ExtFile\eq@YES\gdef\eq@exerSolns@fileName{#2}%
+     \gdef\exerSolns@ReturnPath{#1}}
+\let\exerSolns@ExtFile\eq@NO
+\def\exerSolns@ReturnPath{}
+\let\marginparpriorhook\@empty % used to material before the exercise
+\let\marginparafterhook\@empty % used to material after the exercise
+\let\afterlabelhskip\space
+\let\exersolnheadhook\@empty
+\let\exer@solnheadhook\@empty
+\newcommand{\eqexheader}
+{%
+    \ifeq@nolink   % no link to solution
+        \mbox{\color{\@nolinkcolor}\if\exerstar*\exlabelformatwp\else
+        \exlabelformat\fi}%
+    \else
+        \if\exerSolns@ExtFile\eq@YES
+            \mbox{\href{\eq@exerSolns@fileName\#ex.\the@exno}%
+                {\exlabelformat}}%
+        \else
+            \mbox{\hyperlink{ex.\the@exno}{\exlabelformat}}%
+        \fi
+    \fi
+}
+\def\eqexheader@wrapper{\hypertarget{qex.\the@exno}{\eqexheader}}
+\newcommand{\partsformat}[1]{\def\eq@partsformat{#1}}
+\partsformat{(\hfil\thepartno\hfil)}
+\newcommand{\defaultpartsformat}{%
+    \partsformat{(\hfil\thepartno\hfil)}}
+\let\exlisttabheaderpriorhook\@empty
+\let\exlisttabheaderafterhook\@empty
+\newcommand{\eqexlisttabheader}
+{%
+    \exlisttabheaderpriorhook
+    \ifeq@nolink
+      \color{\@nolinkcolor}\eq@partsformat
+    \else
+      \if\exerSolns@ExtFile\eq@YES
+        \href{\eq@exerSolns@fileName\#ex.\the@exno\thepartno}%
+            {\eq@partsformat}%
+        \else
+            \hyperlink{ex.\the@exno\thepartno}{\eq@partsformat}%
+        \fi
+    \fi
+}
+\newcount\cq@Cnt
+\def\cq@CutName{cq-\the\cq@Cnt.cut}
+\let\cq@star\eq@NO
+\newif\ifcqqs \cqqstrue
+\newif\ifcqIsActive \cqIsActivefalse
+\def\cqQS{\@ifstar{\cqQSV}{\cqQSA}}
+\def\cqQSA#1#2{\ifcqqs#1\else#2\fi}
+\@ifpackageloaded{web}{\@ifundefined{IF@AorBswitch}{%
+    \PackageWarningNoLine{A version of the web package
+    dated\MessageBreak 2016/11/03 or later is required
+    for \string\cqQS}}}{}%
+\@ifundefined{webtempboxi}{\newbox\webtempboxi
+    \newbox\webtempboxii}{}
+\providecommand\SHOWTEMPBOXi{\unhbox\webtempboxi}
+\providecommand\TRUEACTIONi{\aftergroup\SETTEMPBOXii}
+\providecommand\TRUEACTIONia{\aftergroup\SHOWTEMPBOXi}
+\providecommand\FALSEACTIONii{\aftergroup\SETTEMPBOXi}
+\providecommand\FALSEACTIONiia{\aftergroup\SHOWTEMPBOXi}
+\providecommand\SETTEMPBOXi{\IF@AorBswitch\else
+    \afterassignment\TRUEACTIONia\fi
+    \setbox\webtempboxi=\hbox}
+\providecommand\SETTEMPBOXii{\IF@AorBswitch
+    \afterassignment\FALSEACTIONiia\fi
+    \setbox\webtempboxii=\hbox}
+\def\cqQSV{\let\IF@AorBswitch\ifcqqs
+    \IF@AorBswitch
+        \def\eq@next{\afterassignment\TRUEACTIONi\SETTEMPBOXi}\else
+        \def\eq@next{\afterassignment\FALSEACTIONii\SETTEMPBOXii}\fi
+    \eq@next}
+\def\eq@turnMessageOff{\let\save@message\message
+    \let\message\@gobble}
+\def\eq@turnMessageOn{\let\message\save@message}
+\def\eqCQDeclarations{\cqqsfalse\eq@turnMessageOff
+    \includecomment{sPage}\excludecomment{qPage}%
+    \eq@turnMessageOn}
+\def\eqTopOfSolnPage{\cqSAfalse
+    \eqCQDeclarations}
+\eq@turnMessageOff
+\includecomment{qPage}\excludecomment{sPage}
+\eq@turnMessageOn
+\def\writecqQSfalse{\writeToExSolns{\protect\eqTopOfSolnPage}}
+\AtBeginDocument{\writecqQSfalse}
+\newenvironment{cq@CQ}
+{%
+    \global\cqIsActivetrue
+    \global\advance\cq@Cnt1\relax
+    \immediate\openout\CommentStream=\cq@CutName
+    \let\verbatim@out\CommentStream
+    \verbatimwrite
+}{%
+    \endverbatimwrite
+    \immediate\closeout\CommentStream
+    \ifx\cq@star\eq@YES
+        \xdef\cq@INPUTCUT{\noexpand\cqqstrue
+            \noexpand\input{\cq@CutName}\noexpand
+            \def@QuesToSoln}\else
+        \xdef\cq@INPUTCUT{\noexpand\cqqstrue
+            \noexpand\input{\cq@CutName}\noexpand
+            \p@ssQuesToSoln}\fi
+    \aftergroup\cq@INPUTCUT
+}
+\newenvironment{cqs@CQ}{\let\cq@star\eq@YES\cq@CQ}{\endcq@CQ}
+\def\declCQQuesStr#1{\def\cqQStr{#1}}
+\declCQQuesStr{Question}
+\def\declCQSolStr#1{\def\cqSStr{#1}}
+\declCQSolStr{Solution}
+\newcommand\declCQPre[1]{\def\cq@Pre{#1}}
+\declCQPre{\emph{\cqQStr}:\space}
+\newcommand\declCQPost[1]{\def\cq@Post{#1}}
+\declCQPost{\par\medskip\noindent\emph{\cqSStr}:\space\ignorespaces}
+\def\cqFmtPasteQues#1{\cq@Pre\input{#1}\cq@Post}
+\def\p@ssQuesToSoln{\ifeq@hidesolution\else
+    \global\terminexchangedtrue % dps cq
+    \writeToExSolns{\protect
+        \decleqterminex{\protect\cqFmtPasteQues{\cq@CutName}}}\fi}
+\def\declCopyQues#1{\def\cqCopiedQues{#1}}
+\def\def@QuesToSoln{\restoreNormalSolns
+    \global\terminexchangedfalse % dps cq
+    \ifeq@hidesolution\else\writeToExSolns{\protect
+        \declCopyQues{\protect\input{\cq@CutName}}}\fi}
+\newcommand\restoreNormalSolns{%
+    \writeToExSolns{\protect\decleqterminex{\protect\eqterminexDEF}}}
+\newcommand{\eq@CommonCmd}[1]{\def\eq@@CommonCmd{#1}#1}
+\let\eq@@CommonCmd\@empty
+\newcommand\gExCommonCmd[1]{\gdef\gEx@CommonCmd{\eq@CommonCmd{#1}}}
+\let\gEx@CommonCmd\@empty
+\let\endexerhook\@empty
+\newenvironment{exercise}
+{%
+    \let\cq\cq@CQ\let\endcq\endcq@CQ
+    \csarg\let{cq*}\cqs@CQ
+    \csarg\let{endcq*}\endcqs@CQ
+    \par\removelastskip\eq@priorexskip\noindent
+    \let\eqCommonCmd\eq@CommonCmd
+    \def\eq@argi{eqexno}%% use eqexno counter
+    \if\eq@exerstarEnv*\def\exerstar{*}\else\def\exerstar{x}\fi
+    \def\currhideopt{x}%
+    \@ifnextchar[{\exercise@}%
+        {\if\exerstar*\def\eq@next{\@exercise}\else
+         \def\eq@next{\exercise@@}\fi\eq@next}%
+}{\eq@postexerciseHook\endexerhook\par
+    \global\eq@exerciseheadingtrue\removelastskip\eq@exerskip}
+\def\exercise@[#1]{\edef\eq@arg{#1}%
+    \if\eq@arg h\def\currhideopt{h}%
+        \eq@hidesolutiontrue\eq@nolinktrue%
+        \ifeq@globalshowsolutions
+            \eq@hidesolutionfalse\eq@nolinkfalse\fi
+        \def\eq@next{\@exercise}%   h, no *, no counter
+    \else
+        \if\eq@arg H%
+            \edef\currhideopt{\Hidesymbol}%
+            \eq@hidesolutiontrue\eq@nolinktrue%
+            \ifeq@globalshowsolutions
+                \eq@hidesolutionfalse\eq@nolinkfalse
+            \fi
+            \def\eq@next{\@exercise}%   H, no *, no counter
+        \else
+            \def\currhideopt{x}%
+            \ifx\eq@arg\@empty\else\def\eq@argi{#1}\fi
+            \if\exerstar*\def\eq@next{\@exercise}\else
+            \def\eq@next{\exercise@@}\fi
+        \fi
+    \fi
+\eq@next}
+\def\exercise@@{\@ifstar{\def\exerstar{*}\@exercise}{\exercise@@@}}
+\def\exercise@@@{\@ifnextchar[{\exercise@@@@}{\@exercise}}
+\def\exercise@@@@[#1]{\edef\eq@arg{#1}%
+    \if\eq@arg h\def\currhideopt{h}%
+        \eq@hidesolutiontrue\eq@nolinktrue
+        \ifeq@globalshowsolutions
+            \eq@hidesolutionfalse\eq@nolinkfalse\fi
+        \def\eq@next{\@exercise}%   h, no *, no counter
+    \else
+        \if\eq@arg H\edef\currhideopt{\Hidesymbol}%
+            \eq@hidesolutiontrue\eq@nolinktrue%
+            \def\eq@next{\@exercise}%   h, no *, no counter
+        \else
+            \def\currhideopt{x}%
+            \PackageWarning{exerquiz}{The option #1 is not recognized}
+            \let\eq@next\relax
+        \fi
+    \fi
+\eq@next}
+\newif\ifeq@exerciseheading \eq@exerciseheadingtrue
+\let\prior@exerSolnHeaderHook\@empty
+\newcommand\exerSolnHeader[3]{%
+    \prior@exerSolnHeaderHook
+    \ifeqforpaper\else\webnewpage\fi\markright{#1}%\par\noindent%
+    \noindent\hypertarget{#2}{#3}\relax
+    \solnhspace
+}
+\let\solnItemMngt\relax
+\let\eqEXt\@gobbletwo
+\let\endeqEXt\relax
+\let\eqExtArg\@empty
+\let\eqFilterArg\@empty
+\let\eqExerSolnHeader\@empty
+\let\solutionparshape\@empty
+\def\eq@pslnaindnt{0pt}
+\let\eq@setPrbSolnAftrIndnt\relax
+\newcommand{\setPrbSolnAftrIndent}[1]{\ifdim#1=0pt
+    \def\eq@pslnaindnt{0pt}\let\eq@setPrbSolnAftrIndnt\relax\else
+    \edef\eq@pslnaindnt{#1}\edef\eq@setPrbSolnAftrIndnt{%
+    \expandafter\noexpand\expandafter\parindent#1\noexpand\relax}\fi
+}
+\newif\if@restorejustify \@restorejustifyfalse
+\newcommand\restoreJustifyOn{\@restorejustifytrue}
+\newcommand\restoreJustifyOff{\@restorejustifyfalse}
+\def\restorejustify{\if@restorejustify
+    \@rightskip\z@skip \rightskip\@rightskip
+    \leftskip\z@skip \let\\\@normalcr\fi}
+\def\@exercise{%
+    \global\let\solutionparshape\@empty
+    \let\verbatim@out=\ex@solns
+    \if\eq@argi0\else\refstepcounter{\eq@argi}\fi\stepcounter{@exno}%
+    \if\exerstar*% if exercise with parts
+        \eq@nolinktrue
+    \else
+        \if\currhideopt H%
+        \else
+            \ifeq@solutionsafter
+                \eq@nolinktrue  % no link to solution
+            \else
+                \eq@ckglobalhide %
+                \ifeq@hidesolution\else
+                   \global\let\eqExerSolnHeader\eq@@writeexheader
+                \fi
+            \fi
+        \fi
+    \fi
+    \ifvmode\ifdim\lastskip>\z@
+        \vskip-\lastskip
+    \fi\fi
+    \if\exerstar*%
+        \let\solution\solnexer@woparts
+        \let\endsolution\endsolnexer@woparts
+        \let\parts\exercise@parts
+        \let\endparts\endexercise@parts
+    \else
+        \let\solution\solnexer@woparts
+        \let\endsolution\endsolnexer@woparts
+        \let\parts\relax
+        \let\endparts\relax
+        \if\Hidesymbol h\eq@nolinkfalse\ifeq@solutionsafter
+            \eq@nolinktrue\fi\fi
+    \fi
+    \eq@initializeContAnnot
+    \ifeq@exerciseheading
+    \prior@questionsHook\marginparpriorhook\noindent\eqexheader@wrapper
+    \afterlabelhskip\marginparafterhook\gEx@CommonCmd
+    \eq@setPrbSolnAftrIndnt\ignorespaces\fi
+}
+\newif\ifterminexchanged \terminexchangedfalse % dps cq
+\newcommand\decleqterminex[1]{\def\eqterminex{#1}}
+\def\eqterminexDEF{\relax\ignorespaces}
+\decleqterminex{\eqterminexDEF}
+\newif\ifmakeExSlLocal \makeExSlLocalfalse
+\def\makeExSolnsLocalOn{\makeExSlLocaltrue}
+\def\makeExSolnsLocalOff{\makeExSlLocalfalse}
+\def\eqExerSolnHeaderSngl{%
+    \ifmakeExSlLocal\protect\begingroup^^J\fi
+    \protect\eqEXt{\eqExtArg}{\eqFilterArg}\protect
+    \solnItemMngt\protect\exerSolnHeader{\exsecrunhead}{ex.\the@exno}%
+    {\exsllabelformat}\exer@solnheadhook
+    \exersolnheadhook\protect\eqterminex
+}
+\def\eq@@writeexheader{\set@display@protect
+    \immediate\write\verbatim@out{\eqExerSolnHeaderSngl}%
+    \set@typeset@protect
+}
+\def\eqExerSolnHeaderList{%
+    \ifmakeExSlLocal\protect\begingroup^^J\fi
+    \protect\eqEXt{\eqExtArg}{\eqFilterArg}\protect
+    \solnItemMngt\protect\exerSolnHeader{\exsecrunhead}%
+    {ex.\the@exno\thepartno}{\exsllabelformatwp}%
+    \exer@solnheadhook\exersolnheadhook\protect\eqterminex
+}
+\def\eq@@writeexheaderlist{\set@display@protect
+    \immediate\write\verbatim@out{\eqExerSolnHeaderList}%
+    \set@typeset@protect
+}
+\long\def\setsolnspace#1{\def\newsolnspace{#1}%
+    \let\solnspace\newsolnspace}
+\newif\ifeq@ckSolnVspace \eq@ckSolnVspacetrue
+\def\ckSolnOpt{\global\eq@ckSolnVspacetrue}
+\def\noSolnOpt{\global\eq@ckSolnVspacefalse}
+\let\solnhspace\space
+\let\solnspace\space
+\let\exsolnonceonlytophook\relax
+\def\solnexer@woparts{%
+  \ifanswerkey\ifeqe@flextended\ifcont@nnot
+  \ifx\solutionparshape\@empty\else % dpsj8
+    \pushEnvir
+      \everypar{}\if@eqalignfilllinestoleft\else
+      \parshape=1 \leadinIndent \linewidth\fi
+    \popEnvir
+  \fi\fi\fi\fi\def\bLeaveVspace{x}% = no vertical space added
+  \exsolnonceonlytophook % dps27
+  \global\let\exsolnonceonlytophook\relax
+  \@ifundefined{KV@eqefillLines@bgonly}{}
+    {\ifKV@eqefillLines@bgonly\ifvmode\else
+      \par\leavevmode\strut\fi\fi
+    \ifKV@eqefillLines@outlineonly\leavevmode\strut\fi}%
+    \ifeq@ckSolnVspace
+        \def\eq@next{\@ifnextchar[{\solnexer@@woparts}%]
+        {\solnexer@@woparts[\null]}}\else
+        \def\eq@next{\solnexer@@woparts[\null]}\fi
+    \eq@next
+}
+\let\eqPriorVspace\@gobble
+\newif\if@eqlinedfiller \@eqlinedfillerfalse
+\newcommand{\vspaceFiller}[1]{\vfill}
+\newcommand{\vspaceFillerDefault}[1]{\vfill}
+\def\eqWriteLine{\hfill}
+\def\eq@linesXPgs{%
+    \begingroup\offinterlineskip\parskip0pt
+    \@tempcnta=0
+    \@whilenum\@tempcnta<\soln@keys@nLines\relax\do
+    {\vskip0pt\penalty-50\vglue\wlVspace\eqWriteLine
+        \advance\@tempcnta1\relax}\par\endgroup
+}
+\let\leavevspace\relax % dpsj5
+\newcommand{\vspaceFmt}[1]{%
+  \ifx\solutionparshape\@empty\else
+      \advance\linewidth-\leadinIndentPrtSep\fi
+    \ifdim\sameVspace>0pt
+      \let\bLeaveVspace\@empty
+      \def\leavevspace{%
+        \ifx\eq@insertverticalspace\eq@YES\par\eq@quessolskip
+          \eqPriorVspace{#1}{\nobreak\noindent
+          \if@eqlinedfiller
+            \ifx\soln@keys@nLines\@empty
+              \def\eq@lines@next{\vspaceFiller{#1}}\else
+                \def\eq@lines@next{\eq@linesXPgs}\fi
+          \else
+            \def\eq@lines@next{\parbox[b][#1][t]{\linewidth}
+              {\vspaceFiller{#1}}}%
+          \fi\eq@lines@next}%
+        \fi
+      }\expandafter\leavevspace % dpsj6
+  \fi
+}
+\define@key{soln@keys}{nLines}[]{\def\soln@keys@nLines{#1}}
+\let\soln@keys@nLines\@empty
+\def\eqKV@errx#1{\xdef\XKV@rm{\@tempa}}
+\def\eqSolnForEqexam#1{%
+    \let\soln@keys@nLines\@empty
+    \setkeys*{soln@keys}{#1}%
+    \ifx\soln@keys@nLines\@empty
+        \ifx\minVspacet@bs\@empty\xdef\sameVspace{\XKV@rm}\else
+        \xdef\sameVspace{\minVspacet@bs}\fi
+    \else
+        \@tempdima\wlVspace
+        \@tempdima=\soln@keys@nLines\@tempdima
+        \xdef\sameVspace{\the\@tempdima}%
+       \ifx\XKV@rm\@empty\else
+            \if@equsedim\let\soln@keys@nLines\@empty
+                \xdef\sameVspace{\XKV@rm}\fi
+        \fi
+    \fi
+    \ifx\sameVspace\@empty\gdef\sameVspace{0pt}\fi
+}
+\def\solnexer@@woparts[#1]{%
+    \ifcqIsActive\else\ifterminexchanged
+        \restoreNormalSolns\fi\fi % dps cq
+    \global\cqIsActivefalse
+    \def\eq@argi{#1}\def\eq@null{\null}%
+    \ifx\eq@argi\@empty\gdef\sameVspace{0pt}\else
+        \ifx\eq@argi\eq@null\gdef\sameVspace{0pt}\else
+        \@ifundefined{PointsOnLeft}{%
+            \let\eqKV@errx@SAVE\KV@errx
+            \let\KV@errx\eqKV@errx\let\XKV@rm\@empty
+            \edef\temp@exp{\noexpand\setkeys*{soln@keys}{#1}}\temp@exp
+            \let\KV@errx\eqKV@errx@SAVE
+            \ifx\soln@keys@nLines\@empty\else
+            \PackageInfo{exerquiz}{%
+            nLines key detected in solution environment,\MessageBreak
+            is not not recognized without eqexam,\MessageBreak
+            will remove it}%
+            \let\soln@keys@nLines\@empty\fi
+            \xdef\sameVspace{\XKV@rm}%
+        }{\eqSolnForEqexam{#1}}%
+    \fi\fi
+    \solnexer@@@woparts
+}
+\def\solnsafterSkip#1{\setlength{\@tempdima}{#1}%
+    \edef\solnsafterSkipAmt{\the\@tempdima}%
+    \def\solutionsafterSkip{\vskip\solnsafterSkipAmt\relax}}
+\solnsafterSkip{\smallskipamount}
+\def\@solnafterSkipOnce#1{\setlength{\@tempdima}{#1}%
+    \xdef\@solnafterSkipOnceAmt{\the\@tempdima}}%
+\def\@@solnafterSkipOnce{\vskip\@solnafterSkipOnceAmt\relax %dpsj3
+  \gdef\@solnafterSkipOnceAmt{0pt}}
+\def\@solnafterSkipOnceAmt{0pt}
+\def\quessolSkip#1{\setlength{\@tempdima}{#1}%
+  \edef\eq@quessolskip{\noexpand\vskip\the\@tempdima\relax}}
+\def\eq@quessolskip{\vskip\smallskipamount}
+\def\eqe@debugVertSkip#1{}
+\def\eqe@showEndHere#1{#1}
+\def\eqe@setStartSolns{%
+    \xdef\eq@startSoln{\the\pagetotal}%
+    \eqe@debugVertSkip{\marginpar{\smash{b[\sameVspace]}}}%
+}
+\let\eqSavedComment\comment
+\let\eqSavedEndCommet\endcomment
+\def\setTabulrSolnEnv{%
+    \@ifundefined{@listii@SAVE}{\global\let\@listii@SAVE\@listii}{}%
+    \expandafter\def\expandafter\@listii\expandafter{\@listii@SAVE
+      \leftmargin\leftmarginii \labelwidth\leftmarginii
+      \advance\labelwidth-\labelsep}%
+    \def\everyparShape{\everypar{\parshape \@ne 0pt \linewidth}}%
+    \reset@doendpe{\parshape \@ne 0pt \linewidth}%
+    \parshape \@ne 0pt \linewidth
+    \everyparShape
+}
+\newif\ifthereissolution
+\let\priorexsolafterList\@empty
+\let\priorexsolafterTab\@empty
+\let\priorexsolafterSngl\@empty
+\def\eq@Hid{H}\def\eq@hid{h}
+\def\solutionafterExCmds#1{\def\@rgi{#1}\ifx\@rgi\@empty
+  \let\eqSolnExCmds\relax\else
+  \def\eqSolnExCmds{#1}\fi}
+\let\eqSolnExCmds\relax
+\def\eq@b@ddCodeSpecialDef#1{#1}% dpsj4
+\let\eq@b@ddCodeSpecial\eq@b@ddCodeSpecialDef % dpsj4
+\def\solnexer@@@woparts{\ifeq@solutionsafter\else
+    \expandafter\begingroup\fi %dpsj10
+  \global\thereissolutiontrue
+  \global\let\procsoln\relax    % dpsj6
+  \global\let\endprocsoln\relax % dpsj6
+  \def\exerwparts@cols{0}%
+  \let\verbatim@out\ex@solns
+  \if\currhideopt\eq@Hid
+    \let\minVspacet@bs\@empty
+    \let\procsoln\eqSavedComment
+    \let\endprocsoln\eqSavedEndCommet
+    \def\eq@next{\procsoln}%
+  \else
+    \eq@ckglobalhide
+    \ifeq@hidesolution
+      \let\procsoln\eqSavedComment
+      \let\endprocsoln\eqSavedEndCommet
+    \else
+      \ifeq@solutionsafter\else
+          \ifx\eq@@CommonCmd\@empty\else
+              \set@display@protect
+              \immediate\write\verbatim@out{\eq@@CommonCmd}%
+              \set@typeset@protect
+          \fi
+      \fi
+        \let\procsoln\verbatimwrite
+        \let\endprocsoln\endverbatimwrite
+    \fi
+    \def\eq@next{%
+      \ifeq@solutionsafter
+        \let\procsoln\relax % dpsj6
+        \let\endprocsoln\relax
+        \removelastskip\removelastparskip
+        \cqSAtrue\eqCQDeclarations
+        \declCopyQues{\input{\cq@CutName}}%
+        \ifx\exsolafter\@empty
+          \ifdim\sameVspace=0pt\eqe@setStartSolns
+          \else
+            \solutionsafterSkip
+            \@@solnafterSkipOnce % dpsj3
+            \eqe@setStartSolns
+          \fi
+        \else\par\kern0pt
+          \solutionsafterSkip
+          \@@solnafterSkipOnce % dpsj3
+          \noindent\strut\eqe@setStartSolns
+        \fi
+        \parskip\eqeques@parsep
+        \ifx\endparts\endexercise@parts@tabular
+          \eq@setPrbSolnAftrIndnt
+          \restorejustify
+        \fi
+        \ifx\endparts\endexercise@parts@tabular\expandafter
+          \priorexsolafterTab\else
+        \ifx\endparts\endexercise@parts@list\expandafter
+          \priorexsolafterList\else\expandafter
+          \priorexsolafterSngl\fi\fi
+        \exsolafter\space\ignorespaces
+        \solutionparshape
+      \else
+        \eqExerSolnHeader
+        \global\let\eqExerSolnHeader\@empty
+        \global\therearesolutionstrue\expandafter\procsoln
+      \fi
+    }%
+  \fi
+  \eq@b@ddCodeSpecial{\eq@next}%
+}% dpsj4
+\let\endsolnexerhook\@empty
+\let\pkg@endsolnexerhook\@empty
+\let\endsolnexerhookaux\@empty
+\def\eq@fititin#1{\noindent\unskip\nobreak\hfill\penalty100
+    \hskip1em\hbox{}\nobreak\hfill#1}%
+\let\eqfititin\eq@fititin
+\def\ReturnTo#1#2{\eq@fititin{\hyperlink{#1}{#2}}}
+\def\xReturnTo#1#2{\eq@fititin{\href{#1}{#2}}}
+\newcommand\eqExerSolnTrailer{%
+    \if\exerSolns@ExtFile\eq@YES\protect\xReturnTo
+        {\exerSolns@ReturnPath\jobname\#qex.\the@exno}%
+    \else\protect\ReturnTo{qex.\the@exno}\fi
+    {\protect\mbox{\if\exerstar*\exrtnlabelformatwp\else
+        \exrtnlabelformat\fi}}%
+    \protect\endeqEXt\ifeqforpaper\protect\par{\belowexsolnskip}\fi^^J%
+    \ifmakeExSlLocal\protect\endgroup^^J\fi
+}
+\let\eq@e@ddCodeSpecialDef\relax % dpsj4
+\let\eq@e@ddCodeSpecial\eq@e@ddCodeSpecialDef % dpsj6
+\let\kdvsp@Restore\relax % dpsj20
+\def\endsolnexer@woparts{\endprocsoln\eq@e@ddCodeSpecial
+  \pkg@endsolnexerhook % djsj8 moved from the end of the macro
+  \ifeq@solutionsafter\else
+    \expandafter\endgroup\fi % from \begingroup at \solnexer@@@woparts
+  \global\let\exsolnonceonlytophook\relax
+  \ifx\sameVspace\@empty\gdef\sameVspace{0pt}\fi % dpsj5
+  \ifvspacewithsolns\vspaceFmt{\sameVspace}\else
+  \ifeq@nosolutions\ifeq@solutionsafter\else
+    \vspaceFmt{\sameVspace}\fi\fi\fi
+  \if\currhideopt H%
+  \ifkeepdeclaredvspacing\vskip\sameVspace\fi
+  \else
+    \ifeq@solutionsafter
+      \ifx\isitleadin\eq@YES\parshape=0 \fi % dpsj9
+      \if\exerstar*%
+      \eq@fititin{\mbox{\exrtnlabelformatwp}}\else
+      \eq@fititin{\mbox{\exrtnlabelformat}}\fi
+      \ifx\istabularexer\eq@YES\unskip\kern0pt\else\par\fi % dpsj6
+      \ifx\minVspacet@bs\@empty
+        \ifkeepdeclaredvspacing
+          \@tempdima\pagetotal
+          \advance\@tempdima-\eq@startSoln
+          \@tempdimb\sameVspace\relax
+          \ifdim\@tempdimb>1sp\relax
+            \advance\@tempdimb-\@tempdima
+            \ifdim\@tempdimb>0pt\vglue\@tempdimb\kern0pt
+              \let\eqe@showEndHere\@gobble
+              \edef\tmp@exp{\noexpand\marginpar{%
+                \noexpand\smash{e: adj \the\@tempdimb}}}%
+                \eqe@debugVertSkip{\tmp@exp}%
+            \fi
+          \fi
+        \fi
+        \eqe@showEndHere{\eqe@debugVertSkip{\marginpar{\smash{e}}}}%
+        \fi
+      \else
+        \eq@ckglobalhide
+        \ifeq@hidesolution\else
+          \endsolnexerhookaux
+          \let\verbatim@out\ex@solns
+          \set@display@protect
+          \immediate\write\verbatim@out{\eqExerSolnTrailer}%
+          \set@typeset@protect
+        \fi
+      \fi
+    \fi
+    \kdvsp@Restore % dpsj20
+    \endsolnexerhook\penalty0\relax}
+\let\eq@exerstarEnv\relax
+\newenvironment{exercise*}{\def\eq@exerstarEnv{*}\exercise}
+{\endexercise}
+\def\exerwparts@cols{0}
+\let\topofpartshook\relax
+\let\@listiiredefined\eq@NO
+\let\itsExerParts\eq@NO
+\newif\if@tableadinitem\@tableadinitemfalse
+\newcommand{\tableadin@external}{\PackageError{exerquiz/eqexam}
+    {The \string\tableadin\space command is designed\MessageBreak
+     for the problem* environment of eqexam}{Use \string\tableadin\space
+     in the problem* environment of eqexam.}%
+}
+\let\tableadin\tableadin@external
+\newcommand{\eq@tableadinparts}{\item\relax
+    \PackageError{exerquiz/eqexam}{The \string\tableadin\space
+        command is not allowed in the\MessageBreak
+        parts environment}{Use \string\tableadin\space
+        in the problem* environment of eqexam.}%
+}
+\let\istabularexer\eq@NO
+\def\exercise@parts{\let\rlspar\relax
+  \ifx\solutionparshape\@empty
+    \let\isitleadin\eq@NO
+    \if@tableadinitem\let\rlspar\@gobbletwo\fi
+  \else\let\isitleadin\eq@YES\fi
+  \rlspar\removelastskip\par
+  \if\isitleadin\eq@YES
+    \def\eqparts@topsep{0pt}%
+    \vskip\eqparts@itemsep\relax\fi
+  \topofpartshook
+  \let\itsExerParts\eq@YES
+  \global\let\@listiiredefined\eq@NO
+  \def\exerwparts@cols{0}\@ifnextchar[%
+  {%
+   \if@tableadinitem\else\removelastparskip\fi
+   \let\endparts\endexercise@parts@tabular\exercise@parts@tabular@}%
+  {\let\endparts\endexercise@parts@list\exercise@parts@list}}
+\def\eq@extralabelsep{0pt}
+\newcommand{\setPartsWidth}[1]{\def\parts@indent{\normalfont#1}%
+    \bgroup\settowidth{\eq@tmpdima}{\parts@indent}%
+    \xdef\widthOfParts{\the\eq@tmpdima}\egroup}
+\setPartsWidth{(d)}
+\def\eqe@prtsepPrb{\ }
+\providecommand{\prbPrtsep}[1]{\def\eqe@prtsepPrb{#1}}
+\providecommand{\exPrtsep}[1]{\def\eqe@prtsepPrb{#1}}
+\providecommand{\eqequesparsep}[1]{\def\eqeques@parsep{#1}}
+\eqequesparsep{0pt}
+\let\prior@parts@hook\@empty
+\let\post@parts@hook\@empty
+\let\abovepartshook\@empty
+\let\belowpartshook\@empty
+\let\eqp@rtc@lcm@rk\relax
+\let\eq@insertContAnnot\relax
+\def\eq@item@common{\eq@insertContAnnot\eqp@rtc@lcm@rk
+    \def\currhideopt{x}\eq@hidesolutionfalse\eq@nolinkfalse
+    \@ifnextchar[{\@ckhide}{\eq@item}}
+\newcommand{\partsitemsep}[1]{{%
+    \setlength{\@tempdima}{#1}%
+    \xdef\eqparts@itemsep{\the\@tempdima}}}
+\let\eqpartsitemsep\partsitemsep
+\def\eqparts@itemsep{0pt}
+\newcommand\partsparsep[1]{{%
+    \setlength{\@tempdima}{#1}%
+    \xdef\eqparts@parsep{\the\@tempdima}}}
+\def\eqparts@parsep{0pt}
+\newcommand\partstopsep[1]{{%
+    \setlength{\@tempdima}{#1}%
+    \xdef\eqparts@topsep{\the\@tempdima}}}
+\def\eqparts@topsep{3pt}
+\newcommand{\leadinitem@external}{\PackageError{exerquiz/eqexam}
+    {The \string\leadinitem\space command is designed to be\MessageBreak
+     the first item in the problem*\MessageBreak
+     environment above the parts environment}
+     {Use \string\leadinitem\space in the problem* environment.}%
+}
+\let\leadinitem\leadinitem@external
+\let\itsforleadinitem\eq@NO
+\newcommand{\eq@leadinitemparts}{\item\relax
+    \PackageError{exerquiz/eqexam}{The \string\leadinitem\space
+        command is not allowed in the\MessageBreak
+        parts environment}
+     {Use \string\leadinitem\space in the problem* environment.}%
+}
+\def\eq@handleOptArg[#1]{\def\eq@optArg{[#1]}\eq@handleOptArgi}
+\def\eq@handleOptArgi{\expandafter
+    \eq@item@latex\eq@optArg\exlisttabheaderafterhook}
+\newif\ifwithinparts
+\let\ex@listtabheader@fterhook\@empty
+\newenvironment{exercise@parts@list}{%
+    \settowidth{\eq@tmplength}{\parts@indent}%
+    \edef\widthOfParts{\the\eq@tmplength}%
+    \eq@initializeContAnnot\eq@nolinkfalse\prior@parts@hook
+    \abovepartshook\list{\normalfont
+    \if\Hidesymbol h\eq@nolinkfalse\ifeq@solutionsafter
+        \eq@nolinktrue\fi\fi
+    \if\currhideopt H%
+    \else
+        \ifeq@solutionsafter
+            \eq@nolinktrue  % no link to solution
+        \else
+            \ifeq@nosolutions
+                \eq@nolinktrue  % no link to solution
+            \else
+                \eq@ckglobalhide
+                \ifeq@hidesolution\eq@nolinktrue\else
+                    \global\let\eqExerSolnHeader\eq@@writeexheaderlist
+                \fi
+            \fi
+        \fi
+    \fi
+    \makebox[\widthOfParts][r]{\eqexlisttabheader}%
+}{%
+    \usecounter{partno}%
+    \if\isitleadin\eq@YES
+        \settowidth{\eq@tmplength}{\parts@indent\eqe@prtsepPrb}%
+        \xdef\prtsIndntSep{\the\eq@tmplength}%
+        \if\itsforleadinitem\eqe@YES\setcounter{partno}{\fliPartNo}\else
+        \setcounter{partno}{1}\fi\fi
+    \let\leadinitem\eq@leadinitemparts
+    \let\tableadin\eq@tableadinparts
+    \global\let\solutionparshape\@empty
+    \setlength{\topsep}{\eqparts@topsep}%
+    \setlength{\parskip}{0pt}%
+    \setlength{\partopsep}{0pt plus 1pt minus 1pt}%
+    \ifdim\eqeques@parsep=0pt
+        \setlength{\parsep}{\eqparts@parsep}%
+    \else
+        \setlength{\parsep}{\eqeques@parsep}%
+    \fi
+    \setlength{\itemsep}{\eqparts@itemsep-\parsep}%
+    \setlength{\itemindent}{0pt}%
+    \setlength{\listparindent}{\parindent}%
+    \settowidth{\labelsep}{\normalfont\eqe@prtsepPrb}%
+    \addtolength{\labelsep}{\eq@extralabelsep}%
+    \settowidth{\labelwidth}{\parts@indent}%
+    \setlength{\leftmargin}{\labelwidth}%
+    \addtolength{\leftmargin}{\labelsep}%
+    \let\eq@item@latex\item
+    \def\eq@item{\@ifnextchar[{\eq@handleOptArg}
+        {\eq@item@latex\ex@listtabheader@fterhook
+            \exlisttabheaderafterhook}}%
+    \def\eqthisenv{parts}\withinpartstrue
+    \def\item{\ifx\@currenvir\eqthisenv
+        \def\eq@next{\eq@item@common}\else
+        \def\eq@next{\eq@item}\fi
+    \eq@next}%
+}}{\endlist\global\let\leadinitem\leadinitem@external
+    \post@parts@hook\belowpartshook}
+\def\eq@initializeContAnnot{\@ifundefined{eqequestions}
+    {\global\let\eqeCurrProb\relax}
+    {\xdef\eqeCurrProb{\theeqquestionnoi}}%
+    \xdef\eq@currProbStartPage{\arabic{page}}%
+}
+\define@key{tabp@rts}{nCols}{\def\exerwparts@cols{#1}}
+\define@key{tabp@rts}{minVspace}{\def\minVspacet@bs{#1}}
+\let\minVspacet@bs\@empty
+\def\minVspacetabs#1{\def\minVspacet@bs{#1}}
+\def\priorexsolafterTab{\ifkeepdeclaredvspacing
+    \ifeq@solutionsafter\ifx\minVspacet@bs\@empty\else
+        \priorexsolafterTab@cont\fi\fi\fi}
+\def\priorexsolafterTab@cont{\let\exsolafter@save\exsolafter
+    \let\exsolafter\@empty
+    \makebox[0pt][r]{\parbox[t][\minVspacet@bs][t]{0pt}
+        {\strut\hfill\vfill\strut}}%
+    \minipage[t]{\linewidth}\exsolafter@save}
+\def\pkg@endsolnexerhook{\ifkeepdeclaredvspacing
+    \ifeq@solutionsafter\ifx\minVspacet@bs\@empty\else
+        \endminipage\fi\fi\fi}
+\def\exercise@parts@tabular@[#1]{%
+  \inittabMark
+  \let\eq@insertContAnnot\relax
+  \let\exerwparts@cols\@empty
+  \setkeys*{tabp@rts}{#1}\ifx\exerwparts@cols\@empty
+    \edef\exerwparts@cols{\XKV@rm}\fi
+  \ifx\minVspacet@bs\@empty\keepdeclaredvspacingfalse\fi
+  \let\istabularexer\eq@YES
+  \@tempcnta\exerwparts@cols\relax
+  \ifnum\@tempcnta<2\relax
+        \PackageError{exerquiz}{%
+        The number of columns for parts\MessageBreak
+        needs to be an integer greater than 1}
+        {Enter an integer, 2 or larger}\fi
+  \exercise@parts@tabular}
+\newcount\eq@extabColCnt
+\def\autotabOn{\let\eq@tabMarkChk\relax%
+    \PackageInfo{exerquiz/eqexam}{Executing \string\autotabOn}}
+\def\autotabOff{\let\eq@tabMarkChk\@gobble
+    \PackageInfo{exerquiz/eqexam}{Executing \string\autotabOff}}
+\autotabOff
+\def\inittabMark{\global\eq@extabColCnt=0 }
+\def\resettabMark{\global\eq@extabColCnt=1 }
+\newcommand\autotabnewline[1][\eqparts@tabrowsep]{%
+    \ifnum\exerwparts@cols>0\relax
+    \ifx\eq@tabMarkChk\@gobble
+        \def\eq@atnext{\expandafter
+            \tabularnewline\expandafter[#1]}\else
+        \def\eq@atnext{\resettabMark\tabularnewline
+            \noalign{\expandafter\kern#1}}\fi
+    \expandafter\eq@atnext\fi}
+\def\eq@tabMark{%
+    \ifnum\eq@extabColCnt=0\relax
+        \global\advance\eq@extabColCnt1\relax
+        \let\eq@next\relax
+    \else
+        \ifnum\eq@extabColCnt=1\relax
+            \let\eq@next\relax
+        \else
+            \ifnum\eq@extabColCnt>\exerwparts@cols
+                \let\eq@next\autotabnewline
+            \else\def\eq@next{&}\fi
+        \fi
+    \fi
+    \eq@next
+    \global\advance\eq@extabColCnt1\relax
+}
+\newcommand\partstabcolsep[1]{\def\eq@partstabcolsep{#1}}
+\partstabcolsep{1.5pt}
+\newcommand\partstabtopsep[1]{\def\eq@partstabtopsep{#1}}
+\partstabtopsep{3pt}
+\def\eq@vpartstabtopsep{\vskip\eq@partstabtopsep\relax}
+\newcommand\partstabrowsep[1]{\setlength{\@tempdima}{#1}%
+    \edef\eqparts@tabrowsep{\the\@tempdima}}
+\partstabrowsep{0pt}
+\newenvironment{exercise@parts@tabular}{%
+    \setcounter{partno}{0}%
+    \def\tablrIndent{\hglue\prtsIndntSep\relax}%
+    \if\isitleadin\eq@YES
+        \if$\the\everypar$\let\tablrIndent\relax\fi
+        \setcounter{partno}{1}\fi
+    \let\leadinitem\eq@leadinitemparts
+    \let\tableadin\eq@tableadinparts
+    \global\let\solutionparshape\@empty
+    \settowidth{\eq@tmplength}{\parts@indent\eqe@prtsepPrb}%
+    \xdef\prtsIndntSep{\the\eq@tmplength}%
+    \sbox{\eq@tmpbox}{\parts@indent}%
+    \let\eq@item@latex\item
+    \let\eq@item\item@part@tabular
+    \def\eqthisenv{parts}\withinpartstrue
+    \def\item{\ifx\@currenvir\eqthisenv
+        \def\eq@next{\eq@tabMarkChk\eq@tabMark\eq@item@common}\else
+        \def\eq@next{\eq@item@latex}\fi
+    \eq@next}\eq@nolinkfalse
+    \@ifundefined{@xtabularcr}{\let\@xarraycr\eq@xtabularcr}
+    {\let\@xtabularcr\eq@xtabularcr}%
+    \eq@tmpdima=\linewidth
+    \advance\eq@tmpdima-\prtsIndntSep\relax
+    \@tempcnta\exerwparts@cols\relax
+    \advance\@tempcnta-1\relax
+    \multiply\@tempcnta2\relax
+    \@tempdima\prtsIndntSep\relax
+    \divide\@tempdima 2\relax
+    \edef\halfWidth{\the\@tempdima}%
+    \advance\@tempdima\eq@partstabcolsep\relax
+    \tabcolsep\@tempdima
+    \multiply\@tempdima\@tempcnta
+    \advance\eq@tmpdima-\@tempdima
+    \divide\eq@tmpdima by\exerwparts@cols\relax %dpsj3
+    \edef\widthOfPartsBox{\the\eq@tmpdima}% dpsj2
+    \if@tableadinitem\else\vskip\eq@partstabtopsep\relax\fi
+    \noindent\normalbaselines\kern0pt
+    \prior@parts@hook\abovepartshook
+    \tablrIndent\tabular[t]{@{}*{\exerwparts@cols}{>{\setTabulrSolnEnv
+        \parskip\eqeques@parsep\relax
+        \parindent0pt\relax\strut}p{\eq@tmpdima}}@{\hidewidth}}%
+}{\endtabular\kern0pt
+    \@ifundefined{@listii@SAVE}{}{\global\let\@listii\@listii@SAVE
+    \global\let\@listii@SAVE\relax}%
+    \post@parts@hook\belowpartshook
+    \aftergroup\eqe@innermarkpts
+    \aftergroup\eq@vpartstabtopsep}
+\let\eqe@innermarkpts\relax
+\def\item@part@tabular{\refstepcounter{partno}%
+  \global\let\eqExerSolnHeader\@empty
+  \ifeq@solutionsafter
+    \eq@nolinktrue  % no link to solution
+  \else\ifeq@nosolutions
+    \eq@nolinktrue  % no link to solution
+  \else
+      \eq@ckglobalhide
+      \ifeq@hidesolution\eq@nolinktrue\else
+      \gdef\eqExerSolnHeader{\eq@@writeexheaderlist}%
+  \fi\fi\fi
+  \if@restorejustify\restorejustify\else\PBS\raggedright\fi
+  \settowidth{\eq@tmplength}{\parts@indent\eqe@prtsepPrb}%
+  \xdef\prtsIndntSep{\the\eq@tmplength}%
+  \sbox{\eq@tmpbox}{\parts@indent}%
+  \eq@tmpdima=\wd\eq@tmpbox
+  \addtolength\eq@tmplength{\eq@extralabelsep}%
+  \xdef\partshangamount{\the\eq@tmplength}%
+  \parshape \@ne 0pt \linewidth
+  \everypar{\parshape \@ne 0pt \linewidth}%
+  \eq@setPrbSolnAftrIndnt
+  \makebox[0pt][r]{\eqexlisttabheader\eqe@prtsepPrb}%
+    \ex@listtabheader@fterhook
+    \exlisttabheaderafterhook\ignorespaces
+}
+\def\@ckhide[#1]{\edef\eq@arg{#1}%
+    \def\currhideopt{x}%
+    \ifx\eq@arg\@empty\else
+    \if\eq@arg\eq@Hid
+        \eq@hidesolutiontrue\eq@nolinktrue%
+        \edef\currhideopt{\Hidesymbol}%
+    \else
+        \ifeq@globalshowsolutions\else
+            \if\eq@arg\eq@hid
+                \eq@hidesolutiontrue\eq@nolinktrue%
+                \def\currhideopt{h}%
+            \fi
+        \fi
+    \fi\fi
+    \eq@item
+}
+\def\tabControlOn{\@ifundefined{@xtabularcr}
+    {\let\save@@xtabularcr\@xarraycr}
+    {\let\save@@xtabularcr\@xtabularcr}}
+\def\tabControlOff{\@ifundefined{@xtabularcr}
+    {\let\@xarraycr\save@@xtabularcr}
+    {\let\@xtabularcr\save@@xtabularcr}}
+\AtBeginDocument{\tabControlOn}
+\def\eq@xtabularcr{\@ifnextchar[{\save@@xtabularcr}
+    {\eqe@tab@parts@rowsep}}%
+\def\eqe@tab@parts@rowsep{\save@@xtabularcr
+    \noalign{\expandafter\kern\eqparts@tabrowsep}}%
+\define@key{exEnum}{labelwidthTo}[\normalsize\normalfont\bfseries00.\ ]%
+    {\def\exE@labelwidthTo{#1}}
+\define@key{exEnum}{labelwidth}[\@empty]{\def\exE@labelwidth{#1}}
+\let\exE@labelwidth\@empty
+\define@key{exEnum}{topsep}[3pt]{\def\exE@topsep{#1}}
+\define@key{exEnum}{parsep}[3pt]{\def\exE@parsep{#1}}
+\define@key{exEnum}{itemsep}[0pt]{\def\exE@itemsep{#1}}
+\define@key{exEnum}{labelsep}[\normalsize\normalfont\ ]%
+    {\settowidth{\@tempdima}{#1}\edef\exE@labelsep{\the\@tempdima}}
+\define@key{exEnum}{continue}[]{\let\eq@ExEnumResetCnt\@empty}
+\def\eq@ExEnumResetCnt{\setcounter{questionno}{0}}
+\setkeys{exEnum}{labelwidthTo,topsep,parsep,itemsep,labelsep}%
+\newenvironment{exEnumerate}[1][]{\everypar{}%
+    \toks@=\expandafter{#1}%
+    \edef\tempexp{\noexpand\setkeys{exEnum}{\the\toks@}}\tempexp
+    \eq@ExEnumResetCnt
+    \let\afterlabelhskip\@empty
+    \let\solnhspace\@empty
+    \aboveexskip{0pt}\belowexskip{\exE@parsep}%\belowexskip{0pt}%
+    \def\eqexheader@wrapper{\makebox[0pt][r]{%
+        \hypertarget{qex.\the@exno}{\eqexheader}\hspace{\labelsep}}}%
+    \def\exbookmarkfmt{\thequestionno.\space}
+    \def\partbookmarkfmt{(\thepartno)\space}
+    \def\setENum{\Elabel\if\exerstar*\thequestionno(\thepartno)\else
+        \thequestionno\fi}%
+    \ifExSolutionsSet\else
+    \writeToExSolns{^^J\protect\begin{exEnumerate}^^J}\fi
+    \list{}{%
+        \ifx\exE@labelwidth\@empty
+        \settowidth{\labelwidth}{\exE@labelwidthTo}\else
+        \setlength{\labelwidth}{\exE@labelwidth}\fi
+        \setlength{\topsep}{\exE@topsep}%
+        \ifdim\parskip>\z@\addtolength{\topsep}{-\parskip}\fi
+        \setlength{\parsep}{\exE@parsep}%
+        \setlength{\itemsep}{\exE@itemsep}%
+        \setlength{\itemindent}{0pt}%
+        \setlength{\listparindent}{0pt}%
+        \setlength{\itemindent}{0pt}%
+        \settowidth{\labelsep}{\normalfont\ }%
+        \setlength{\leftmargin}{\labelwidth}%
+    }\item\relax}{\ifExSolutionsSet\else
+        \writeToExSolns{\protect\end{exEnumerate}^^J}\fi
+\endlist}
+\newenvironment{enumex}{%
+    \renewcommand\exlabelformat{\textbf{\thequestionno.}}%
+    \renewcommand\exsllabelformat
+        {\protect\makebox[0pt][r]{\protect\textbf{\thequestionno.\ }}}%
+\begin{exercise}[questionno]}{\end{exercise}}
+\newenvironment{enumex*}{%
+    \renewcommand\exlabelformatwp{\textbf{\thequestionno.}}%
+    \renewcommand\exsllabelformatwp
+        {\protect\makebox[0pt][r]{\protect\textbf{\thequestionno.}\ }%
+            \protect\textbf{(\thepartno)}\ }%
+\begin{exercise*}[questionno]}{\end{exercise*}}
+\def\includeexersolutions{\@ifstar
+    {\let\resetEXsolns\relax\includeexersolutionsi}
+    {\def\resetEXsolns{\global\let\include@solutions\relax}%
+     \includeexersolutionsi}%
+}
+\newcommand{\includeexersolutionsi}[1][]{%
+    \filterFor{#1}\includeexersolutionsii
+}
+\def\includeexersolutionsii{%
+   \if\exerSolns@ExtFile\eq@NO
+        \include@solutions
+        \resetEXsolns
+        \let\eqFilterArg\@empty
+   \fi
+}
+\long\def\gobbleToEndEXt#1\endeqEXt{%
+    \ifeqforpaper\expandafter\@gobbletwo\fi}
+\newcommand\filterFor[1]{\def\eqFilterArg{#1}}
+\newcommand\inclEXtFilter[2]{\def\eqargii{#2}\ifx\eqargii\eqFilterArg
+    \else\expandafter\gobbleToEndEXt\fi}
+\newcommand\useEXtFilter{\let\eqEXt\inclEXtFilter}
+\let\eqsolutionshook\@empty
+\let\eq@solutionshook\@empty
+\let\priorexsectitle\@empty
+\let\priorexslinput\@empty
+\def\exerSolnsHeadnToc{\section*{\exsectitle}%
+    \addcontentsline{toc}{section}{%
+    \@ifundefined{web@latextoc}{}{%
+    \ifx\web@latextoc\eq@YES\else
+    \protect\numberline{}\fi}\exsectitle}}
+\@ifpackageloaded{web}{\def\eq@normallheader{\lheader{\rightmark}}}
+    {\let\eq@normallheader\relax}
+\@ifpackageloaded{web}{\def\eq@defaultlheader{\lheader{\aeb@setmarks}}}
+    {\let\eq@defaultlheader\relax}
+\newif\ifExSolutionsSet \ExSolutionsSetfalse
+\newcommand{\exerSolnInput}
+{%
+    \@ifundefined{eqe@IWO}{}{\ifsolutionsAtEnd%\ifvspacewithsolns
+        \eqe@IWO\@auxout{\string\expandafter\string\gdef
+        \string\csname\space eqExamQuesLastPage\string\endcsname
+        {\arabic{page}}}\fi}
+    \let\webnewpage\relax
+    \ifsolutionsonly\else\immediate\closeout\ex@solns\fi
+    \ifeq@nosolutions\else
+        \iftherearesolutions
+            \ifsolutionsonly\eq@solutionshook
+                \eqsolutionshook
+            \else
+            \newpage\eq@solutionshook
+            \eqsolutionshook\markright{}\eq@normallheader
+        \fi
+        \markright{\exsectitle}%
+            \ifx\webnewpage\relax
+                \def\webnewpage{\global\let\webnewpage\newpage}%
+            \fi
+            \priorexsectitle\exerSolnsHeadnToc\priorexslinput
+            \InputIfFileExists{\jobname.sol}
+            {\global\ExSolutionsSettrue}{\PackageWarning{exerquiz}
+            {!!! Solutions to exercises not found}}%
+            \global\ExSolutionsSetfalse
+            \newpage\eq@defaultlheader
+        \fi
+    \fi
+}
+\def\include@solutions{%
+    \if\exerSolns@ExtFile\eq@NO
+        \exerSolnInput
+    \fi
+}
+\let\eqexpdfentry=0
+\let\eq@postexerciseHook\relax
+\def\eq@postexerciseHook@BM{%
+    \xdef\Hy@currentbookmarklevel{\eq@currentbookmarklevel}}
+{\count0=\value{tocdepth}
+\advance\count0by2 \xdef\eqbmkmrkdepth{\the\count0}}
+\@ifundefined{Hy@bookmarksdepth}
+    {\setcounter{tocdepth}{\eqbmkmrkdepth}}
+    {\hypersetup{bookmarksdepth=\eqbmkmrkdepth}}
+\newcommand{\exbookmarkfmt}{\exlabel\space\theeqexno.\space}
+\newcommand{\partbookmarkfmt}{(\thepartno)\space}
+\newcommand{\expdfbookmark}[1]{\relax
+     \def\expdfbookmarktitle{#1}%
+    \ifx\eq@postexerciseHook\relax
+        \let\eq@postexerciseHook\eq@postexerciseHook@BM
+    \else
+        \let\eq@postexerciseHook@save\eq@postexerciseHook
+        \def\eq@postexerciseHook@BM@plus{\eq@postexerciseHook@save
+            \eq@postexerciseHook@BM}%
+        \let\eq@postexerciseHook\eq@postexerciseHook@BM@plus
+    \fi
+    \if\exerstar*%
+        \if\eqexpdfentry0\let\eqexpdfentry=1
+            \xdef\eq@currentbookmarklevel{\Hy@currentbookmarklevel}%
+            \def\eqex@next{\subpdfbookmark{\exbookmarkfmt#1}%
+                {qex.\the@exno}}%
+        \else
+            \def\eqex@next{\belowpdfbookmark{\partbookmarkfmt#1}%
+                {qex.\the@exno.\thepartno}}%
+        \fi
+    \else
+        \xdef\eq@currentbookmarklevel{\Hy@currentbookmarklevel}%
+        \def\eqex@next{\subpdfbookmark{\exbookmarkfmt#1}%
+            {qex.\the@exno}}%
+    \fi
+    \eqex@next\ignorespaces
+}
+\ifeq@noforms\endinput\fi
+\definecolor{webgreen}{rgb}{0,.6,0}
+\newcommand{\proofingsymbolColor}[1]{\def\@proofingsymbolColor{#1}}
+\proofingsymbolColor{red}
+\let\@proofsymbolredefined=0
+\newcommand{\proofingsymbol}[1]{\let\@proofsymbolredefined=1%
+    \def\@proofingsymbol{\textcolor{\@proofingsymbolColor}{#1}}}
+\def\@proofingsymbol{\textcolor{\@proofingsymbolColor}{\ding{52}}}
+\def\setproofingsymbol{%
+    \if\@proofsymbolredefined1\else
+    \@ifpackageloaded{pifont}{\proofingsymbol{\ding{52}}}
+    {\proofingsymbol{$\bullet$}}\fi
+}
+\AtBeginDocument{\setproofingsymbol}
+\newcommand{\prior@questionsHook}{}
+\let\qMark@Hook\@empty
+\let\aebtitleQuiz\@empty
+\newcommand{\post@questionsHook}{}
+\newcommand{\quesNumColor}[1]{\def\eq@quesNumCol{#1}}
+\quesNumColor{blue}
+\renewcommand{\theeqquestionnoi}{\arabic{eqquestionnoi}}
+\newcommand{\labeleqquestionnoi}{%
+    \color{\eq@quesNumCol}\bfseries\theeqquestionnoi.}
+\renewcommand\theeqquestionnoii{(\alph{eqquestionnoii})}
+\newcommand{\labeleqquestionnoii}{%
+    \color{\eq@quesNumCol}\bfseries\theeqquestionnoii}
+\renewcommand\theeqquestionnoiii{(\roman{eqquestionnoiii})}
+\newcommand{\labeleqquestionnoiii}{%
+    \color{\eq@quesNumCol}\bfseries\theeqquestionnoiii}
+\define@key{props@ques}{labelwidthTo}%
+    [\normalsize\normalfont\bfseries00.]%
+    {\def\propQ@labelwidthTo{#1}}
+\define@key{props@ques}{labelwidth}[]{\def\propQ@labelwidth{#1}}
+\let\propQ@labelwidth\@empty
+\define@key{props@ques}{topsep}[\the\topsep]{\edef\propQ@topsep{#1}}
+\define@key{props@ques}{partopsep}[\the\partopsep]%
+    {\edef\propQ@partopsep{#1}}
+\define@key{props@ques}{parsep}[\the\parsep]{\edef\propQ@parsep{#1}}
+\define@key{props@ques}{itemsep}[\the\itemsep]{\edef\propQ@itemsep{#1}}
+\define@key{props@ques}{labelsepTo}[\normalsize\normalfont\ ]%
+    {\def\propQ@labelsepTo{#1}}
+\define@key{props@ques}{labelsep}[\@empty]{\def\propQ@labelsep{#1}}
+\let\propQ@labelsep\@empty
+\define@key{props@ques}{color}[blue]{\quesNumColor{#1}}
+\setkeys{props@ques}{labelwidthTo,topsep,partopsep,parsep,%
+    itemsep,labelsepTo,color}%
+\newenvironment{questions}[1][]
+{%
+    \ifnum\@eqquestiondepth>\tw@\@toodeep\else
+    \advance\@eqquestiondepth\@ne\fi
+    \def\@quesctr{eqquestionno\romannumeral\the\@eqquestiondepth}%
+    \toks@=\expandafter\expandafter\expandafter{#1}\expandafter
+    \xdef\csname quesOpts\@quesctr\endcsname{\the\toks@}%
+    \edef\tempexp{\noexpand\setkeys{props@ques}{\the\toks@}}\tempexp
+    \list{\qMark@Hook\prior@questionsHook\gdef\eqPTs{1}%
+    \global\let\eqQT\eq@na%
+    {\@tempcnta=0 \let\@thispr@b\@empty
+     \@whilenum\@tempcnta<\@eqquestiondepth\do{\advance\@tempcnta\@ne
+     \ifx\@thispr@b\@empty\edef\@thispr@b{%
+     \csname theeqquestionno\romannumeral\the\@tempcnta\endcsname}\else
+     \edef\@thispr@b{\@thispr@b%
+     \csname theeqquestionno\romannumeral\the\@tempcnta\endcsname}\fi
+    }\xdef\@currentQues{\@thispr@b}}%
+    \makebox[\labelwidth][r]{\normalfont\@nameuse{label\@quesctr}}%
+    \xdef\eq@pageThisQ{\the\c@page}%
+    \post@questionsHook}{\usecounter{\@quesctr}%
+    \ifx\propQ@labelsep\@empty
+        \settowidth{\labelsep}{\propQ@labelsepTo}\else
+        \setlength{\labelsep}{\propQ@labelsep}\fi
+    \ifx\propQ@labelwidth\@empty
+        \settowidth{\labelwidth}%
+            {\propQ@labelwidthTo\hspace{\labelsep}}\else
+        \settowidth{\labelwidth}{\hspace{\propQ@labelwidth}%
+            \hspace{\labelsep}}\fi
+    \setlength{\topsep}{\propQ@topsep}%
+    \setlength{\partopsep}{\propQ@partopsep}%
+    \ifdim\parskip>\z@\addtolength{\topsep}{-\parskip}\fi
+    \setlength{\parsep}{\propQ@parsep}%
+    \setlength{\itemsep}{\propQ@itemsep}%
+    \setlength{\itemindent}{0pt}%
+    \setlength{\leftmargin}{\labelwidth}%
+    }%
+}{\endlist}
+\def\pushquestions{\expandafter\xdef\csname save\@quesctr\endcsname
+    {\expandafter\the\csname c@\@quesctr\endcsname}\end{questions}}
+\def\popquestions{%
+    \begin{questions}[\csname quesOpts\@quesctr\endcsname]%
+    \setcounter{\@quesctr}{\csname save\@quesctr\endcsname}%
+    \@ifnextchar\popquestions{\item[]}{\@ifnextchar\begin{\item[]}{}}}
+\newcommand{\priorsqhook}[1]{\def\sq@priorhook{#1}}
+\priorsqhook{}
+\newcommand{\abovesqskip}[1]{\def\sq@aboveskip{#1}}
+\abovesqskip{\par\medskip}
+\long\def\endsqhook#1{\def\sq@afterhook{#1}}
+\endsqhook{}
+\def\@shortquizCnt{0}
+\def\@sqGenBaseName{eqSqBn\@shortquizCnt}
+\let\sqhspace\space
+\let\ListOfSQuizNames\@empty
+\newenvironment{shortquiz}
+{%
+    \xdef\eq@pageThisQ{\the\c@page}%
+    \let\@currentQues\@empty
+    {\count0=\@shortquizCnt \advance\count0by1\relax
+        \xdef\@shortquizCnt{\the\count0}}%
+    \goodbreak\@ifstar{\sqForms\@shortquiz}%
+        {\if\aeb@FLOverride\eq@f\def\sqstar{*}\else
+          \def\sqstar{}\sqLinks\fi\@shortquiz}%
+}{\aeb@endshortquiz}
+\newenvironment{shortquiz*}
+{%
+    \xdef\eq@pageThisQ{\the\c@page}%
+    {\count0=\@shortquizCnt\advance\count0by1\relax
+        \xdef\@shortquizCnt{\the\count0 }}%
+    \sqForms\@shortquiz
+}{\aeb@endshortquiz}
+\def\@shortquiz{\@ifnextchar[%
+    {\@@shortquiz}{\@@shortquiz[\@sqGenBaseName]}}
+\def\sq@setCLN#1{\ifx\aebTitleQuiz\@empty
+    \protected@edef\@currentlabelname{#1}\else
+    \protected@edef\@currentlabelname{\@currentlabelname}\fi
+}
+\let\isQZ=q \let\isSQZ=s
+\def\sq@IDTxtField{\makebox[0pt][l]{\textField[\autoCenter{n}\BC{}\BG{}
+    \S{S}\textSize{0}\Ff{\FfReadOnly}
+    \AA{\AAFormat{%
+        var \oField=new Object;\r
+        \oField.Grp={};
+        \ifx\defaultColorJSLoc\@empty\else\r
+        \oField.DefaultColorJSLoc=\defaultColorJSLoc;\fi
+        \ifx\rghtColorJSLoc\@empty\else\r
+        \oField.RightColorJSLoc=\rghtColorJSLoc;\fi
+        \ifx\wrngColorJSLoc\@empty\else\r
+        \oField.WrongColorJSLoc=\wrngColorJSLoc;\fi
+        \ifx\rghtAnsSymbJSLoc\@empty\else\r
+        \oField.RightAnsSymbJSLoc=\rghtAnsSymbJSLoc;\fi
+        \ifx\wrngAnsSymbJSLoc\@empty\else\r
+        \oField.WrongAnsSymbJSLoc=\wrngAnsSymbJSLoc;\fi
+    }}]{sqID\oField}{0bp}{0bp}}%
+}
+\def\qz@IDTxtField{\makebox[0pt][l]{\textField[\autoCenter{n}\BC{}\BG{}
+    \S{S}\textSize{0}\Ff{\FfReadOnly}
+    \AA{\AAFormat{if(typeof aQuizzesInDoc=="undefined")\r\t
+      var aQuizzesInDoc=new Array();\r
+    if (aQuizzesInDoc.indexOf("\oField")) aQuizzesInDoc.push("\oField");
+    }}]{qzID\oField}{0bp}{0bp}}}
+\let\eqQuizType\relax
+\def\@@shortquiz[#1]{%\begingroup
+  \gdef\oField{#1}\gdef\curr@quiz{#1}\gdef\currQuiz{#1}%
+  \edef\tmp@Exp{\noexpand\g@addto@macro\noexpand
+    \ListOfSQuizNames{,#1}}\tmp@Exp
+    \global\let\eqQzQuesList\@empty
+    \let\eq@AddProbToQzQuesList\relax
+    \edef\@currentlabel{\@shortquizCnt}%
+    \edef\@currentHref{shortquiz.\@shortquizCnt}%
+  \global\let\eqQuizType\isSQZ\let\@qzsolndest\@empty
+  \if\sqstar*\relax
+    \let\@Ans\Ans@sq@f
+    \ifx\oField\@empty
+        \typeout{^^JExerquiz: Base field name required when using
+                shortquiz with '*' option}%
+        \PackageInfo{exerquiz}{Assuming link style^^J}%
+        \let\@Ans\Ans@sq@l
+    \fi
+  \else
+     \let\@Ans\Ans@sq@l
+  \fi
+  \setcounter{questionno}{0}%
+  \let\answers\answers@sq
+  \let\endanswers\endanswers@sq
+  \let\manswers\manswers@sq
+  \let\endmanswers\endmanswers@sq
+  \let\solution\solution@sq
+  \let\endsolution\endsolution@sq
+  \let\ifstaroption\eq@ifstaroption
+  \if\eq@tq@star*%
+        \def\sqlabel{\aebtitleQuiz\@gobbletwo}%
+   \fi
+   \sq@aboveskip\sq@priorhook
+   \@ifundefined{PointsOnLeft}%
+   {\sq@setCLN{\eq@defaultShortQuizLabelName}%
+        \ifx\sqlabel\@empty\else\noindent\fi
+        \hypertarget{sqH\@currentHref}{}\sq@IDTxtField
+        \ifx\sqlabel\@empty\else\expandafter
+            \sqlabel\expandafter\sqhspace\fi
+   {\set@typeset@protect\aebtitleQuiz}}{}\ignorespaces
+}
+\newcommand\belowsqskip[1]{\def\aftershortquizskip{#1}}
+\belowsqskip{\medskip}
+\def\aeb@endshortquiz{\setcounter{quizno}{0}%
+    \sq@afterhook
+    \global\let\aebtitleQuiz\@empty
+    \global\let\aebTitleQuiz\@empty
+    \global\let\eq@tq@star\relax
+    \global\let\sqlabel\eq@sqlabel
+    \global\let\sqslrtnlabel\eq@sqslrtnlabel
+    \global\let\sqsllabel\eq@sqsllabel
+    \par\aftershortquizskip
+}
+\def\sqLinks{\def\sqstar{}}\sqLinks
+\def\sqForms{\def\sqstar{*}}
+\let\eq@tq@star\relax
+\def\qzPriorSolutionAfterHook{\smallskip}
+\let\sqPostHeaderHook\@empty
+\let\qPostHeaderHook\@empty
+\let\eq@sqPostHeaderHook\@empty
+\let\eq@qPostHeaderHook\@empty
+\let\prior@eqQt\@empty
+\let\prior@eqSQt\@empty
+\def\sqsolafterhspace{\space}
+\newif\ifmakeQzSlLocal \makeQzSlLocalfalse
+\def\makeQzSolnsLocalOn{\makeQzSlLocaltrue}
+\def\makeQzSolnsLocalOff{\makeQzSlLocalfalse}
+\def\solution@sq{\let\eq@next\relax
+  \ifx\@qzsolndest\@empty
+    \PackageWarning{exerquiz}%
+    {* Solutions unexpected here, will *\MessageBreak
+     * assume solutionsafter option *}%
+    \eq@solutionsaftertrue
+  \fi
+  \ifeq@solutionsafter
+    \par\qzPriorSolutionAfterHook\noindent
+    \if!\sqsolafter!\else
+    \sqsolafter\sqsolafterhspace\fi\ignorespaces
+  \else
+    \global\therearequizsolutionstrue\let\verbatim@out=\quiz@solns
+    \set@display@protect
+    \immediate\write\verbatim@out{%
+      \ifmakeQzSlLocal\protect\begingroup^^J\fi
+      \if\eqQuizType\isQZ
+            \ifx\prior@eqQt\@empty\else\prior@eqQt\fi
+            \protect\eqQt{\eqFilterArg}\else
+            \ifx\prior@eqSQt\@empty\else\prior@eqSQt\fi
+            \protect\eqSQt{\eqFilterArg}\fi
+      \protect\quizSolnHeader\if\eqQuizType\isQZ\ifx\allow@peek\eq@NO
+        [{\curr@quiz}{\currQuizStartPage}]\fi\fi
+        {\@qzsolndest}{\sqsllabel}\protect\eqterminex
+        \if\eqQuizType\isQZ\expandafter\eq@qPostHeaderHook
+        \expandafter\qPostHeaderHook\else
+        \expandafter\eq@sqPostHeaderHook
+        \expandafter\sqPostHeaderHook\fi}%
+    \set@typeset@protect
+    \expandafter\verbatimwrite\fi
+}
+\let\qzSolutionsAfterHook\@empty
+\def\endsolution@sq
+{%
+    \ifeq@solutionsafter
+        \eq@fititin{\mbox{\sqslrtnlabel}}\par\qzSolutionsAfterHook
+        \aftergroup\ignorespaces
+    \else
+        \endverbatimwrite
+        \ifx\@qzsolndest\@empty\else\set@display@protect
+            \immediate\write\verbatim@out{\eqSqSolnTrailer}%
+         \set@typeset@protect
+        \fi
+    \fi
+    \global\let\@qzsolndest\@empty
+}
+\newcommand\pnphDflt{.1\textheight}
+\newcommand{\promoteNewPageHere}[1][\pnphDflt]{%
+    \@ifnextchar\bgroup{\eq@promoteNewPageHere}
+        {\eq@promoteNewPageHere{#1}}%
+}
+\def\eq@promoteNewPageHere#1{\par
+    \bgroup\@nobreakfalse\addpenalty{-500}%
+    \setlength{\@tempdimb}{#1}%
+    \@tempdima \pagegoal \advance \@tempdima -\pagetotal
+    \ifdim \@tempdima<\@tempdimb\ifnum\col@number>\@ne\columnbreak
+        \else\newpage\penalty1\fi\fi\egroup
+}
+\newcommand{\saveDest}[1][]{%
+    \def\sd@arg{#1}\ifx\sd@arg\@empty
+    \xdef\holdDest{\@qzsolndest}\else
+    \xdef\@qzsolndest{#1}\xdef\holdDest{#1}\fi}
+\def\useDest{\def\@qzsolndest{\holdDest}}
+\let\holdDest\@empty
+\def\fpAfterSolutionsSkip{\par\medskip}
+\let\eqSqSolnTrailerHook\@empty
+\let\eqQzSolnTrailerHook\@empty
+\newcommand\eqSqSolnTrailer{%
+    \if\eqQuizType\isQZ
+        \eqQzSolnTrailerHook
+        \protect\ReturnTo{page.\eq@pageThisQ}%
+            {\protect\mbox{\sqslrtnlabel}}\string\endeqQt
+    \else
+        \eqSqSolnTrailerHook
+        \protect\ReturnTo{page.\eq@pageThisQ}%
+            {\protect\mbox{\sqslrtnlabel}}\string\endeqSQt%
+    \fi
+    \ifeqforpaper\protect\fpAfterSolutionsSkip\fi^^J%
+    \ifmakeQzSlLocal\protect\endgroup^^J\fi
+}
+\let\eqSQt\@gobble
+\let\endeqSQt\relax
+\let\eqQt\@gobble
+\let\endeqQt\relax
+\let\prior@quizSolnHeaderHook\@empty
+\newcommand\quizSolnHeader[3][]{%
+    \prior@quizSolnHeaderHook
+    \ifeqforpaper\else\webnewpage\fi\noindent
+    \def\eq@argi{#1}%
+    \ifx\eq@argi\@empty\else\noPeek#1\fi
+    \hypertarget{#2}{#3}\relax
+    \solnspace
+}
+\def\AllowPeeking{\global\let\allow@peek\eq@YES}\AllowPeeking
+\def\NoPeeking{\global\let\allow@peek\eq@NO}
+\def\noPeekAction#1#2{%
+    /AA <</O<</S/JavaScript/JS(noPeek("#1",#2))>> >>
+}
+\newif\iftherearequizsolutions \therearequizsolutionsfalse
+\let\aeb@FLOverride\relax
+\def\includequizsolutions{\@ifstar
+    {\let\resetQZtsolns\relax\includequizsolutionsi}
+    {\def\resetQZtsolns{\global\let\include@quizsolutions\relax}%
+     \includequizsolutionsi}%
+}
+\newcommand{\includequizsolutionsi}[1][]{%
+    \filterFor{#1}\includequizsolutionsii
+}
+\def\includequizsolutionsii{%
+    \include@quizsolutions
+    \resetQZtsolns
+    \let\eqFilterArg\@empty
+}
+\let\eqqzsolutionshook\@empty
+\let\priorsqslsectitle\@empty
+\let\priorsqslinput\@empty
+\def\quizSolnsHeadnToc{\section*{\sqslsectitle}%
+    \addcontentsline{toc}{section}{%
+    \@ifundefined{web@latextoc}{}{%
+    \ifx\web@latextoc\eq@YES\else
+    \protect\numberline{}\fi}\sqslsectitle}}
+\newcommand{\quizSolnInput}
+{%
+    \global\let\webnewpage\relax
+    \immediate\closeout\quiz@solns
+    \ifeq@noquizsolutions\else
+        \iftherearequizsolutions\newpage\markright{}%
+            \eq@normallheader\markright{\sqslsecrunhead}%
+            \ifx\webnewpage\relax
+                \def\webnewpage{\global\let\webnewpage\newpage}\fi
+            \priorsqslsectitle\quizSolnsHeadnToc\priorsqslinput
+            \InputIfFileExists{\jobname.qsl}{}%
+            {!!! Solutions to quizzes not found}
+            \eqqzsolutionshook
+            \newpage\eq@defaultlheader
+        \fi
+    \fi
+}
+\def\include@quizsolutions{\quizSolnInput}
+\newcommand{\priorqhook}[1]{\def\q@priorhook{#1}}
+\priorqhook{}
+\newcommand{\aboveqskip}[1]{\def\q@aboveskip{#1}}
+\aboveqskip{\par\medskip}
+\newcommand{\qhspace}{\space}
+\def\endqhook#1{\def\eq@prior@endQuiz{#1}}
+\endqhook{}
+\newcommand{\belowqHooknSkip}[1]{\def\eq@belowqskip{#1}}
+\belowqHooknSkip{\medskip}
+\def\belowqskip{\belowqHooknSkip}
+\let\eq@initializeServerSubmit\@empty
+\newcommand{\quiztype}[1]{%
+    \def\@quiztype{#1}\def\aeb@FLOverride{#1}}
+\let\@quiztype\@empty
+\newcommand{\defaultquiztype}{\let\@quiztype\@empty
+    \let\aeb@FLOverride\relax}
+\let\aeb@FLOverride\relax
+\def\@setFormLinkType{%
+    \if\qstar*%
+        \ifx\aeb@FLOverride\relax%
+            \def\@@quiztype{f}%
+        \else
+            \if\aeb@FLOverride l\def\@@quiztype{l}\else
+            \def\@@quiztype{f}\fi
+        \fi
+    \else
+        \ifx\aeb@FLOverride\relax
+            \def\@@quiztype{l}%
+        \else
+            \if\aeb@FLOverride f\def\@@quiztype{f}\else
+            \def\@@quiztype{l}\fi
+        \fi
+    \fi
+}
+\def\setdefault@Ans{\@setFormLinkType
+    \expandafter\global\expandafter
+    \let\expandafter\@Ans\expandafter=\csname Ans@\@@quiztype\endcsname
+}
+\newcommand\useForms{\def\aeb@FLOverride{f}}
+\newcommand\useLinks{\def\aeb@FLOverride{l}}
+\newcommand\restoreFLTypeDefault{\global\let\aeb@FLOverride\relax}
+\let\aeb@FLOverride\relax
+\newenvironment{quiz}
+{\goodbreak\@ifstar{\gdef\qstar{*}\@quiz*f}{\gdef\qstar{x}\@quiz*l}}
+    {\aeb@endquiz}
+\def\@quizCnt{0}
+\let\ListOfQuizNames\@empty
+\def\@quiz*#1#2{%
+    \xdef\eq@pageThisQ{\the\c@page}%
+    \let\@currentQues\@empty
+    \global\let\eqQzQuesList\@empty
+    \global\let\pointValuesArray\@empty
+    \global\let\ptypeArray\@empty
+     \global\let\corrAnsArray\@empty
+    {\count0=\@quizCnt\advance\count0by1\relax
+        \xdef\@quizCnt{\the\count0 }}%
+    \edef\@currentlabel{\@quizCnt}%
+    \edef\@currentHref{quiz.\@quizCnt}%
+    \sq@setCLN{\eq@defaultQuizLabelName}%
+    \setcounter{eqpointvalue}{0}\setcounter{questionno}{0}%
+    \eq@initializeServerSubmit
+    \global\let\eqQuizType\isQZ %\tabcolsep=0pt
+    \gdef\eqPTs{1}\global\let\eqQT\eq@na
+    \g@addto@macro\ListOfQuizNames{,#2}%
+    \gdef\quiz@total{#2}\xdef\curr@quiz{#2}\xdef\oField{#2}%
+    \xdef\currQuiz{#2}\xdef\currQuizStartPage{\thepage}%
+    \xdef\aPointType{0}%
+    \def\fieldJSStr@CMD{\fieldJSStr*[noquotes]\bqlabelISO}%
+    \expandafter\fieldJSStr@CMD\expandafter{\bqlabelISO}%
+    \ifx\@quiztype\@empty\gdef\@@quiztype{#1}\else
+        \xdef\@@quiztype{\@quiztype}\fi
+    \let\@qzsolndest\@empty
+    \let\answers\answers@q\let\endanswers\endanswers@q
+    \let\manswers\manswers@q\let\endmanswers\endanswers@q
+    \let\solution\solution@sq\let\endsolution\endsolution@sq
+    \expandafter%
+        \xdef\csname titleOf\currQuiz\endcsname{\aebTitleQuiz}%
+    \q@aboveskip\q@priorhook\noindent\hypertarget{qzH\@currentHref}{}%
+    \eq@beginQuiz\qhspace{\set@typeset@protect\aebtitleQuiz}%
+    \ignorespaces
+}
+\def\aeb@endquiz
+{%
+    \eq@prior@endQuiz\noindent\eq@endQuiz
+    \global\let\eqQuizType\relax
+    \global\let\aebtitleQuiz\@empty
+    \global\let\aebTitleQuiz\@empty
+    \global\let\bqlabel\eq@bqlabel % reset beginning label to default
+    \global\let\eqlabel\eq@eqlabel % reset ending label to default
+    \global\let\sqsllabel\eq@sqsllabel
+    \global\let\sqslrtnlabel\eq@sqslrtnlabel
+    \global\let\bqlabelISO\eq@bqlabelISO
+    \eq@belowqskip
+}
+\newenvironment{quiz*}{\goodbreak\gdef\qstar{*}\@quiz*f}{\aeb@endquiz}
+\newcommand\eq@beginQuiz{\eq@BeginQuizLink}
+\newcommand\eq@endQuiz{\eq@EndQuizLink}
+\newcommand\useBeginQuizButton[1][]
+    {\renewcommand\eq@beginQuiz{\eq@BeginQuizButton[#1]}}
+\newcommand\useEndQuizButton[1][]
+    {\renewcommand\eq@endQuiz{\eq@EndQuizButton[#1]}}
+\newcommand\useBeginQuizLink
+    {\renewcommand\eq@beginQuiz{\eq@BeginQuizLink}}
+\newcommand\useEndQuizLink
+    {\renewcommand\eq@endQuiz{\eq@EndQuizLink}}
+\newcommand\@initQuiz{%
+    var \curr@quiz=new Object();\jsR
+    lstOfQuizzes["\curr@quiz"]=\curr@quiz;\jsR
+    \curr@quiz.oAlertCheck={bAfterValue:false};\jsR
+    \curr@quiz.Grp={};
+    \ifx\defaultColorJSLoc\@empty\else\jsR
+    \oField.DefaultColorJSLoc=\defaultColorJSLoc;\fi
+    \ifx\rghtColorJSLoc\@empty\else\jsR
+    \oField.RightColorJSLoc=\rghtColorJSLoc;\fi
+    \ifx\wrngColorJSLoc\@empty\else\jsR
+    \oField.WrongColorJSLoc=\wrngColorJSLoc;\fi
+    \ifx\partialColorJSLoc\@empty\else\jsR
+    \oField.PartialColorJSLoc=\partialColorJSLoc;\fi
+    \ifx\rghtAnsSymbJSLoc\@empty\else\jsR
+    \oField.RightAnsSymbJSLoc=\rghtAnsSymbJSLoc;\fi
+    \ifx\wrngAnsSymbJSLoc\@empty\else\jsR
+    \oField.WrongAnsSymbJSLoc=\wrngAnsSymbJSLoc;\fi
+    \ifx\corrAnsSymbJSLoc\@empty\else\jsR
+    \oField.CorrAnsSymbJSLoc=\corrAnsSymbJSLoc;\fi
+    \ifx\eqGradeScaleLoc\@empty\else\jsR
+    \oField.GradeScaleLoc=new Array(\eqGradeScaleLoc);\fi
+    \ifx\eqCorrLocalChoiceFully\@empty\else\jsR % dpsf07
+    \oField.fullyCorrectLoc=\eqCorrLocalChoiceFully;\fi
+    \ifx\priorInitQuiz\@empty\else\jsR\priorInitQuiz\fi %\jsR
+    InitializeQuiz("\curr@quiz",\ifnocorrections0\else1\fi);
+    \ifx\eq@CGI\@empty\jsR\curr@quiz.isSubmitted=false;\else
+    \jsR\curr@quiz.isSubmitted=true;\fi
+    \jsR\curr@quiz.initializeWith=%
+'InitializeQuiz("\curr@quiz",\ifnocorrections0\else1\fi);'
+    \ifx\postInitQuiz\@empty\else\jsR\postInitQuiz\fi
+}
+\newcommand{\priorInitQuiz}{}
+\newcommand{\postInitQuiz}{}
+\let\eq@submitURL\@empty
+\let\eq@insertHiddenFields\@empty
+\def\eq@@BeginQuizLinkActions
+{%
+    \A{\JS{%
+        \@initQuiz
+    }}%
+}
+\def\eq@BeginQuizLinkDefaults{\Border{0 0 0}}
+\let\bqlabelFmt\@empty
+\def\eq@BeginQuizLink
+{%
+    \qz@IDTxtField
+    \set@@Link{}{}{}{\color{\@linkcolor}\bqlabelFmt\bqlabel}{}%
+    {\eq@setWidgetProps\setLink@driver}%
+    {\eq@BeginQuizLinkDefaults\eq@@BeginQuizLinkActions\every@Link}%
+    \space\ignorespaces
+}
+\newcommand\priorSubmitQuiz{}
+\newcommand\postSubmitQuiz{}
+\def\eq@@EndQuizLinkActions{\A{\JS{%
+  if (!isQuizInitialized("\curr@quiz"))\jsR\jsT
+    eqAppAlert(InitMsg("\bqlabelISO"),3);\jsR
+  else {\jsR\jsT
+    if (\minQuizResp(\thequestionno)) {\jsR\jsT\jsT
+      \curr@quiz.PtValues=new %
+        Array(\pointValuesArray);\jsR\jsT\jsT
+      ProbType = [\ptypeArray];\jsR\jsT\jsT
+\if@inclkey
+      \curr@quiz.CorrAns=(new %
+        Array(\corrAnsArray));\jsR\jsT\jsT
+\fi
+      DisplayQuizResults("\curr@quiz",\theeqpointvalue,%
+        \thequestionno);\jsR\jsT\jsT
+      var h=this.getField("ScoreData.\curr@quiz");\jsR\jsT\jsT
+      h.value=Score+";"+NQuestions+";"%
+        +ptScore+";"+NPointTotal;\jsR\jsT\jsT
+      \eq@submitURL
+      \postSubmitQuiz
+      \jsT\jsT resetQuiz("\curr@quiz");\jsR\jsT
+    }\jsR
+  }}}%
+}
+\def\eq@EndQuizLinkDefaults{\Border{0 0 0}}
+\let\eqlabelFmt\@empty
+\def\eq@EndQuizLink
+{%
+    \ifx\eq@CGI\@empty
+        \let\eq@submitURL\@empty
+        \let\eq@insertHiddenFields\@empty
+    \fi
+    \set@@Link{}{}{}{\color{\@linkcolor}\eqlabelFmt\eqlabel}{}%
+    {\eq@setWidgetProps\setLink@driver}%
+    {\eq@EndQuizLinkDefaults\eq@@EndQuizLinkActions\every@Link}%
+    \makebox[0pt][r]{\textField[\BC{}\autoCenter{n}]%
+        {htxtfld.\curr@quiz}{0bp}{0bp}}%
+    \makebox[0pt][r]{\eq@hiddenScoreData\eq@insertHiddenFields}%
+    \global\let\eq@CGI\@empty\ignorespaces
+}
+\def\BeginQuizButtonDefaults
+{%
+    \CA{\bqlabel}\H{P}\F{\FPrint}
+    \BC{1 0 0}\BG{.7529 .7529 .7529}\W{1}\S{B}
+}
+\def\eq@@BeginQuizButtonActions
+{%
+    \A{\JS{%
+        \@initQuiz
+    }}%
+}
+\newcommand\eq@BeginQuizButton[1][]
+{%
+    \mbox{\qz@IDTxtField\push@@Button{#1}{beginQuiz.\curr@quiz}{}%
+        {\DefaultHeightOfWidget}{\eq@protect\A}%
+        {\eq@setButtonProps\eq@Button@driver}%
+        {\BeginQuizButtonDefaults\eq@@BeginQuizButtonActions
+         \every@ButtonField\every@BeginQuizButton}}%
+}
+\def\EndQuizButtonDefaults
+{%
+    \CA{\eqlabel}\F{\FPrint}\BC{1 0 0}
+    \BG{.7529 .7529 .7529}\W{1}\S{B}\H{P}
+}
+\def\eq@@EndQuizButtonActions{\A{\JS{%
+  if (!isQuizInitialized("\curr@quiz"))\jsR\jsT
+    eqAppAlert(InitMsg("\bqlabelISO"),3);\jsR
+  else {\jsR\jsT
+    if (\minQuizResp(\thequestionno)&&_ModalNotOn){\jsR\jsT\jsT
+      \curr@quiz.PtValues=(new %
+        Array(\pointValuesArray));\jsR\jsT\jsT
+      ProbType=[\ptypeArray];\jsR\jsT\jsT
+\if@inclkey
+      \curr@quiz.CorrAns=(new %
+        Array(\corrAnsArray));\jsR\jsT\jsT
+\fi
+      DisplayQuizResults("\curr@quiz",\theeqpointvalue,%
+        \thequestionno);\jsR\jsT\jsT
+      var h=this.getField("ScoreData.\curr@quiz");\jsR\jsT\jsT
+      h.value=Score+";"+NQuestions+";"%
+        +ptScore+";"+NPointTotal;\jsR\jsT\jsT
+      \eq@submitURL
+      \postSubmitQuiz
+      \jsT\jsT resetQuiz("\curr@quiz");\jsR\jsT
+    }\jsR
+  }}}%
+}
+\newcommand{\eq@hiddenScoreData}{\makebox[0pt][r]{%
+  \textField[\BC{}\F{\FHidden}]{ScoreData.\curr@quiz}{0bp}{0bp}}}
+\newcommand\eq@EndQuizButton[1][]
+{%
+    \ifx\eq@CGI\@empty
+        \let\eq@submitURL\@empty
+        \let\eq@insertHiddenFields\@empty
+    \fi
+    \mbox{\push@@Button{#1}{endQuiz.\curr@quiz}{}%
+        {\DefaultHeightOfWidget}{\eq@protect\A}%
+        {\eq@setButtonProps\eq@Button@driver}%
+        {\EndQuizButtonDefaults\eq@@EndQuizButtonActions
+         \every@ButtonField\every@EndQuizButton}}%
+    \makebox[0pt][r]{\eq@hiddenScoreData\eq@insertHiddenFields}%
+    \global\let\eq@CGI\@empty
+}
+\newcommand\databaseName[1]{\gdef\db@Name{#1}}\def\db@Name{}
+\newcommand\tableName[1]{\gdef\db@Table{#1}}\def\db@Table{}
+\newcommand\eqCGI{\definePath{\eq@CGI}}\def\eq@CGI{}
+\newcommand\eqSubmit{\hyper@normalise\eqSubmiti}
+\def\eqSubmiti#1{\xdef\eq@CGI{"#1"}\eqSubmitii}
+\def\eqSubmitii#1#2{\databaseName{#1}\tableName{#2}}
+\providecommand{\rtnURL}{\definePath{\thisRtnURL}}
+\let\thisRtnURL\@empty
+\newcommand\addHiddenTextField[3][]{}
+\newcommand\populateHiddenField[2]{}
+\def\eqButtonDefaults
+{%
+    \CA{\eq@local@CA}\AC{}\H{P}\W{1}\S{B}
+    \BC{1 0 0}\BG{.7529 .7529 .7529}
+}
+\def\@@eqButtonActions
+{%
+    \A{\JS{if (isEndQuizPushed("\eqBaseName")){\jsR\jsT%
+            correctQuiz("\eqBaseName",\thequestionno);%
+            \ifusesumrytbls\jsR\jsT\else\jsR\fi
+        if (typeof correctSumryTbl == "function")\jsR\jsT\jsT
+            correctSumryTbl("\eqBaseName",\thequestionno);\jsR
+    }
+    }}%
+}
+\newcommand\eqButton[2][]
+{%
+    \ifnocorrections\else
+        \def\eqBaseName{#2}%
+        \mbox{\push@@Button{#1}{correct.#2}{}{\DefaultHeightOfWidget}%
+        {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
+        {\eqButtonDefaults\@@eqButtonActions\every@ButtonField
+        \every@eqButton}}%
+    \fi
+}
+\def\CorrButton{\eqButton}
+\def\rbMarkup@Defaults
+{%
+    \BC{}\F{\FHidden}\Ff{\FfReadOnly}\textSize{12}
+    \textColor{0 g}\symbolchoice{check}\W{}
+}
+\newcommand\rbMarkup[1][]{%
+    \ifx\grpquestions\eq@One
+        \def\Fld@name{%
+            \oField.\thequestionno.\thegrpquestionno}\else
+        \def\Fld@name{\oField.\thequestionno}\fi
+    \mbox{\check@@Box{#1\V{Yes}\DV{Yes}}%
+    {rbmarkup.\Fld@name}%
+    {\RadioFieldSize}{\RadioFieldSize}{Yes}{}%
+    {\eq@setWidgetProps\eq@RadioCheck@driver}%
+    {\rbMarkup@Defaults\every@CheckBox\every@rbMarkup}}}%
+\newcommand\minQuizResp{lowThreshold}
+\newcommand\PTs{\@ifstar{\def\eq@star{*}\@PTs}{\def\eq@star{x}\@PTs}}
+\def\@PTs#1{\gdef\eq@PTs{#1}\ifx\eq@PTs\@empty\gdef\eq@PTs{1}\fi
+    \global\let\eqPTs\eq@PTs\global\let\eq@PTs\@empty
+    \if\eq@star*\else\PTs@Hook\fi}
+\def\eq@PTs{0} % initialize this variable
+\newcommand\QT[1]
+{%
+    \gdef\eq@qT{#1}\ifx\eq@qT\@empty\global\let\eq@qT\eq@na\fi
+    \global\let\eqQT\eq@qT\global\let\eq@qT\eq@na
+}
+\def\eq@na{na} % not applicable
+\let\eq@qT\eq@na
+\newcommand\PTsHook[1]{\def\PTs@Hook{#1}}
+\let\PTs@Hook\@empty
+\let\eq@PTs\@empty
+\newcommand\eqGradeScale{%
+    "A",[90, 100],"B",[80,90],"C",[70,80],"D",[60,70],"F",[0,60]}
+\let\eqGradeScaleLoc\@empty
+\newcommand{\resetGradeScaleLoc}{\global\let\eqGradeScaleLoc\@empty}
+\def\tallywidth#1{\def\TBW{#1}}
+\def\TBW{15bp}
+\def\DefaultHeightOfWidget{11bp}
+\def\RadioFieldSize{11bp}
+\def\RBW{2in}       % Response Box width (math,txt, txtpc, answer field)
+\def\SFW{1.5in}     % Score Field Width
+\def\GFW{20pt}      % Grade Field Width
+\def\PtFW{1.5in}    % Point Field Width
+\def\PcFW{1.5in}    % Percent Field Width
+\def\ScoreFieldDefaults
+{%
+    \Ff{\FfReadOnly}\BC{1 0 0}\BG{}\S{S}
+    \DV{\eqScore}\V{\eqScore}\W{1}
+}
+\newcommand\ScoreField[2][]
+{%
+    \mbox{\text@@Field{#1}{ScoreField.#2}{\SFW}%
+        {\DefaultHeightOfWidget}{}{\eq@setWidgetProps\eq@TextField}%
+        {\ScoreFieldDefaults\every@eqTextField\every@ScoreField}}%
+}
+\def\GradeFieldDefaults
+{%
+    \textColor{0 0 1 rg}\BC{1 0 0}\BG{1 1 1}\S{S}
+    \Ff{\FfReadOnly}\Q{1}\W{1}
+}
+\newcommand\GradeField[2][]
+{%
+    \mbox{\text@@Field{#1}{GradeField.#2}{\GFW}%
+        {\DefaultHeightOfWidget}{}{\eq@setWidgetProps\eq@TextField}%
+        {\GradeFieldDefaults\every@eqTextField\every@GradeField}}%
+}
+\def\AnswerFieldDefaults
+{%
+   \BC{0 0 0}\S{S}\Ff{\FfReadOnly}\W{1}%
+   \presets{\eq@resetAnsFieldOnClose}%
+}
+\let\eq@resetAnsFieldOnClose\@empty
+\newcommand{\noResetAnsFieldOnClose}{%
+    \global\let\eq@resetAnsFieldOnClose\@empty}
+\newcommand{\resetAnsFieldOnClose}{%
+    \gdef\eq@resetAnsFieldOnClose{%
+        \AApageclose{this.resetForm(["\Fld@name"]);}}}
+\newcommand\AnswerField[2][]
+{%
+    \mbox{\text@@Field{#1}{Ans.#2}{\RBW}{\DefaultHeightOfWidget}%
+        {}{\eq@setWidgetProps\eq@TextField}%
+        {\AnswerFieldDefaults\every@eqTextField\every@AnswerField}}%
+}
+\newcommand\autoAnswerField{%
+    \@ifundefined{lfooter}{\def\eq@next{\eq@autoAnswerFieldgobble}%
+    \PackageError{exerquiz}{The \string\autoAnswerField\space
+        command\MessageBreak requires the web package}{Use web package}
+    }{%
+        \PackageInfo{exerquiz}{%
+        For this auto answer field feature to run\MessageBreak
+        the webheadings pagestyle of the web package\MessageBreak
+        is required}\def\eq@next{\eq@autoAnswerField}%
+        \ifx\web@lfoot\@empty\else
+        \PackageWarning{exerquiz}{The left running footer already in
+        use\MessageBreak Will overwrite what is there now.
+        Better fix it.}\fi
+    }%
+    \eq@next
+}
+\newcommand\eq@autoAnswerFieldgobble[1][]{\relax}
+\newcommand\autoAnsFldRaiseBox[1]{\def\ef@aAFRB{#1}}
+\autoAnsFldRaiseBox{0pt}
+\let\autoAFOpts\@empty
+\newcommand\eq@autoAnswerField[1][]{\gdef\autoAFOpts{#1}%
+    \def\eq@insertAnswerField{\AnswerField[#1]{\currQuiz}}%
+    \eq@@autoAnswerField
+}
+\newcommand\eq@@autoAnswerField{\lfooter{\ifIsRespBox
+    \raisebox{\ef@aAFRB}{\eq@insertAnswerField}%
+    \global\IsRespBoxfalse\fi}%
+}
+\newcommand\manualAnswerField[1][\autoAFOpts]{%
+    \expandafter\AnswerField\expandafter[#1]{\currQuiz}}
+\def\PointsFieldDefaults
+{%
+   \rawPDF{}\BC{1 0 0}\BG{}\W{1}\S{S}\Ff{\FfReadOnly}
+ }
+\newcommand\PointsField[2][]
+{%
+    \mbox{\text@@Field{#1}{PointsField.#2}{\PtFW}%
+        {\DefaultHeightOfWidget}{}{\eq@setWidgetProps\eq@TextField}%
+        {\PointsFieldDefaults\every@eqTextField\every@PointsField}}%
+}
+\def\PercentFieldDefaults
+{%
+    \rawPDF{}\BC{1 0 0}\BG{}\W{1}\S{S}\Ff{\FfReadOnly}%
+}
+\newcommand\PercentField[2][]
+{%
+    \mbox{\text@@Field{#1}{PercentField.#2}{\PcFW}%
+        {\DefaultHeightOfWidget}{}{\eq@setWidgetProps\eq@TextField}%
+        {\PercentFieldDefaults\every@eqTextField\every@PercentField}}%
+}
+\newcommand\RestoreScoreField
+{%
+    \global\let\eqScore\eq@Score
+    \global\let\eqOutOf\eq@OutOf
+}
+\def\DeclareQuiz#1{\edef\oField{#1}%
+    \edef\thisQuiz{#1}\edef\curr@quiz{#1}%
+    \edef\currQuiz{#1}\edef\curr@quiz{#1}%
+}
+\let\Quiz\DeclareQuiz
+\def\aeb@noindgobble{\noindent\@gobbletwo}
+\let\startQuizHere\relax
+\let\endQuizHere\relax
+\let\dockQuiz\relax
+\newcommand\floatQuiz{%
+    \global\let\eq@beginQuiz@saved\eq@beginQuiz
+    \global\let\eq@endQuiz@saved\eq@endQuiz
+    \global\let\startQuizHere\eq@beginQuiz
+    \global\let\endQuizHere\eq@endQuiz
+    \global\let\eq@beginQuiz\aeb@noindgobble
+    \global\let\eq@endQuiz\@empty
+    \global\let\dockQuiz\eq@dockQuiz
+}
+\newcommand\eq@dockQuiz{%
+    \global\let\eq@beginQuiz\eq@beginQuiz@saved
+    \global\let\eq@endQuiz\eq@endQuiz@saved
+    \global\let\startQuizHere\relax
+    \global\let\endQuizHere\relax
+    \global\let\eq@beginQuiz@saved\relax
+    \global\let\eq@endQuiz@saved
+    \global\let\dockQuiz\relax
+}
+\def\fancyQuizHeaders{%
+    \global\let\eq@sqsllabel@fancy@save\eq@sqsllabel
+    \gdef\eq@sqsllabel{\eq@fancyQuizHeaders}}
+\def\eq@fancyQuizHeaders{%
+    \if\eqQuizType\isQZ\expandafter\eq@fancyQuizHeadersfmt\else
+    \expandafter\eq@fancyShrtQuizHeadersfmt\fi
+}
+\let\eq@sqsllabel@fancy@save\@empty
+\def\restoreDefaultQuizHeaders{%
+    \global\let\eq@sqsllabel\eq@sqsllabel@fancy@save}
+\newcommand\fncyQHdrsColor{blue}
+\newcommand\FncyHdrsFmtNoTitleQuiz{Solution to Quiz:}
+\newcommand\FncyHdrsFmtQuestion{Question}
+\newcommand\dfltFncyQHdrsFmt{%
+    \protect\bfseries\protect\color{\fncyQHdrsColor}%
+    \ifx\aebTitleQuiz\@empty
+    \ifnum\@eqquestiondepth>0\relax\FncyHdrsFmtNoTitleQuiz\fi
+    \else\aebTitleQuiz:\ifnum\@eqquestiondepth=0\else\protect\ %
+    \FncyHdrsFmtQuestion\fi\fi\ifcase\@eqquestiondepth
+    \ifx\aebTitleQuiz\@empty\FncyHdrsFmtNoTitleQuiz\fi
+    \or\space\arabic{eqquestionnoi}.%
+    \or\space\arabic{eqquestionnoi}(\alph{eqquestionnoii})%
+    \or\space\arabic{eqquestionnoi}(\alph{eqquestionnoii})%
+        (\roman{eqquestionnoiii})\fi
+}
+\newcommand\dclrFncyQzHdrsFmt[1]{%
+    \def\eq@fancyQuizHeadersfmt{{#1}}%
+}
+\dclrFncyQzHdrsFmt{\dfltFncyQHdrsFmt}
+\newcommand\dclrFncySqHdrsFmt[1]{%
+    \def\eq@fancyShrtQuizHeadersfmt{{#1}}%
+}
+\dclrFncySqHdrsFmt{\dfltFncyQHdrsFmt}
+\let\tqhspace\space
+\newcommand\titleQuiz[1][]{#1\@titleQuizi}
+\def\@titleQuizi{\makeatletter
+    \@ifstar{\def\eq@tq@star{*}\eq@titleQuiz}%
+{\def\eq@tq@star{x}\eq@titleQuiz}}
+\def\eq@titleQuiz#1{%
+    \gdef\aebTitleQuiz{#1}\def\@currentlabelname{#1}%
+    \gdef\aeb@@titleQuiz{#1}%
+    \gdef\aebtitleQuiz{\mbox{\titleQuizfmt{#1}}\tqhspace}%
+\makeatother}
+\let\aebtitleQuiz\@empty
+\let\aebTitleQuiz\@empty
+\newcommand\titleQuizfmt{\bfseries}
+\def\ifQuizType#1#2{\if\eqQuizType\isQZ\def\qt@next{#1}%
+    \else\def\qt@next{#2}\fi\qt@next}
+\def\eq@ifstaroption#1#2{\if\eq@tq@star*\def\sq@next{#1}%
+    \else\def\sq@next{#2}\fi\sq@next}
+\let\eq@tq@star\relax
+\def\ifstaroption{\PackageWarning{exerquiz}
+    {\protect\ifstaroption\space is only defined within the\MessageBreak
+    shortquiz environment. Gobbling up its two\MessageBreak
+    arguments, sorry. This occurred}%
+    \@gobbletwo
+}
+\newcounter{qMarkCnt}
+\def\multipartquestion{\global\let\aeb@multipart\eq@One}
+\providecommand{\ptsLabel}[1]{\def\eqptsLabel{#1}}\ptsLabel{pts}
+\providecommand{\ptLabel}[1]{\def\eqptLabel{#1}}\ptLabel{pt}
+\let\aeb@multipart\eq@Zero
+\newcommand\pcMarkupColor{red}
+\def\markupWidth{12bp}\def\markupHeight{8bp}\def\markupTextSize{0}
+\newcommand{\aeb@creditmarkup}{%
+    \textField[\Ff\FfReadOnly\BC{}\F\FHidden
+    \textColor{\pcMarkupColor}\textSize{\markupTextSize}\autoCenter{n}%
+    \DV{0 \eqptsLabel}\V{0 \eqptsLabel}]%
+    {qMark.\currQuiz.\thequestionno.\arabic{qMarkCnt}}%
+    {\markupWidth}{\markupHeight}%
+}
+\def\showCreditMarkup{%
+    \def\qMark{\if\aeb@multipart\eq@Zero\aeb@creditmarkup
+    \stepcounter{qMarkCnt}\else\global\let\aeb@multipart\eq@Zero\fi}%
+    \def\qMark@Hook{\aeb@creditmarkupfmt}%
+}
+\def\hideCreditMarkup{\global\let\qMark@Hook\@empty}
+\newcommand{\aeb@creditmarkupfmt}{\makebox[0pt][r]{\qMark\hspace{-2bp}}}
+\long\def\gobbleToEndQt#1\endeqQt{\ifeqforpaper\expandafter\@gobble\fi}
+\long\def\gobbleToEndSQt#1\endeqSQt{%
+    \ifeqforpaper\expandafter\@gobble\fi}
+\newcommand\inclQtFilter[1]{\def\eqarg{#1}\ifx\eqarg\eqFilterArg
+    \else\expandafter\gobbleToEndQt\fi}
+\newcommand{\exclQt}[1]{\gobbleToEndQt}
+\newcommand{\useQtFilter}{%
+    \let\eqQt\inclQtFilter\let\eqSQt\exclSQt
+}
+\newcommand\inclSQtFilter[1]{\def\eqarg{#1}\ifx\eqarg\eqFilterArg
+    \else\expandafter\gobbleToEndSQt\fi}
+\newcommand{\exclSQt}[1]{\gobbleToEndSQt}
+\newcommand{\useSQtFilter}{\let\eqSQt\inclSQtFilter\let\eqQt\exclQt}
+\newcommand{\sqbookmarkfmt}{Short Quiz \@shortquizCnt.\space}
+\newcommand{\qzbookmarkfmt}{Quiz \@quizCnt.\space}
+\newcommand{\quizpdfbookmark}[1]{\relax\def\argi{#1}%
+    \if\eqQuizType\isSQZ\edef\aeb@bmmrkdest{sqbm.\@shortquizCnt}%
+    \def\aeb@thisbkmrkfmt{\sqbookmarkfmt}\else
+    \edef\aeb@bmmrkdest{qzbm.\@quizCnt}%
+    \def\aeb@thisbkmrkfmt{\qzbookmarkfmt}\fi
+    \def\quizpdfbookmarktitle{#1}%
+    \def\eqex@next{\belowpdfbookmark{\aeb@thisbkmrkfmt#1}%
+        {\aeb@bmmrkdest}}%
+    \ifx\aebTitleQuiz\@empty\else\ifx\argi\@empty
+        \def\quizpdfbookmarktitle{\aebTitleQuiz}%
+        \def\eqex@next{\belowpdfbookmark{\aebTitleQuiz}%
+        {\aeb@bmmrkdest}}\fi\fi
+    \eqex@next\ignorespaces
+}
+\def\pushEnvir{\xdef\eq@currenvir{\@currenvir}\endgroup}
+\def\popEnvir{\begingroup\@endpefalse
+    \edef\@currenvir{\eq@currenvir}%
+    \edef\@currenvline{\on@line}%
+}
+\def\answers@sq{\parindent0pt
+    \ifx\solutionparshape\@empty\else
+        \pushEnvir\par\noindent\expandafter\popEnvir\fi
+    \stepcounter{questionno}%
+    \if\sqstar*\relax
+        \if\aeb@FLOverride\eq@l
+            \let\@Ans\Ans@sq@l\else
+            \let\@Ans\Ans@sq@f\fi
+    \else
+        \if\aeb@FLOverride\eq@f
+            \let\@Ans\Ans@sq@f\else
+            \let\@Ans\Ans@sq@l\fi
+    \fi
+    \def\aeb@answerType{r}\@ifnextchar[{\answers@@sq}%
+    {\@ifstar{\answers@@sq[\curr@quiz.\thequestionno]}{\answers@@sq[]}}}
+\def\manswers@sq{\parindent0pt
+    \@ifundefined{ifuserectforms}{}
+        {\if\aeb@FLOverride\eq@f\ifuserectforms
+            \useRectForMC\else\useCircForMC\fi\fi}%
+    \ifx\solutionparshape\@empty\else
+        \pushEnvir\par\noindent\expandafter\popEnvir\fi
+    \stepcounter{questionno}%
+    \if\sqstar*\relax
+        \if\aeb@FLOverride\eq@l
+        \let\@Ans\Ans@ck@sq@l\else
+        \let\@Ans\Ans@ck@sq@f\fi
+    \else
+        \if\aeb@FLOverride\eq@f
+            \let\@Ans\Ans@ck@sq@f\else
+            \let\@Ans\Ans@ck@sq@l\fi
+    \fi
+    \def\aeb@answerType{c}\@ifnextchar[{\answers@@sq}%
+    {\@ifstar{\answers@@sq[\curr@quiz.\thequestionno]}{\answers@@sq[]}}}
+\let\sq@hwdest\@empty % hard-wired destination
+\def\answers@@sq[#1]#2{%
+    \xdef\aeb@numCols{#2}%
+    \ifx\sq@hwdest\@empty
+        \xdef\@qzsolndest{#1}\else
+        \gdef\@qzsolndest{\sq@hwdest}\fi
+    \if\aeb@numCols1\gdef\eq@listType{1}\expandafter\answers@sq@list
+    \else
+        \gdef\eq@listType{0}\expandafter\answers@@sq@tabular
+    \fi{\aeb@numCols}%
+}
+\def\setMClabelsepDefault#1{\def\eq@hspanner@default{#1}}
+\def\setMClabelsep#1{\def\eq@hspanner{#1}}
+\setMClabelsep{\ }\setMClabelsepDefault{\ }
+\def\resetMClabelsep{\expandafter\setMClabelsep\expandafter
+    {\eq@hspanner@default}}
+\def\eq@lw@l{\eq@l@l\eq@hspanner}
+\def\eq@l@l{\normalsize\normalfont(d)}
+\def\eq@lw@f{\kern\RadioFieldSize\eq@hspanner}
+\@ifundefined{ifwithsoldoc}{\newif\ifwithsoldoc\withsoldocfalse}{}
+\let\eq@ansChoiceArray\@empty
+\def\eq@recordAnsChoice{%
+    \ifx\eq@ansChoiceArray\@empty
+        \edef\tmp@exp{\noexpand\g@addto@macro
+            \noexpand\eq@ansChoiceArray{"\alph{quizno}"}}\else
+        \edef\tmp@exp{\noexpand\g@addto@macro
+            \noexpand\eq@ansChoiceArray{,"\alph{quizno}"}}\fi
+        \tmp@exp
+}
+\newcommand\Ans@list[2][0]{\gdef\eq@pPTs{#1}\xdef\Ans@choice{#2}%
+    \item\relax\noindent\if\eq@listType\eq@One
+    \addtocounter{quizno}{-1}\@ifundefined{ifwithsoldoc}
+        {\refstepcounter{quizno}}{\ifwithsoldoc\stepcounter{quizno}\else
+        \refstepcounter{quizno}\fi}\fi
+        \ignorespaces}
+\newenvironment{answers@sq@list}[1]
+{%
+    \ifx\aeb@answerType\eq@r
+        \let\endanswers\endanswers@sq@list\else
+        \let\endmanswers\endanswers@sq@list\fi
+    \list{\strut\@Ans}{%
+        \if\sqstar*\relax
+            \settowidth{\labelwidth}{\eq@lw@f}\else
+            \settowidth{\labelwidth}{\eq@lw@l}\fi
+        \setlength{\topsep}{-\parskip+\aboveanswersSkip}%
+        \setlength{\parsep}{0pt}\setlength{\itemindent}{0pt}%
+        \setlength{\itemsep}{0pt}\setlength{\partopsep}{0pt}%
+        \setlength{\listparindent}{\parindent}%
+        \ifnum\exerwparts@cols>1\relax
+            \ifx\itsExerParts\eq@YES
+             \setlength{\leftmargin}{\labelwidth}\else
+             \setlength{\leftmargin}{\labelwidth+\eqemargin}\fi
+        \else
+        \ifx\solutionparshape\@empty
+            \setlength{\leftmargin}{\labelwidth}\else
+            \setlength{\leftmargin}{\labelwidth+\eqemargin}\fi\fi
+       \setlength{\labelsep}{0pt}%
+%      \settowidth{\labelsep}{\eq@hspanner}%
+        \def\Ans{\Ans@list}%
+    }%
+}%
+{\endlist\setcounter{quizno}{0}\eq@answersEndHook}
+\newcommand\Ans@tabular[2][0]{\gdef\eq@pPTs{#1}\xdef\Ans@choice{#2}%
+    \leavevmode\@Ans
+}
+\newcommand\sqtabsep[1]{\def\eq@argi{#1}\ifx\eq@argi\@empty
+    \def\sq@tabsep{1.5pt}\else\def\sq@tabsep{#1}\fi}
+\sqtabsep{1.5pt}
+\def\sqTabPos#1{\def\sq@TabPos{[#1]}}\sqTabPos{}
+\def\answers@@sq@tabular#1{%
+    \ifinner
+        \ifx\itsExerParts\eq@YES\par\removelastskip
+            \removelastparskip\vskip\aboveanswersSkip\fi
+    \else\par\removelastskip\removelastparskip
+        \vskip\aboveanswersSkip\fi
+    \noindent\ifnum\exerwparts@cols>1\relax\parshape=0\fi
+    \tabcolsep=0pt
+    \eq@tmpdima=\linewidth
+    \@tempcnta#1\relax
+    \advance\@tempcnta-1\relax
+    \multiply\@tempcnta by2
+    \@tempdima\sq@tabsep\relax
+    \multiply\@tempdima\@tempcnta
+    \advance\eq@tmpdima-\@tempdima
+    \divide\eq@tmpdima by#1
+    \def\Ans{\Ans@tabular}%
+    \tabcolsep\sq@tabsep\relax
+    \expandafter\tabular\sq@TabPos{@{}*{#1}{p{\eq@tmpdima}}@{}}}%
+\let\eq@save@doendpe\@doendpe
+\def\reset@doendpe#1{\global\eq@scratchtoks=\expandafter{#1}%
+    \gdef\@doendpe{\par\@endpetrue\global\let\@doendpe\eq@save@doendpe
+        \def\par{\@restorepar
+        \expandafter\everypar
+            \expandafter{\the\eq@scratchtoks}\par\@endpefalse}%
+        \everypar{{\setbox\z@\lastbox}%
+            \everypar{}\@endpefalse}\the\eq@scratchtoks
+    }%
+}
+\newcommand\answersEndHook[1]{\def\eq@answersEndHook{#1}}
+\let\eq@answersEndHook\@empty
+\def\endanswers@sq{\endtabular\setcounter{quizno}{0}%
+    \eq@answersEndHook\reset@doendpe{\the\everypar}%
+    \ifinner\else%\par
+        \removelastskip
+        \vspace{\aboveanswersSkip}\@endpetrue\fi
+}
+\def\endmanswers@sq{\endtabular\setcounter{quizno}{0}%
+    \eq@answersEndHook\reset@doendpe{\the\everypar}%
+    \ifinner\else%\par
+        \removelastskip
+        \vspace{\aboveanswersSkip}\@endpetrue\fi
+}
+\def\popiiictm{\special{CTM: pop pop pop}}
+\def\sqWrongRespJS{OnBlurRespBox( false, "\oField" );}
+\def\sqRightRespJS{OnBlurRespBox( true, "\oField" );}
+\def\Ans@sq@l@Actions
+{%
+    \A{\if\Ans@choice1
+        \JS{\sqRightRespJS}
+        \ifx\@qzsolndest\@empty\else
+            \ifeq@solutionsafter\else
+                /Next <</S/GoTo/D(\@qzsolndest)>>
+            \fi
+        \fi
+    \else
+        \JS{\sqWrongRespJS\jsR
+        \ifx\oField\@empty\else
+            updateTally("\oField.\thequestionno");
+        \fi}%
+    \fi
+    }%
+}
+\def\linkContentFormat{\alph{quizno}}
+\def\aebChoiceAltFmt{\noexpand\ifaebshowgrayletters
+    \Alph{quizno}\noexpand\else\linkContentFormat\noexpand\fi}
+\def\linkContentWrapper{(\hfil\linkContentFormat\hfil)}%
+\def\Ans@sq@l{%
+    \leavevmode\if\eq@listType\eq@One\stepcounter{quizno}\else
+        \@ifundefined{ifwithsoldoc}{\refstepcounter{quizno}}
+        {\ifwithsoldoc\stepcounter{quizno}\else
+        \refstepcounter{quizno}\fi}\fi\PBS\raggedright
+    \settowidth{\eq@tmplength}{\eq@lw@l}\sbox{\eq@tmpbox}{\eq@l@l}%
+    \eq@tmpdima=\wd\eq@tmpbox
+    \def\link@@Content{\linkContentWrapper}%
+    \hangindent=\eq@tmplength\hangafter=1\relax
+    \set@@Link{}{}{}%
+        {\makebox[\eq@tmpdima]{\color{\@linkcolor}\link@@Content}}
+        {\eq@protect\A}{\eq@setWidgetProps\setLink@driver}%
+        {\set@LinkTextDefaults\Ans@sq@l@Actions\every@Link}%
+    \Ans@proofing{\eq@tmpdima}%
+\eq@hspanner\ignorespaces}
+\def\Ans@ck@sq@l{\Ans@ck@sq@f}
+\def\@@Ans@sq@f@Defaults
+{%
+    \BC{0 0 0}\Ff{\FfNoToggleToOff}\W{1}
+    \F{\FPrint}\textSize{12}\textColor{0 g}
+}
+\def\sqTurnOffAlerts{\let\@sqTurnOffAlerts\eq@Zero}
+\def\sqTurnOnAlerts{\let\@sqTurnOffAlerts\eq@One}
+\sqTurnOnAlerts
+\def\sqNoCorrections{\let\@sqAlertsOnly\eq@One}
+\def\sqCorrections{\let\@sqAlertsOnly\eq@Zero}
+\sqNoCorrections
+\def\Ans@sq@f@ActionsTrue{%
+  \if\@sqTurnOffAlerts1OnBlurRespBox(true,"\oField");\jsR\fi
+  \ifx\@qzsolndest\@empty\else\ifeq@solutionsafter\else
+    jmpToNamedDest("\oField","\@qzsolndest",%
+        \if\@sqTurnOffAlerts00\else1\fi);\fi
+  \fi\eqAddAAMouseUpMC}
+\def\Ans@sq@f@ActionsFalse{%
+  \if\@sqTurnOffAlerts1OnBlurRespBox(false,"\oField" );\jsR\fi
+  \ifx\oField\@empty\else
+    updateTally("\oField.\thequestionno");
+  \fi\jsR\eqAddAAMouseUpMC}
+\def\Ans@sq@f@Actions{\A{\if\Ans@choice\eq@One
+    \JS{\Ans@sq@f@ActionsTrue}\else
+    \JS{\Ans@sq@f@ActionsFalse}\fi}%
+    \AAmousedown{updateTally.downState=!!event.target.isBoxChecked%
+      (\arabic{quizno}-1);}}
+\def\Ans@proofing#1{\ifeq@proofing\if\Ans@choice1\relax
+    \llap{\@proofingsymbol\,\hskip#1\relax}%
+  \fi\fi}
+\def\sqRghtSymbChoice#1{\chooseJSsymbol*{#1}%
+    \ifx\eq@retnStyle\@empty
+    \edef\sq@corrsymch{\sqRghtSymbChoiceDef}\else
+    \edef\sq@corrsymch{#1}\fi}
+\def\sqRghtSymbColor#1{\edef\eq@arg{#1}\ifx\eq@arg\@empty
+    \edef\sq@corrsymcol{\sqRghtSymbColorDef}\else
+    \edef\sq@corrsymcol{#1}\fi}
+\def\sqWrngSymbChoice#1{\chooseJSsymbol*{#1}%
+    \ifx\eq@retnStyle\@empty
+    \edef\sq@wrgsymch{\sqWrngSymbChoiceDef}\else
+    \edef\sq@wrgsymch{#1}\fi}
+\def\sqWrngSymbColor#1{\edef\eq@arg{#1}\ifx\eq@arg\@empty
+    \edef\sq@wrgsymcol{\sqWrngSymbColorDef}\else
+    \edef\sq@wrgsymcol{#1}\fi}
+\def\sqRghtSymbChoiceDef{check}
+\def\sqRghtSymbColorDef{0 .6 0 rg}
+\def\sqWrngSymbChoiceDef{cross}
+\def\sqWrngSymbColorDef{1 0 0 rg}
+\edef\sq@corrsymch{\sqRghtSymbChoiceDef}
+\edef\sq@corrsymcol{\sqRghtSymbColorDef}
+\edef\sq@wrgsymch{\sqWrngSymbChoiceDef}
+\edef\sq@wrgsymcol{\sqWrngSymbColorDef}
+\def\sqResetSymbToDef{%
+    \sqRghtSymbChoice{}\sqRghtSymbColor{}%
+    \sqWrngSymbChoice{}\sqWrngSymbColor{}%
+}
+\def\qChoiceSymb#1{\chooseJSsymbol*{#1}%
+    \ifx\eq@retnStyle\@empty
+    \edef\qz@chksymb{\qChoiceSymbDef}\else
+    \edef\qz@chksymb{#1}\fi}
+\def\qChoiceColor#1{\edef\eq@arg{#1}\ifx\eq@arg\@empty
+    \edef\qz@chksymbcol{\qChoiceColorDef}\else
+    \edef\qz@chksymbcol{#1}\fi}
+\def\qChoiceSymbDef{check}
+\def\qChoiceColorDef{0 0 0 rg}
+\edef\qz@chksymb{\qChoiceSymbDef}
+\edef\qz@chksymbcol{\qChoiceColorDef}
+\let\rbf@Opts\@empty
+\def\Ans@sq@f{%
+    \if\eq@listType\eq@One\stepcounter{quizno}\else
+        \@ifundefined{ifwithsoldoc}{\refstepcounter{quizno}}
+        {\ifwithsoldoc\stepcounter{quizno}\else
+        \refstepcounter{quizno}\fi}\fi\PBS\raggedright
+    \if\Ans@choice\eq@One
+        \def\rbf@Opts{\symbolchoice{\sq@corrsymch}%
+            \textColor{\sq@corrsymcol}}\else
+        \def\rbf@Opts{\symbolchoice{\sq@wrgsymch}%
+            \textColor{\sq@wrgsymcol}}\fi
+    \settowidth{\eq@tmplength}{\eq@lw@f}%
+    \eq@tmpdima=\wd\eq@tmpbox%
+    \hangindent=\eq@tmplength\hangafter=1\relax
+    \insertGrayLetters % 6.3d
+    \mbox{\expandafter\radio@@Button\expandafter{\rbf@Opts}%
+        {mc.\oField.\thequestionno}%
+        {\RadioFieldSize}% 11/16/05 changed from \oField to mc.\oField
+        {\RadioFieldSize}{\Ans@choice\alph{quizno}}{\eq@protect\A}%
+        {\eq@setWidgetProps\eq@RadioCheck@driver}%
+        {\@@Ans@sq@f@Defaults\Ans@sq@f@Actions\every@RadioButton
+         \every@sqRadioButton}}%
+    \Ans@proofing{\RadioFieldSize}%
+\eq@hspanner\ignorespaces}
+\def\@@Ans@ck@sq@f@Defaults
+{%
+    \BC{0 0 0}\Ff{\FfNoToggleToOff}
+    \F{\FPrint}\textSize{12}\textColor{0 g}\W{1}
+}
+\begingroup
+\catcode`\&=12
+\gdef\eq@AND{&&}
+\endgroup
+\def\Ans@ck@sq@f@ActionsTrue{%
+  var fName=event.target.name;\jsR
+  var g=this.getField("mc.\oField.\thequestionno");\jsR
+  var a=g.getArray();\jsR
+  for (var i=0; i<a.length; i++)\jsR\jsT
+    if ( a[i].isBoxChecked(0) \eq@AND\space
+      a[i].value.charAt(0)==0)\jsR\jsT\jsT
+   a[i].checkThisBox(0,false);\jsR
+      \if\@sqTurnOffAlerts1OnBlurRespBox(%
+        true,"\oField");\jsR\fi
+      \ifx\@qzsolndest\@empty\else
+        \ifeq@solutionsafter\else
+  % if all correct answers are check, jump to solution
+          for (var i=0; i<a.length; i++){\jsR\jsT
+            if ( a[i].exportValues[0].charAt(0)==1 \eq@AND\space
+              !a[i].isBoxChecked(0))\jsR\jsT\jsT
+              break;\jsR
+          }\jsR
+          if (i>=a.length) jmpToNamedDest("\oField","\@qzsolndest",%
+          \if\@sqTurnOffAlerts00\else1\fi);
+        \fi
+      \fi\eqAddAAMouseUpMS}
+\def\Ans@ck@sq@f@ActionsFalse{%
+  var fName=event.target.name;\jsR
+  var g=this.getField("mc.\oField.\thequestionno");\jsR
+  var a=g.getArray();\jsR
+  for (var i=0; i<a.length; i++)\jsR
+  {\jsR\jsT
+   if (a[i].value.charAt(0)==0) {\jsR\jsT\jsT
+   if ( fName != a[i].name )\jsR\jsT\jsT\jsT
+     a[i].checkThisBox(0,false);\jsR\jsT
+   }\jsR
+  }\jsR
+  \if\@sqTurnOffAlerts1OnBlurRespBox( false, "\oField" );\fi
+  \ifx\oField\@empty\else
+    updateTally("\oField.\thequestionno");
+  \fi\eqAddAAMouseUpMS}
+\def\Ans@ck@sq@f@Actions{%
+  \A{\if\Ans@choice\eq@One
+    \JS{\Ans@ck@sq@f@ActionsTrue}\else
+    \JS{\Ans@ck@sq@f@ActionsFalse}\fi}%
+  \AAmousedown{updateTally.downState=!!event.target.isBoxChecked(0);}}
+\def\Ans@ck@sq@f{%
+    \if\eq@listType\eq@One\stepcounter{quizno}\else
+        \@ifundefined{ifwithsoldoc}{\refstepcounter{quizno}}
+        {\ifwithsoldoc\stepcounter{quizno}\else
+        \refstepcounter{quizno}\fi}\fi\PBS\raggedright
+    \if\Ans@choice1%
+        \def\rbf@Opts{\symbolchoice{\sq@corrsymch}%
+            \textColor{\sq@corrsymcol}}\else
+        \def\rbf@Opts{\symbolchoice{\sq@wrgsymch}%
+            \textColor{\sq@wrgsymcol}}\fi
+    \settowidth{\eq@tmplength}{\eq@lw@f}%
+    \eq@tmpdima=\wd\eq@tmpbox%
+    \hangindent=\eq@tmplength\hangafter=1\relax
+    \insertGrayLetters % 6.3d
+    \mbox{\expandafter\check@@Box\expandafter{\rbf@Opts}%
+        {mc.\oField.\thequestionno.\arabic{quizno}}%
+        {\RadioFieldSize}{\RadioFieldSize}
+        {\Ans@choice\alph{quizno}}{\eq@protect\A}%
+        {\eq@setWidgetProps\eq@RadioCheck@driver}%
+        {\@@Ans@ck@sq@f@Defaults\Ans@ck@sq@f@Actions\every@CheckBox
+         \every@sqCheckBox}}%
+    \Ans@proofing{\RadioFieldSize}%
+\eq@hspanner\ignorespaces}
+\newskip\aboveanswersSkip
+\setlength\aboveanswersSkip{3pt}
+\let\q@hwdest\@empty % hard-wired destination
+\let\pointValuesArray\@empty
+\newif\ifeqshowmarkup\eqshowmarkupfalse
+\newif\ifeqshowOutOf \eqshowOutOffalse
+\def\showOutOfinSmryTbl{false}
+\def\eq@recordThesePTs{%
+    \ifx\pointValuesArray\@empty
+    \edef\ptsValue{\showOutOfinSmryTbl,\eqPTs}\else
+        \edef\ptsValue{,\eqPTs}\fi
+    \expandafter\g@addto@macro\expandafter\pointValuesArray
+    \expandafter{\ptsValue}}
+\let\ptypeArray\@empty
+\def\eq@recordProbType{%
+    \ifx\ptypeArray\@empty
+        \edef\tmp@exp{\noexpand\g@addto@macro
+            \noexpand\ptypeArray{null,"\eqQT"}}\else
+        \edef\tmp@exp{\noexpand\g@addto@macro
+            \noexpand\ptypeArray{,"\eqQT"}}\fi
+        \tmp@exp
+}
+\let\corrAnsArray\@empty
+\def\eq@recordCorrAns#1{%
+    \ifx\corrAnsArray\@empty
+        \edef\tmp@exp{\noexpand\g@addto@macro
+            \noexpand\corrAnsArray{null,#1}}\else
+        \edef\tmp@exp{\noexpand\g@addto@macro
+            \noexpand\corrAnsArray{,#1}}\fi
+        \tmp@exp
+}
+\def\aeb@answerType@r{r}
+\def\aeb@answerType@c{c}
+\newcommand\answers@q{%
+    \eq@AddProbToQzQuesList
+    \def\aeb@answerType{r}\setdefault@Ans\eq@recordThesePTs
+    \eq@recordProbType
+    \addtocounter{eqpointvalue}{\eqPTs}\stepcounter{questionno}%
+    \def\aeb@thisType{"mc"}\@ifnextchar[{\answers@@q}%
+    {\@ifstar{\answers@@q[\curr@quiz.\thequestionno]}{\answers@@q[]}}%
+}
+\def\answers@@q[#1]#2{\global\let\eq@ansChoiceArray\@empty
+    \xdef\aeb@numCols{#2}\edef\eqtmp{\aPointType}%
+    \xdef\aPointType{\eqtmp,[\eqPTs,\aeb@thisType]}%
+    \ifx\q@hwdest\@empty
+        \xdef\@qzsolndest{#1}\else
+        \gdef\@qzsolndest{\q@hwdest}\fi
+    \ifnum\aeb@numCols=1
+    \gdef\eq@listType{1}\expandafter\answers@q@list\else
+    \gdef\eq@listType{0}\expandafter\answers@q@tabular\fi{\aeb@numCols}%
+}
+\newcommand\manswers@q
+{%
+    \eq@AddProbToQzQuesList
+    \def\aeb@answerType{c}\@setFormLinkType
+    \global\expandafter\let\expandafter\@Ans
+    \expandafter=\csname Ans@ck@\@@quiztype\endcsname
+    \eq@recordThesePTs\eq@recordProbType
+    \addtocounter{eqpointvalue}{\eqPTs}\stepcounter{questionno}%
+    \def\aeb@thisType{"ms"}\@ifnextchar[{\answers@@q}%
+    {\@ifstar{\answers@@q[\curr@quiz.\thequestionno]}{\answers@@q[]}}%
+}
+\newenvironment{answers@q@list}[1]{%
+    \ifx\aeb@answerType\eq@r
+        \let\endanswers\endanswers@q@list\else
+        \let\endmanswers\endanswers@q@list\fi
+    \list{\strut\@Ans}{%
+        \if\qstar*\relax
+            \if\aeb@FLOverride\eq@l
+            \settowidth{\labelwidth}{\eq@lw@l}\else
+            \settowidth{\labelwidth}{\eq@lw@f}\fi
+        \else
+            \if\aeb@FLOverride\eq@f
+            \settowidth{\labelwidth}{\eq@lw@f}\else
+            \settowidth{\labelwidth}{\eq@lw@l}\fi
+        \fi
+        \setlength{\topsep}{-\parskip+\aboveanswersSkip}%
+        \setlength{\parsep}{0pt}\setlength{\itemindent}{0pt}%
+        \setlength{\listparindent}{\parindent}%
+        \setlength{\leftmargin}{\labelwidth}%
+        \setlength{\labelsep}{0pt}%
+        \def\Ans{\Ans@list}%
+    }%
+}{\endlist\setcounter{quizno}{0}%
+    \eq@answersEndHook
+    \setdefault@Ans
+    \ifx\aeb@answerType\aeb@answerType@r
+        \eq@recordCorrAns{\eq@ansChoiceArray}\ifwithinMCFI
+            \eq@recordCorrAns{\s@veCorrAnsMCFI}\fi\else
+            \eq@recordCorrAns{[\eq@ansChoiceArray]}\fi
+    \global\let\eqlimselTo\@empty
+}
+\newcommand\qztabsep[1]{\def\eq@argi{#1}\ifx\eq@argi\@empty
+    \def\qz@tabsep{1.5pt}\else\def\qz@tabsep{#1}\fi}
+\qztabsep{1.5pt}
+\def\qzTabPos#1{\def\qz@TabPos{[#1]}}\qzTabPos{}
+\def\answers@q@tabular#1{%
+    \ifinner\else\par\removelastparskip\vspace{\aboveanswersSkip}\fi
+    \eq@tmpdima=\linewidth
+    \@tempcnta#1\relax
+    \advance\@tempcnta-1\relax
+    \multiply\@tempcnta by2
+    \@tempdima\qz@tabsep\relax
+    \multiply\@tempdima\@tempcnta
+    \advance\eq@tmpdima-\@tempdima
+    \divide\eq@tmpdima by#1
+    \tabcolsep\qz@tabsep\relax
+    \def\Ans{\Ans@tabular}%
+    \ifx\aeb@answerType\eq@r
+        \let\endanswers\endanswers@q@tabular\else
+        \let\endmanswers\endanswers@q@tabular\fi
+    \noindent\expandafter
+        \tabular\qz@TabPos{@{}*{#1}{p{\eq@tmpdima}}@{}}%
+}
+\def\endanswers@q@tabular
+{%
+    \endtabular\setcounter{quizno}{0}%
+    \eq@answersEndHook
+    \setdefault@Ans
+    \ifx\aeb@answerType\aeb@answerType@r
+        \eq@recordCorrAns{\eq@ansChoiceArray}\ifwithinMCFI
+        \eq@recordCorrAns{\s@veCorrAnsMCFI}\fi\else
+        \eq@recordCorrAns{[\eq@ansChoiceArray]}\fi
+    \global\let\eqlimselTo\@empty
+}
+\let\qRadionActionsHook\@empty
+\def\Ans@@l@Actions{\A{\JS{%
+   this.getField("mc.\curr@quiz.\thequestionno").value
+        = "\Ans@choice\alph{quizno}";\jsR
+   RecordPointValue([0,\eqPTs,\eq@pPTs],\thequestionno);\jsR
+   RecordProblemType("\eqQT",\thequestionno);\jsR
+   ProcessQuestion(\Ans@choice,"\alph{quizno}",\thequestionno,%
+\arabic{quizno},"\curr@quiz",0,\ifnocorrections0\else1\fi,%
+"\bqlabelISO"\if\eqQuizType\isQZ\ifx\eq@online\eq@YES
+\ifeq@noquizsolutions\else,1\fi\fi\fi);\qRadionActionsHook}}%
+}
+\def\Ans@r@l@Defaults
+{%
+    \BC{}\S{S}\W{1}\Ff{\FfNoToggleToOff}\F{\FPrint}
+    \textSize{12}\textColor{0 g}\Ff{\FfReadOnly}
+}
+\def\Ans@l{\leavevmode\if\eq@listType1\stepcounter{quizno}%
+    \else\refstepcounter{quizno}\fi\PBS\raggedright
+    \settowidth{\eq@tmplength}{\eq@lw@l}\sbox{\eq@tmpbox}{\eq@l@l}%
+    \hangindent=\eq@tmplength\hangafter=1\relax
+    \eq@tmpdima=\wd\eq@tmpbox
+    \def\link@@Content{(\hfil\linkContentFormat\hfil)}%
+    \def\late@options{\BC{}}%
+\if\Ans@choice1\relax\eq@recordAnsChoice\fi
+    \makebox[0pt][l]{\radio@@Button{}{mc.\curr@quiz.\thequestionno}%
+        {\eq@tmpdima}{\RadioFieldSize}{\Ans@choice\alph{quizno}}%
+        {\eq@protect\A}{\eq@setWidgetProps\eq@l@check@driver}%
+        {\Ans@r@l@Defaults\every@RadioButton
+        \every@qRadioButton\late@options}}%
+    \set@@Link{}{}{}%
+    {\makebox[\eq@tmpdima]{\color{\@linkcolor}\link@@Content}}%
+    {\eq@protect\A}{\eq@setWidgetProps\setLink@driver}%
+    {\set@LinkTextDefaults\Ans@@l@Actions\every@Link}%
+    \ifnocorrections\else
+        \if\Ans@choice1\relax
+            \edef\Ans@c@l@Choice{\noexpand\DV{Yes}%
+                \ifx\@qzsolndest\@empty
+                    \noexpand\Ff{\FfReadOnly}%
+                \else % there is a solution
+                    \ifeq@noquizsolutions
+                        \noexpand\Ff{\FfReadOnly}%
+                    \else
+                        \noexpand\A{\noexpand\quiz@SolutionActionHook}%
+                    \fi
+                \fi
+            }%
+        \else
+            \def\Ans@c@l@Choice{\Ff{\FfReadOnly}\BC{}}%
+        \fi
+        \def\late@options{\BC{}}%
+        \if\Ans@choice1\relax
+            \ifx\@qzsolndest\@empty\else
+                \ifeq@noquizsolutions\else
+                    \edef\late@options{\noexpand\BC{\solution@Color}}%
+                \fi
+            \fi
+        \fi
+        \makebox[0pt][r]{\check@@Box{}%
+            {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}%
+            {\eq@tmpdima}{0pt}{Yes}{}% \@tempdimb
+            {\eq@setWidgetProps\eq@l@check@driver}%
+            {\Ans@c@f@Defaults\Ans@c@l@Choice\every@RadioButton
+             \every@qRadioButton\late@options}}%
+    \fi
+    \Ans@proofing{\eq@tmpdima}%
+\eq@hspanner\ignorespaces}
+\def\Ans@ck@@l@Actions{\A{\JS{%
+    var ckfName="mck.\curr@quiz.\thequestionno.\arabic{quizno}";\jsR
+    var ckf = this.getField(ckfName);\jsR
+    ckf.checkThisBox(0,!ckf.isBoxChecked(0));\jsR
+    var _bOK=true;\jsR
+\ifx\eqlimselTo\@empty\else _bOK = LimitSelection(\eqlimselTo,%
+"mck.\curr@quiz.\thequestionno","\arabic{quizno}");\jsR\fi
+if (_bOK) {\jsR\jsT
+       var aPMSretn=ProcessMultiSelection(\Ans@choice,"\alph{quizno}",%
+\thequestionno,\arabic{quizno},"\curr@quiz",\eqPTs,\eq@pPTs);\jsR\jsT
+       RecordProblemType("\eqQT",\thequestionno);\jsR\jsT
+       ProcessQuestion(aPMSretn[0],aPMSretn[1],\thequestionno,%
+\arabic{quizno},"\curr@quiz",0,\ifnocorrections0\else1\fi,%
+"\bqlabelISO"\if\eqQuizType\isQZ\ifx\eq@online\eq@YES
+\ifeq@noquizsolutions\else,1\fi\fi\fi);\jsR
+}
+    }}
+}
+\def\Ans@ck@l@Defaults
+{%
+    \BC{}\S{S}\W{1}\H{N}\Ff{\FfNoToggleToOff}
+    \textSize{12}\textColor{0 g}\Ff{\FfReadOnly}
+}
+\def\Ans@ck@l{%
+    \leavevmode\if\eq@listType1\stepcounter{quizno}%
+    \else\refstepcounter{quizno}\fi
+    \if\Ans@choice1\eq@recordAnsChoice\fi\PBS\raggedright
+    \settowidth{\eq@tmplength}{\eq@lw@l}\sbox{\eq@tmpbox}{\eq@l@l}%
+    \hangindent=\eq@tmplength\hangafter=1\relax
+    \eq@tmpdima=\wd\eq@tmpbox
+    \def\link@@Content{(\hfil\linkContentFormat\hfil)}%
+    \makebox[0pt][l]{%
+        \check@@Box{}{mck.\curr@quiz.\thequestionno.\arabic{quizno}}%
+        {\eq@tmpdima}{\RadioFieldSize}{\Ans@choice\alph{quizno}}%
+        {\eq@protect\A}{\eq@setWidgetProps\eq@l@check@driver}%
+        {\Ans@ck@l@Defaults\every@RadioButton
+         \every@qckCheckbox}}%
+    \set@@Link{}{}{}%
+    {\makebox[\eq@tmpdima]{\color{\@linkcolor}\link@@Content}}%
+    {\eq@protect\A}{\eq@setWidgetProps\setLink@driver}%
+    {\set@LinkTextDefaults\Ans@ck@@l@Actions\every@Link}%
+    \ifnocorrections\else
+        \if\Ans@choice1\relax
+            \edef\Ans@c@l@Choice{\noexpand\DV{Yes}%
+                \ifx\@qzsolndest\@empty\noexpand\BC{}%
+                \noexpand\Ff{\FfReadOnly}%
+                \else % there is a solution
+                    \ifeq@noquizsolutions
+                        \noexpand\BC{}\noexpand\Ff{\FfReadOnly}%
+                    \else
+                        \noexpand\BC{\solution@Color}%
+                        \noexpand\A{\noexpand\quiz@SolutionActionHook}%
+                    \fi
+                \fi
+            }%
+        \else
+            \def\Ans@c@l@Choice{\Ff{\FfReadOnly}\BC{}}%
+        \fi
+        \makebox[0pt][r]{\check@@Box{}%
+            {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}%
+            {\eq@tmpdima}{0pt}{Yes}{}%
+            {\eq@setWidgetProps\eq@l@check@driver}%
+            {\Ans@c@f@Defaults\Ans@c@l@Choice\every@RadioButton
+             \every@qRadioButton}}%
+    \fi
+    \Ans@proofing{\eq@tmpdima}%
+\eq@hspanner\ignorespaces}
+\def\Ans@f{\leavevmode\if\eq@listType1\stepcounter{quizno}%
+    \else\refstepcounter{quizno}\fi
+    \PBS\raggedright\Ans@@f}
+\def\Ans@r@f@Defaults
+{%
+    \BC{0 0 0}\S{S}\W{1}\Ff{\FfNoToggleToOff}
+    \F{\FPrint}\textSize{12}\textColor{0 g}
+}
+\def\Ans@r@f@Actions{\A{\JS{%
+    RecordPointValue([0,\eqPTs,\eq@pPTs],\thequestionno);\jsR
+    RecordProblemType("\eqQT",\thequestionno);\jsR
+    ProcessQuestion(\Ans@choice,"\alph{quizno}",\thequestionno,%
+    \arabic{quizno},"\curr@quiz",0,\ifnocorrections0\else1\fi,%
+    "\bqlabelISO"\if\eqQuizType\isQZ\ifx\eq@online\eq@YES
+    \ifeq@noquizsolutions\else,1\fi\fi\fi);\qRadionActionsHook}}
+}
+\def\quiz@SolutionActionHook{%
+    /S/GoTo/D(\@qzsolndest)/Next<<\JS{this.resetForm(%
+        ["mcq.\curr@quiz.\thequestionno.\arabic{quizno}"]);}>>
+}
+\def\Ans@c@f@Defaults
+{%
+    \BC{0 0 0}\S{S}\W{1}\F{\FHidden}\textSize{12}
+    \textColor{0 g}\symbolchoice{circle}
+}
+\let\bottomOfAnsfStack\relax
+\providecommand\graylettersColor{gray}
+\def\insertGrayLetters{\ifaebshowgrayletters
+    \rlap{\makebox[\RadioFieldSize]%
+        {\textcolor{\graylettersColor}{\Alph{quizno}}}}\else\relax\fi}
+\def\Ans@@f
+{%
+    \settowidth{\eq@tmplength}{\eq@lw@f}%
+    \hangindent=\eq@tmplength\hangafter=1
+    \bottomOfAnsfStack\insertGrayLetters
+    \edef\rbf@Opts{\ifaeb@usecircles\else
+    \noexpand\symbolchoice{\qz@chksymb}\fi
+    \noexpand\textColor{\qz@chksymbcol}}%
+    \if\Ans@choice1\eq@recordAnsChoice\fi
+    \mbox{\expandafter\radio@@Button\expandafter{\rbf@Opts}%
+        {mc.\curr@quiz.\thequestionno}%
+        {\RadioFieldSize}{\RadioFieldSize}{\Ans@choice\alph{quizno}}%
+        {\eq@protect\A}{\eq@setWidgetProps\eq@RadioCheck@driver}%
+        {\Ans@r@f@Defaults\Ans@r@f@Actions\every@RadioButton
+         \every@qRadioButton\insert@circlesymbol}}%
+    \let\late@options\@empty
+    \ifnocorrections\else
+        \if\Ans@choice1\relax
+            \edef\Ans@c@f@Choice{\noexpand\DV{Yes}%
+                \ifx\@qzsolndest\@empty\noexpand\Ff{\FfReadOnly}%
+                \else
+                    \ifeq@noquizsolutions
+                        \noexpand\Ff{\FfReadOnly}%
+                    \else
+                        \noexpand\A{\noexpand\quiz@SolutionActionHook}%
+                    \fi
+                \fi
+            }%
+        \else
+            \def\Ans@c@f@Choice{\Ff{\FfReadOnly}}%
+        \fi
+        \ifaeb@usecircles\def\late@options{\BC{}}\fi
+        \if\Ans@choice1\relax
+            \ifx\@qzsolndest\@empty\else
+                \ifeq@noquizsolutions\else
+                    \edef\late@options{\noexpand\BC{\solution@Color}}%
+                \fi
+            \fi
+        \fi
+        \makebox[0pt][r]{\check@@Box{}%
+            {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}%
+            {\RadioFieldSize}{\RadioFieldSize}{Yes}{}%
+            {\eq@setWidgetProps\eq@RadioCheck@driver}%
+            {\Ans@c@f@Defaults\Ans@c@f@Choice\every@CheckBox
+             \every@qCheckBox\late@options}}%
+    \fi
+    \Ans@proofing{\RadioFieldSize}%
+\eq@hspanner\ignorespaces}
+\def\limitSelectionTo#1{\def\eqlimselTo{#1}}
+\let\eqlimselTo\@empty
+\def\Ans@ck@f{\leavevmode\if\eq@listType1\stepcounter{quizno}%
+    \else\refstepcounter{quizno}\fi
+    \if\Ans@choice1\eq@recordAnsChoice\fi
+    \PBS\raggedright\Ans@@ck@f}
+\def\Ans@ck@f@Defaults
+{%
+    \BC{0 0 0}\S{S}\W{1}\Ff{\FfNoToggleToOff}
+    \textSize{12}\textColor{0 g}
+}
+\def\Ans@ck@f@Actions
+{%
+    \A{\JS{%
+    var _bOK=true;\jsR
+\ifx\eqlimselTo\@empty\else _bOK = LimitSelection(\eqlimselTo,%
+"mck.\curr@quiz.\thequestionno","\arabic{quizno}");\jsR\fi
+if (_bOK) {\jsR\jsT
+       var aPMSretn=ProcessMultiSelection(\Ans@choice,"\alph{quizno}",%
+\thequestionno,\arabic{quizno},"\curr@quiz",\eqPTs,\eq@pPTs);\jsR\jsT
+       RecordProblemType("\eqQT",\thequestionno);\jsR\jsT
+       ProcessQuestion(aPMSretn[0],aPMSretn[1],\thequestionno,%
+\arabic{quizno},"\curr@quiz",0,\ifnocorrections0\else1\fi,%
+"\bqlabelISO"\if\eqQuizType\isQZ\ifx\eq@online\eq@YES
+\ifeq@noquizsolutions\else,1\fi\fi\fi);\jsR
+}}}%
+}
+\def\quiz@SolutionActionHook{%
+    /S/GoTo/D(\@qzsolndest)/Next<<\JS{this.resetForm(%
+["mcq.\curr@quiz.\thequestionno.\arabic{quizno}"]);}>>
+}
+\def\Ans@@ck@f
+{%
+    \settowidth{\eq@tmplength}{\eq@lw@f}%
+    \hangindent=\eq@tmplength\hangafter=1
+    \bottomOfAnsfStack\insertGrayLetters
+    \bottomOfAnsfStack\insertGrayLetters
+\def\cbf@Opts{\symbolchoice{\qz@chksymb}%
+    \textColor{\qz@chksymbcol}}%
+    \mbox{\expandafter\check@@Box\expandafter{\cbf@Opts}%
+        {mck.\curr@quiz.\thequestionno.\arabic{quizno}}%
+        {\RadioFieldSize}{\RadioFieldSize}{\Ans@choice\alph{quizno}}%
+        {\eq@protect\A}{\eq@setWidgetProps\eq@RadioCheck@driver}%
+        {\Ans@ck@f@Defaults\Ans@ck@f@Actions\every@RadioButton
+        \every@qckCheckbox}}%
+    \ifnocorrections\else
+        \if\Ans@choice1\relax
+            \edef\Ans@c@f@Choice{\noexpand\DV{Yes}%
+                \ifx\@qzsolndest\@empty\noexpand\Ff{\FfReadOnly}%
+                \else
+                    \ifeq@noquizsolutions
+                        \noexpand\Ff{\FfReadOnly}%
+                    \else
+                        \noexpand\A{\noexpand\quiz@SolutionActionHook}%
+                    \fi
+                \fi
+            }%
+        \else
+            \def\Ans@c@f@Choice{\Ff{\FfReadOnly}}%
+        \fi
+        \let\late@options\@empty
+        \if\Ans@choice1\relax
+            \ifx\@qzsolndest\@empty\else
+                \ifeq@noquizsolutions\else
+                    \edef\late@options{\noexpand\BC{\solution@Color}}%
+                \fi
+            \fi
+        \fi
+        \makebox[0pt][r]{\check@@Box{}%
+            {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}%
+            {\RadioFieldSize}{\RadioFieldSize}{Yes}{}%
+            {\eq@setWidgetProps\eq@RadioCheck@driver}%
+            {\Ans@c@f@Defaults\Ans@c@f@Choice\every@CheckBox
+            \every@qCheckBox\late@options}}%
+    \fi
+    \Ans@proofing{\RadioFieldSize}%
+\eq@hspanner\ignorespaces}
+\newcount\eq@tabColCnt
+\define@key{bchoice}{nCols}{\def\bChoiceNumCols{#1}}
+\@for\eqi:=1,2,3,4,5,6,7,8,9,10 \do{\edef\temp@expand@def{%
+    \noexpand\define@key{bchoice}{\eqi}[\eqi]{%
+        \noexpand\def\noexpand\bChoiceNumCols{\eqi}}%
+    }\temp@expand@def
+}
+\def\bChoiceNumCols{\aeb@numCols}
+\define@key{bchoice}{random}[true]{%
+    \csname if#1\endcsname\eq@randomizeChoicestrue
+        \else\eq@randomizeChoicesfalse\fi
+}
+\define@key{bchoice}{label}[]{\xdef\bChoiceLabel{#1}}
+\def\bChoices{\@ifnextchar[{\@ansChoices}{\@ansChoices[\aeb@numCols]}}
+\def\@ansChoices[#1]%
+{%
+    \global\let\@tempholdSaveAns\@empty %4/5
+    \global\let\@tempholdSaveChoice\@empty %4/5
+    \global\let\bChoiceLabel\@empty %4/5
+    \setkeys{bchoice}{#1}%
+    \global\eq@tabColCnt=0
+    \ifnum\aeb@numCols=1 % list mode
+        \def\eq@next{\@layoutListAns}\else % tabular mode
+        \def\eq@next{\@layoutTabularAns{\bChoiceNumCols}}\fi
+    \eq@next
+}
+\let\eChoices\relax
+\def\@layoutListAns{\@ifnextchar\Ans{\@getListAns}%
+    {\@lookforendansChoices{\@layoutListAns}}%
+}
+\newcommand{\eq@saveAns}[2][]{%
+    \let\eq@next\@@@SaveAnsGobbleAns
+    \ifx\bChoiceLabel\@empty\else
+    \def\eq@savedAnsOpt{#1}\def\eq@savedAnsZO{#2}%
+    \if\eq@savedAnsZO1 \let\eq@next\@@@SaveAns\fi
+    \fi\eq@next
+}
+\long\def\@@@SaveAns#1\eAns{% 4/5
+    \g@addto@macro\@tempholdSaveAns{\\{\ignorespaces#1}}%
+    \addtocounter{quizno}{1}%
+    \edef\temp@expand{\noexpand\g@addto@macro\noexpand
+    \@tempholdSaveChoice{%
+        \noexpand\\{\ifx\sqstar\@empty\aebChoiceAltFmt\else
+        \ifaebshowgrayletters\Alph{quizno}\else
+        \linkContentFormat\fi\fi}}}\temp@expand
+    \addtocounter{quizno}{-1}%
+}
+\newif\ifoxfordcomma \oxfordcommatrue
+\def\oxfordCommaOn{\oxfordcommatrue}
+\def\oxfordCommaOff{\oxfordcommafalse}
+\def\eq@insertComma{%
+    \ifx\eq@comma\@empty
+        \ifnum\@nameuse{NumAns\eq@namearg}>2\relax
+            \def\eq@comma{,}\fi
+    \else\ifx\eq@insertAnd\@empty\eq@comma\space
+        \else\ifnum\@tempcnta=\@nameuse{NumAns\eq@namearg}%
+            \ifoxfordcomma\eq@comma\fi\else\eq@comma\fi\space
+        \fi
+    \fi
+}
+\newcommand\eqAnd{and}\def\eq@insertAnd{%
+    \ifnum\@nameuse{NumAns\eq@namearg}<2\relax\else
+    \ifnum\@nameuse{NumAns\eq@namearg}>2\relax
+    \else\leavevmode\space\fi\eqAnd\space\fi}
+\long\def\eq@displayAns#1{\advance\@tempcnta1\relax
+    \eq@insertComma
+    \ifnum\@tempcnta=\@nameuse{NumAns\eq@namearg}\eq@insertAnd\fi#1}
+\def\eq@displayAlts#1{\advance\@tempcnta1
+    \eq@insertComma
+    \ifnum\@tempcnta=\@nameuse{NumAns\eq@namearg}\eq@insertAnd\fi
+    \savedAltFmt{#1}}
+\def\eq@displayAltsAns#1{\advance\@tempcnta1\relax
+    \eq@insertComma
+    \ifnum\@tempcnta=\@nameuse{NumAns\eq@namearg}\eq@insertAnd\fi#1}
+\newcommand{\savedAltFmt}[1]{(#1)}
+\newcommand{\useSavedAns}{\bgroup\@ifstar{\useSavedAns@i}
+    {\let\eq@insertAnd\@empty\useSavedAns@i}}
+\newcommand{\useSavedAns@i}[2][]{\@tempcnta=0\relax
+    \def\eq@namearg{#2}\let\label\@gobble
+    \def\eq@argi{#1}\ifx\eq@argi\@empty
+        \let\eq@comma\@empty
+        \let\\\eq@displayAns\@nameuse{SavedAns#2}\else
+        \@nameuse{SavedAns#2-Idx#1}\fi
+    \egroup
+}
+\newcommand{\useSavedAlts}{\bgroup\@ifstar{\useSavedAlts@i}
+    {\let\eq@insertAnd\@empty\useSavedAlts@i}}
+\newcommand{\useSavedAlts@i}[2][]{\@tempcnta=0\relax
+    \def\eq@namearg{#2}\@nameuse{caseFor#2}%
+    \def\eq@argi{#1}\ifx\eq@argi\@empty
+        \let\eq@comma\@empty
+        \let\\\eq@displayAlts\@nameuse{SavedAlts#2}\else
+        \savedAltFmt{\@nameuse{SavedAlts#2-Idx#1}}\fi
+    \egroup
+}
+\newcommand{\useSavedAltsAns}{\bgroup\@ifstar{\useSavedAltsAns@i}
+    {\let\eq@insertAnd\@empty\useSavedAltsAns@i}}
+\newcommand{\useSavedAltsAns@i}[2][]{\@tempcnta=0\relax
+    \def\eq@namearg{#2}\@nameuse{caseFor#2}\let\label\@gobble
+        \def\eq@argi{#1}\ifx\eq@argi\@empty
+            \let\eq@comma\@empty
+            \let\\\eq@displayAltsAns\@nameuse{SavedAltsAns#2}\else
+            \savedAltFmt{\@nameuse{SavedAlts#2-Idx#1}}
+            \@nameuse{SavedAns#2-Idx#1}\fi
+    \egroup
+}
+\newcommand{\useSavedNumAns}[1]{\@nameuse{NumAns#1}}
+\long\def\@@@SaveAnsGobbleAns#1\eAns{} % 4/5
+\long\def\@getListAns\Ans#1\eAns{%\@@par %start new paragraph
+    \eq@saveAns#1\eAns % 4/5
+    \Ans#1\vspace{\@rowskip}%
+    \@layoutListAns
+}
+\long\def\@lookforendansChoices#1{%
+    \@ifnextchar\eChoices{\rowsep{\rowsep@default}%
+        \expandafter\@findendans\@gobble}{\expandafter#1\@gobble}%
+}
+\def\@layoutTabularAns#1{%
+    \let\eq@tabSep\@empty
+    \xdef\numShortCols{#1}%
+    \ifnum#1>\aeb@numCols \xdef\numShortCols{\aeb@numCols}\fi
+    \@@layoutTabularAns
+}
+\def\@@layoutTabularAns{%
+    \@ifnextchar\Ans{\@getTabAns}%
+        {\@lookforendansChoices{\@@layoutTabularAns}}%
+}
+\def\rowsep#1{\gdef\@rowsep{[#1]}\gdef\@rowskip{#1}}%
+\rowsep{\rowsep@default}
+\def\rowsepDefault#1{\def\rowsep@default{#1}}
+\def\rowsep@default{0pt}
+\long\def\@getTabAns\Ans#1\eAns{%
+    \eq@saveAns#1\eAns
+    \global\advance\eq@tabColCnt1
+    \let\@save@tabSep=\eq@tabSep
+    \ifnum\eq@tabColCnt=\numShortCols
+        \global\eq@tabColCnt=0
+            \xdef\eq@tabSep{\noexpand\\\noalign{\kern\@rowskip\relax}}%
+    \else
+        \gdef\eq@tabSep{&}%
+    \fi
+    \@ifnextchar\eChoices{\@save@tabSep\Ans#1\rowsep{\rowsep@default}
+        \expandafter\@findendans\@gobble}%
+        {\@save@tabSep\Ans#1\@@layoutTabularAns}%
+}
+\def\@findendans{\@ifnextchar\end{% 4/5
+    \ifx\bChoiceLabel\@empty\else
+    \processLabeledAns\fi
+    }{\expandafter\@findendans\@gobble}}%
+\def\defineEachAns#1{\advance\count0by1\relax
+    \@temptokena={#1}\csarg\xdef
+    {SavedAns\bChoiceLabel-Idx\the\count0}{\the\@temptokena}%
+    \ifsolutionsonly\else
+        {\let\\\relax\eq@IWDefs{\string
+            \csarg\string\gdef{SavedAns\bChoiceLabel-Idx\the\count0}%
+            {\the\@temptokena}}}\fi
+}
+\def\defineEachChoice#1{\advance\count0by1\relax
+    \@temptokena={#1}\csarg\xdef
+        {SavedAlts\bChoiceLabel-Idx\the\count0}%
+        {\the\@temptokena}\ifsolutionsonly\else
+        {\let\\\relax\eq@IWDefs{\string
+            \csarg\string\gdef{SavedAlts\bChoiceLabel-Idx\the\count0}%
+            {\the\@temptokena}}}\fi
+}
+\def\processLabeledAns{%
+    \bgroup
+        \let\label\@gobble
+\if\aeb@FLOverride\eq@l
+    \global\@namedef{caseFor\bChoiceLabel}{\graylettersOff}\else
+    \ifaebshowgrayletters
+        \global\@namedef{caseFor\bChoiceLabel}{\graylettersOn}\else
+        \global\@namedef{caseFor\bChoiceLabel}{\graylettersOff}\fi
+\fi
+        \toks@=\expandafter{\@tempholdSaveAns}\csarg
+        \xdef{SavedAns\bChoiceLabel}{\the\toks@}%
+        \ifsolutionsonly\else{\let\\\relax\eq@IWDefs{\string
+        \csarg\string\gdef{SavedAns\bChoiceLabel}{\the\toks@}}}\fi
+        \count0=0\relax\let\\\defineEachAns\the\toks@
+        \xdef\@currNCntAns{\the\count0 }\csarg
+        \xdef{NumAns\bChoiceLabel}{\@currNCntAns}%
+        \ifsolutionsonly\else{\eq@IWDefs{\string
+        \csarg\string\gdef{NumAns\bChoiceLabel}{\the\count0 }}}\fi
+        \toks@=\expandafter{\@tempholdSaveChoice}\csarg
+        \xdef{SavedAlts\bChoiceLabel}{\the\toks@}%
+        \ifsolutionsonly\else{\let\\\relax\eq@IWDefs{\string
+        \csarg\string\gdef{SavedAlts\bChoiceLabel}{\the\toks@}}}\fi
+        \count0=0\relax\let\\\defineEachChoice\the\toks@
+        \count0=1\relax\toks@={}%{\ignorespaces\@gobble}%
+        \loop
+            \edef\temp@exp{\the\toks@\noexpand\\{%
+            \noexpand\useSavedAlts[\the\count0]{\bChoiceLabel}
+            \noexpand\useSavedAns[\the\count0]{\bChoiceLabel}}}%
+            \toks@=\expandafter{\temp@exp}%
+            \ifnum\count0<\@currNCntAns
+            \advance\count0by1
+        \repeat
+        \csarg\xdef{SavedAltsAns\bChoiceLabel}{\the\toks@}%
+        \ifsolutionsonly\else{\let\\\relax\eq@IWDefs{\string
+        \csarg\string\gdef{SavedAltsAns\bChoiceLabel}{\the\toks@}}}\fi
+    \egroup
+}
+\def\graylettersOn{\aebshowgrayletterstrue}
+\def\graylettersOff{\aebshowgraylettersfalse}
+\def\aeb@exiii{\expandafter\expandafter\expandafter}
+\def\REF{\@ifstar{\let\isREFstar\eq@One\aeb@REFstar}
+    {\let\isREFstar\eq@Zero\aeb@REF}}
+\def\aeb@REFstar#1{\@ifundefined{r@#1}{\hbox{\reset@font\bfseries ??}}
+    {\ifaebshowgrayletters\aeb@buildUpperCaseRef{#1}%
+     \else\ref*{#1}\fi}%
+}
+\def\aeb@REF#1{\@ifundefined{r@#1}{\hbox{\reset@font\bfseries ??}}
+    {\ifaebshowgrayletters\aeb@buildUpperCaseRef{#1}%
+     \else\ref{#1}\fi}%
+}
+\def\aeb@buildUpperCaseRef#1{%
+    \xdef\tmp@expand{\aeb@exiii\@firstoffive\csname r@#1\endcsname}%
+    \xdef\tmp@expand{\uppercase{\tmp@expand}}%
+    \if\isREFstar\eq@One\tmp@expand\else\hyperref[#1]{\tmp@expand}\fi
+}
+\newif\ifaeb@usecircles\aeb@usecirclesfalse
+\let\insert@circlesymbol\@empty
+\def\useMCCircles{\useForms
+    \ifaeb@usecircles\else
+        \global\aeb@usecirclestrue
+        \gdef\insert@circlesymbol{\symbolchoice{circle}}%
+    \fi
+}
+\def\useMCRects{\useForms
+    \ifaeb@usecircles\global\aeb@usecirclesfalse
+        \global\let\insert@circlesymbol\@empty
+    \fi
+}
+\let\useMCCRects\useMCRects
+\let\oqpriorhook\@empty
+\newenvironment{oQuestion}[1]{%
+    \let\@currentQues\@empty
+    \xdef\eq@pageThisQ{\the\c@page}%
+    \global\let\eqQzQuesList\@empty
+    \xdef\oField{#1}\xdef\curr@quiz{#1}\xdef\currQuiz{#1}%
+    \g@addto@macro\ListOfSQuizNames{,#1}\let\@qzsolndest\@empty
+    \let\eqQuizType\isSQZ\gdef\eqPTs{1}\global\let\eqQT\eq@na
+    \let\answers\answers@sq
+    \let\endanswers\endanswers@sq
+    \let\manswers\manswers@sq
+    \let\endmanswers\endmanswers@sq
+    \let\solution\solution@sq
+    \let\endsolution\endsolution@sq
+    \noindent\oqpriorhook\sq@IDTxtField\ifx\aebTitleQuiz\@empty
+    \else\aebtitleQuiz\fi\ignorespaces
+}{%
+    \global\let\aebtitleQuiz\@empty
+    \global\let\aebTitleQuiz\@empty
+    \global\let\eq@tq@star\relax
+    \aftergroup\ignorespaces
+}
+\def\oSolution#1{\edef\@qzsolndest{#1}}
+\def\replaceExclPt#1{\def\replaceexclaim{#1}}
+\replaceExclPt{false}
+\def\negPointsAllowed{\def\negpointsallowed{true}}
+\@onlypreamble{\negPointsAllowed}
+\def\negpointsallowed{false}
+\def\negPointsMarkupAllowed{\def\negpointsmarkupallowed{true}}
+\def\negpointsmarkupallowed{false}
+\@onlypreamble{\negPointsMarkupAllowed}
+\def\requireAlertBox{\def\bcheckboxused{false}}
+\def\allowNoAlertBox{\def\bcheckboxused{true}}
+\allowNoAlertBox
+\newcommand\RespBoxNT{\RespBoxMath}
+\newcommand\RespBox{\RespBoxMath}
+\newcommand\RespBoxMath{\def\rbFlag{0}\begingroup\Hy@unicodefalse
+    \@makeother\^\@makeother\&\@RespBox}
+\def\eq@rpl#1#2{_rplVarsBy('#1','#2')@} % dps17
+\ifnum\eq@drivernum=0\def\RorRT{\r\t}\else\def\RorRT{\r}\fi
+\def\toAltApprCnt{0}\def\toAltApprVar{_toAltAppr\toAltApprCnt}
+\def\toAltApprCntInc{{\@tempcnta=\toAltApprCnt\relax
+  \advance\@tempcnta1\relax
+  \xdef\toAltApprCnt{\the\@tempcnta}}}
+\def\setCoreInitAltAppr{%
+var\eqSP_substVars=\indepVars;\RorRT
+var\eqSP_mathVars=processMathVars(_substVars);\RorRT
+var\eqSP_substValue=getSubstValue(_substVars,event.value);\RorRT
+    event.value=RespBoxAppr(event);\RorRT
+    getSubstValue.aSubsts=[];%
+}
+\def\bInitAltAppr{\ifShowAppr
+  \def\ShowApprSAVE{true}\toAltApprCntInc\ShowApprfalse
+  \def\eqAddAAFormat{\ifnum\eq@drivernum=0try\eqLBr\RorRT\fi
+    \setCoreInitAltAppr\ifnum\eq@drivernum=0 \r\eqRBr catch(e){\RorRT
+    var\eqSP\toAltApprVar=%
+    app.setTimeOut('this.resetForm("'+event.target.name+'");%
+    app.clearTimeOut(\toAltApprVar);',250);\r}\fi}\else
+    \def\ShowApprSAVE{false}\fi
+}
+\def\eInitAltAppr{\@nameuse{ShowAppr\ShowApprSAVE}%
+  \ifShowAppr\altApprOn\let\eqAddAAFormat\@empty\fi}
+\def\AAKqRespBoxMath{%
+  if(event.willCommit){\r\t
+    RecordPointValue(\eqPTs,\thequestionno\ifx\grpquestions1,%
+\thegrpquestionno,\grpPointValue,\grpTotalWeight,%
+"\grpEvalFunction"\fi);\r\t
+    RecordProblemType("\eqQT",\thequestionno);\r\t
+\ifSubstVars % dps17
+    var\eqSP_substVars=\indepVars;\r\t
+    var\eqSP_mathVars=processMathVars(_substVars);\r\t
+    var\eqSP_substValue=getSubstValue(_substVars,event.value);\r\t
+    var\eqSP_substAns=getSubstValue(_substVars,"\eqCorrectAns");\r\t
+    var\eqSP retn=\processJSfunc(\rbArgs,%
+      \compareJSfunc,_substValue);\r\t
+\else
+    var\eqSP_mathVars=\indepVars;\r\t
+    var\eqSP retn=\processJSfunc(\rbArgs,\compareJSfunc);\r\t
+\fi
+    ProcUserResp(retn,event.value,\thequestionno,%
+0\ifx\grpquestions1,\thegrpquestionno\fi);\r
+  }\r
+  if (!isQuizInitialized("\currQuiz")) {\r\t
+    \eqObjAlert\space eqAppAlert(InitMsg("\bqlabelISO"),3);\r\t
+    event.rc = false;\r
+  }
+}
+\def\RespBoxMathDefaults
+{%
+    \BC{0 0 0}\S{S}\textColor{0 g}\F{\FPrint}\W{1}
+}
+\def\moreRespBoxMathDefaults
+{%
+    \edef\@moreRespBoxMathDefaults{%
+        \if\eqQuizType\isQZ\ifx\eq@online\eq@YES
+            \ifeq@noquizsolutions
+            \else\noexpand\Ff{\FfReadOnly}\fi\fi\fi
+    }%
+}
+\let\eqAddAAFormat\@empty
+\def\eqSP{\string\040} % dps17
+\def\eqLBr{\string\173}
+\def\eqRBr{\string\175}
+\def\@@RespBoxMathActions{%
+  \AA{\if\eqQuizType\isQZ
+    \AAKeystroke{\AAKqRespBoxMath\eqAddAAKeystroke}
+    \AAFormat{\ifShowAppr\ifSubstVars\ifarrowDelim % dps17
+      try{event.value=RespBoxAppr(event);}catch(e){}\r
+        \fi\fi\fi\eqAddAAFormat}
+  \else
+    \AAKeystroke{if(event.willCommit) {\r\t
+\ifSubstVars%
+      var\eqSP_substVars=\indepVars;\r\t
+      var\eqSP_mathVars=processMathVars(_substVars);\r\t
+      var\eqSP_substValue=getSubstValue(_substVars,event.value);\r\t
+      var\eqSP_substAns=getSubstValue(_substVars,"\eqCorrectAns");\r\t
+      var\eqSP retn=\processJSfunc(\rbArgs,%
+        \compareJSfunc,_substValue);\r\t
+\else
+      var\eqSP_mathVars=\indepVars;\r\t
+      var\eqSP retn=\processJSfunc(\rbArgs,\compareJSfunc);
+\fi
+\if\@sqTurnOffAlerts1\r\t
+      OnBlurRespBox(retn,"\curr@quiz");
+\fi
+      \eqAddAAKeystroke\r
+    }}
+    \AAFormat{\ifShowAppr\ifSubstVars\ifarrowDelim % dps17
+      try{event.value=RespBoxAppr(event);}catch(e){}\r\fi\fi\fi
+        \eqAddAAFormat}%
+    \AAOnFocus{\JS{var retn = null;}}%
+    \AAOnBlur{\JS{OnBlurRespBox(null,"\curr@quiz");}}%
+\fi
+  }
+}
+\def\annot@subtype@rbm{rbm}
+\newcommand\@RespBox[1][]
+{%
+  \edef\annot@subtype{\annot@subtype@rbm}%
+  \eq@AddProbToQzQuesList
+  \smallskip\ifx\grpquestions\eq@Zero
+    \addtocounter{eqpointvalue}{\eqPTs}\fi
+  \if\eqQuizType\isQZ
+    \def\rbFlag{1}\global\IsRespBoxtrue
+    \ifx\grpquestions\eq@One
+      \stepcounter{grpquestionno}%
+      \def\Fld@name{%
+        grpobj.\curr@quiz.\thequestionno.\thegrpquestionno}%
+    \else
+      \eq@recordThesePTs\eq@recordProbType
+      \edef\eqtmp{\aPointType}%
+      \xdef\aPointType{\eqtmp,[\eqPTs,"math"]}%
+      \stepcounter{questionno}%
+      \def\Fld@name{obj.\curr@quiz.\thequestionno}%
+    \fi
+  \else % shortquiz
+    \ifx\grpquestions\eq@One
+      \stepcounter{grpquestionno}%
+      \def\Fld@name{%
+        grpobj.\oField.\thequestionno.\thegrpquestionno}%
+    \else
+      \stepcounter{questionno}%
+      \def\Fld@name{%
+        obj.\oField.\thequestionno}%
+    \fi
+  \fi
+  \let\Array\aeb@array
+  \moreRespBoxMathDefaults
+  \leavevmode\hbox\bgroup\let\rpl\eq@rpl
+  \text@@Field{#1}{\Fld@name}%
+  {\RBW}{\DefaultHeightOfWidget}%
+  {\eq@protect\AA}{\eq@setWidgetProps\eq@RespBox}%
+  {\RespBoxMathDefaults\@moreRespBoxMathDefaults
+  \@@RespBoxMathActions\every@eqTextField\every@RespBoxMath}%
+}
+\def\eq@RespBox#1{\pdfstringdef\eqCorrectAns{#1}%
+  \gdef\eqCorrectAnsTeX{#1}\if\grpquestions\eq@Zero
+    \ifwithinMCFI\gdef\s@veCorrAnsMCFI{"#1"}\fi
+  \else
+    \eq@recordGrpAnsArray{"#1"}\fi
+  \@ifnextchar({\@eq@RespBox{#1}}{\@eq@RespBox{#1}(x)}}
+\def\@eq@RespBox#1(#2){\@ifnextchar[{\@eq@RespB@x{#1}(#2)}%
+  {\@ifstar{\@eq@RespB@x{#1}(#2)[\curr@quiz.\thequestionno]}%
+    {\@eq@RespB@x{#1}(#2)[]}}}
+\def\eq@ZERO{0}
+\def\defaultRDPrecision#1{\def\eq@defaultRDPrecision{#1}}
+\defaultRDPrecision{1E-14}
+\newif\ifarrowDelim\arrowDelimfalse % dps17
+\def\rpl@#1#2{\rpl@i#1->\@nil}
+\def\rpl@i#1->#2\@nil{\def\argii{#2}\ifx\argii\@empty\else
+  \global\arrowDelimtrue\fi}
+\def\GiiRpli#1{\global\arrowDelimfalse\GiiRplii#1\rpl{}{}\@nil}
+\def\GiiRplii#1\rpl#2#3#4\@nil{\def\argiv{#4}%
+  \ifx\argiv\@empty\let\eq@next\relax\else
+  \rpl@{#2}{#3}\ifarrowDelim\let\eq@next\relax\else
+    \def\eq@next{\GiiRplii#4\@nil}\fi\fi
+  \eq@next}
+\def\isAltApprSpec#1{\bgroup\if\frstIsrpl\eq@YES\GiiRpli{#1}\else
+  \expandafter\GiiRpli\expandafter{#1}\fi\egroup} % dps17
+\def\isFrstrpl#1#2\@nil{\ifx#1\rpl\let\frstIsrpl\eq@YES\else
+  \let\frstIsrpl\eq@NO\fi}
+\def\cntComm@s#1{\@tempcnta\z@\expandafter\cntComm@si#1,,\@nil}
+\def\cntComm@si#1,#2,\@nil{\def\argii{#2}\ifx\argii\@empty
+  \def\eq@next{\edef\nC{\the\@tempcnta}}\else
+  \advance\@tempcnta\@ne\def\eq@next{\cntComm@si#2,\@nil}\fi
+  \eq@next}\def\eq@SC{;}\def\rplSofT#1#2{#2}
+\def\cntVars#1{\let\rpl\rplSofT\edef\eV@rs{#1}\let\rpl\eq@rpl
+  \cntComm@s{\eV@rs}\ifnum\nC>\z@
+  \@tempcnta\nC\relax\advance\@tempcnta\@ne
+  \xdef\nV{\the\@tempcnta}\else\@tempcnta\z@
+  \expandafter\cntVarsi\eV@rs;\@nil\fi}
+  \def\cntVarsi#1#2\@nil{\def\argii{#2}%
+  \ifx\argii\eq@SC\def\eq@next{\advance\@tempcnta\@ne
+    \edef\nV{\the\@tempcnta}}\else\advance\@tempcnta\@ne
+    \def\eq@next{\cntVarsi#2\@nil}\fi
+  \eq@next}
+\def\eq@X{x}
+\def\eq@isThereRept#1{\let\eq@isRept\eq@Zero\expandafter
+  \eq@isThereRepti#1*\@nil}
+\def\eq@isThereRepti#1*#2\@nil{\def\argii{#2}\ifx\argii\@empty
+  \let\eq@isRept\eq@Zero\else\let\eq@isRept\eq@One\fi}
+\def\eq@obeyReptOfIntrvls#1{%
+  \expandafter\eq@isThereRept\expandafter{#1}% sets \eq@isRept
+  \if\eq@isRept\eq@Zero\relax\let\eq@interv@ls\@empty\expandafter
+    \g@addto@macro\expandafter\eq@interv@ls
+    \expandafter{#1}\let\eq@next\relax\else\let\eq@interv@ls\@gobble
+    \def\eq@next{\expandafter
+      \eq@obeyReptOfIntrvlsi#1x[]x\@nil}\fi\eq@next}
+\def\eq@obeyReptOfIntrvlsi#1[#2]#3#4x#5\@nil{%
+  \def\argi{#2}\def\argii{#3}\def\argiv{#5}%
+  \ifx\argi\@empty\let\eq@next\relax\else
+    \ifx\argii\eq@X\g@addto@macro\eq@interv@ls{x[#2]}%
+      \def\eq@next{\eq@obeyReptOfIntrvlsi#4x#5x\@nil}\else
+      % repetition of an interval
+      \eq@ddtorepIntrvl{[#2]}{#4}%
+      \def\eq@next{\eq@obeyReptOfIntrvlsi#5x\@nil}\fi
+  \fi
+  \eq@next
+}
+\def\eq@ddtorepIntrvl#1#2{\@tempcnta=#2 \eq@ddtorepIntrvli{#1}{#2}}
+\def\eq@ddtorepIntrvli#1#2{\@whilenum\@tempcnta>\z@\do
+  {\g@addto@macro\eq@interv@ls{x#1}\advance\@tempcnta\m@ne}}
+\def\cntIv@ls#1{\@tempcnta\z@\expandafter\cntIv@lsi#1xxx\@nil}%
+\def\cntIv@lsi#1x#2x\@nil{\def\argii{#2}\ifx\argii\eq@X
+  \advance\@tempcnta\@ne
+  \edef\nI{\the\@tempcnta}\let\eq@next\relax\else
+  \advance\@tempcnta\@ne\def\eq@next{\cntIv@lsi#2x\@nil}\fi
+\eq@next}
+\begingroup\@makeother\&
+\gdef\eq@ProcIntrvls#1{\expandafter
+  \eq@ProcIntrvlsi#1&&\@nil}
+\gdef\eq@ProcIntrvlsi#1&#2&#3\@nil{\def\argii{#2}%
+  \ifx\argii\@empty
+    \eq@obeyReptOfIntrvls{#1}%
+    \cntIv@ls{\eq@interv@ls}%
+  \else
+    \eq@obeyReptOfIntrvls{#1}%
+    \edef\interv@ls{\eq@interv@ls}%
+    \cntIv@ls{\eq@interv@ls}%
+    \eq@obeyReptOfIntrvls{#2}%
+    \edef\eq@interv@ls{\interv@ls&\eq@interv@ls}%
+  \fi
+}
+\endgroup
+\def\@eq@RespB@x#1(#2)[#3]#4#5#6{\xdef\@qzsolndest{#3}% dps17
+    \gdef\indepVars{"#2"}\isFrstrpl#2\@nil\if\frstIsrpl\eq@YES
+      \def\@IVi{#2}\else\expandafter\def\expandafter
+      \@IVi\expandafter{#2}\fi\edef\@IVii{#2}\ifx\@IVi\@IVii
+        \global\SubstVarsfalse\else\global\SubstVarstrue
+        \isAltApprSpec{#2}\fi
+    \cntVars{#2}\def\eq@precision{#5}%
+    \ifx\eq@precision\eq@ZERO
+        \def\eq@defaultCompare{reldiffCompare}%
+        \def\rbArgstmp{\rbFlag,% dps17
+          \ifSubstVars_substAns\else"#1"\fi,#4,%
+            \eq@defaultRDPrecision}\else
+          \def\eq@defaultCompare{diffCompare}%
+        \def\rbArgstmp{\rbFlag,% dps17
+          \ifSubstVars_substAns\else"#1"\fi,#4,#5}\fi
+    \edef\eq@ixparam{#6}\expandafter\eq@chkivIntrvls\eq@ixparam\\%
+}
+\def\viidna{[0,1]}
+\def\eq@chkivIntrvls{\@ifnextchar[{\eq@chkivIntrvlsi}%
+  {\eq@chkivIntrvlsii}}
+\def\eq@chkivIntrvlsi#1\\{\eq@ProcIntrvls{#1}%
+  \def\rbArgs{\rbArgstmp,"\eq@interv@ls",_mathVars}% dps17
+  \@ifnextchar[{\@eq@@RespBox[ \expandafter\@gobble}%
+    {\@eq@@RespBox[\eq@defaultCompare]}%
+}
+\def\eq@chkivIntrvlsii#1\\#2{\def\nI{1}%
+  \def\rbArgs{\rbArgstmp,"[#1,#2]",_mathVars}%
+  \@ifnextchar[{\@eq@@RespBox}{\@eq@@RespBox[\eq@defaultCompare]}%
+}
+\def\@eq@@RespBox[#1]{\@ifstar{\jsRespBox[#1]}%
+    {\jsRespBox[#1]{ProcResp}}}
+\def\eq@ProcRespIntervals{ProcRespIntervals}
+\def\eq@ProcRespSetNum{ProcRespSetNum}
+\def\eq@ProcRespSetSym{ProcRespSetSym}
+\def\eq@ProcRespEvalEq{ProcRespEvalEq}
+\def\eq@ProcRespEvalEqNonZero{ProcRespEvalEqNonZero}
+\def\eq@ProcRespEvalEqList{ProcRespEvalEqList}
+\def\eq@ProcRespEvalEqListNonZero{ProcRespEvalEqListNonZero}
+\def\jsRespBox[#1]#2{\def\compareJSfunc{#1}%
+  \def\processJSfunc{#2}\gdef\g@processJSfunc{#2}% 01/11
+  \ifnum\nV=\nI\relax\else
+  \ifx\processJSfunc\eq@ProcRespSetNum\else
+  \ifx\processJSfunc\eq@ProcRespSetSym\else
+  \ifx\processJSfunc\eq@ProcRespEvalEq\else
+  \ifx\processJSfunc\eq@ProcRespEvalEqNonZero\else
+  \ifx\processJSfunc\eq@ProcRespEvalEqList\else
+  \ifx\processJSfunc\eq@ProcRespEvalEqListNonZero\else
+  \PackageWarning{exerquiz}{The number of variables does not
+    match\MessageBreak the number of intervals. The
+    problem\MessageBreak may not evaluate properly}\fi\fi\fi\fi\fi\fi\fi
+  \ifx\eq@ProcRespIntervals\g@processJSfunc
+    \let\@inmathwarn@SAVE\@inmathwarn\let\@inmathwarn\@gobble
+    \pdfstringdef{\eqCorrectAns}{\eqCorrectAns}%
+    \let\@inmathwarn\@inmathwarn@SAVE\fi
+\ifx\grpquestions\eq@Zero
+  \eq@recordCorrAns{"\eqCorrectAns"}% 2018/03/18
+\fi
+  \ifeq@proofing\makebox[0pt][l]{\space\math@correctAnswer}\fi
+  \eq@TextField % send to the driver-dependent macro
+  \egroup   % hbox
+  \endgroup % \RespBoxMath
+}
+\def\gobbleMacro#1>{}
+\gdef\math@correctAnswer{\ttfamily
+  \color{\@proofingsymbolColor}\spaceskip=2pt\xspaceskip=2pt%
+  \expandafter\gobbleMacro\meaning\eqCorrectAnsTeX
+}
+\newcommand\RespBoxTxtNT{\def\rbFlag{0}\@RespBoxTxt}
+\newcommand\RespBoxTxt{\def\rbFlag{0}\@RespBoxTxt}
+\def\RespBoxTxtOnBlur{OnBlurRespBox(%
+    \if\@sqTurnOffAlerts1retn\else null\fi,"\curr@quiz");}
+\def\eqObjAlert{%
+    \ifx\eqQuizType\isQZ\ifx\eq@online\eq@YES\ifeq@noquizsolutions
+    \else if (false)\fi\fi\fi}
+\begin{defineJS}[%
+    \catcode`\@=0\relax\catcode`\%=14\relax]{\AAKqRespBoxTxt}
+if(event.willCommit){
+    RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
+@thegrpquestionno,@grpPointValue,@grpTotalWeight,%
+"@grpEvalFunction"@fi);
+    RecordProblemType("@eqQT",@thequestionno);
+    var retn = ProcRespTxt(@rbTxtAlt);
+    ProcUserResp(retn,event.value,@thequestionno,%
+0@ifx@grpquestions1,@thegrpquestionno@fi);
+}
+if (!isQuizInitialized("@currQuiz")) {
+    @eqObjAlert@space eqAppAlert(InitMsg("@bqlabelISO"),3);
+    event.rc = false;
+}
+\end{defineJS}
+\def\RespBoxTxtDefaults
+{%
+    \BC{0 0 0}\W{1}\S{S}\textColor{0 g}\F{\FPrint}%
+}
+\def\moreRespBoxTxtDefaults
+{%
+    \edef\@moreRespBoxTxtDefaults{%
+        \if\eqQuizType\isQZ\ifx\eq@online\eq@YES
+        \ifeq@noquizsolutions\else
+        \noexpand\Ff{\FfReadOnly}\fi\fi\fi
+    }%
+}
+\def\@@RespBoxTxtActions
+{%
+    \AA{\if\eqQuizType\isQZ
+            \AAKeystroke{\AAKqRespBoxTxt\eqAddAAKeystroke}
+            \AAFormat{\eqAddAAFormat}
+        \else
+            \AAKeystroke{%
+                if(event.willCommit) {\r\t
+                    retn = ProcRespTxt(\rbTxtAlt);\r
+\if\@sqTurnOffAlerts1
+                \t\RespBoxTxtOnBlur\r
+\fi
+                \eqAddAAKeystroke\r
+                }%
+            }
+            \AAFormat{\eqAddAAFormat}
+            \AAOnFocus{\JS{var retn = null;}}
+\if\@sqTurnOffAlerts0
+            \AAOnBlur{\JS{\RespBoxTxtOnBlur}}%
+\fi
+        \fi
+    }
+}
+\def\annot@subtype@rbt{rbt}
+\newcommand\@RespBoxTxt[1][]
+{%
+    \edef\annot@subtype{\annot@subtype@rbt}%
+    \eq@AddProbToQzQuesList
+    \ifx\grpquestions\eq@Zero\addtocounter{eqpointvalue}{\eqPTs}\fi
+    \if\eqQuizType\isQZ
+        \def\rbFlag{1}\global\IsRespBoxtrue
+        \ifx\grpquestions\eq@One
+            \stepcounter{grpquestionno}%
+            \def\Fld@name{%
+                grpobj.\curr@quiz.\thequestionno.\thegrpquestionno}%
+        \else
+            \eq@recordThesePTs\eq@recordProbType
+            \edef\eqtmp{\aPointType}%
+            \xdef\aPointType{\eqtmp,[\eqPTs,"text"]}%
+            \stepcounter{questionno}%
+            \def\Fld@name{obj.\curr@quiz.\thequestionno}%
+        \fi
+    \else
+        \stepcounter{questionno}%
+        \def\Fld@name{obj.\oField.\thequestionno}%
+    \fi
+    \moreRespBoxTxtDefaults
+    \leavevmode\hbox\bgroup\text@@Field{#1}{\Fld@name}%
+    {\RBW}{\DefaultHeightOfWidget}%
+    {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxTxt}%
+    {\RespBoxTxtDefaults\@moreRespBoxTxtDefaults
+     \@@RespBoxTxtActions\every@eqTextField\every@RespBoxTxt}%
+}
+\def\@@RespBoxTxt#1#2{%
+    \@ifnextchar[{\@@@RespBoxTxt{#1}{#2}}
+        {\@ifstar{\@@@RespBoxTxt{#1}{#2}[\curr@quiz.\thequestionno]}%
+            {\@@@RespBoxTxt{#1}{#2}[]}}}
+\def\eq@ZERO{0}\def\eq@ONE{1}\def\eq@TWO{2}
+\def\@@@RespBoxTxt#1#2[#3]#4{%
+    \xdef\@qzsolndest{#3}%
+    \def\eq@argi{#1}\ifx\eq@argi\eq@ZERO\else
+        \ifx\eq@argi\eq@ONE\else\ifx\eq@argi\eq@TWO\else
+        \def\eq@argi{-1}\fi\fi\fi
+    \def\eq@argii{#2}\ifx\eq@argii\eq@ONE\else\def\eq@argii{0}\fi
+    \begingroup
+    \ifnum\eq@argii=1\relax
+        \def\rexpStr##1{\eqbs\eqbs\eqbs\eqbs##1}%
+        \def\\##1{\eqbs\eqbs\eqbs\eqbs##1}%
+        \def\word##1{\\b##1\\b}\def\any{@any@}\fi
+    \xdef\rbTxtAlt{\rbFlag,\eq@argi,\eq@argii}%
+    \global\let\txtAltList\@empty
+    \count0=#4 \ifnum\count0 > 0 \expandafter\@argRead\else
+    \PackageError{exerquiz}{%
+        The fourth required parameter of \string\RespBoxTxt\MessageBreak
+        is required to be a positive integer. You entered\MessageBreak
+        #4\space instead}{Enter a positive integer.}\fi
+}
+\def\@argRead#1{\xdef\jsTempArgs{\txtAltList}%
+    \ifx\txtAltList\@empty\xdef\txtAltList{"#1"}\else
+    \xdef\txtAltList{\jsTempArgs,"#1"}\fi\@@argRead}
+\def\@@argRead{\advance\count0 by-1\relax
+    \ifnum\count0=0\relax
+        \def\eq@next{\endgroup
+            \xdef\rbTxtAlt{\rbTxtAlt,\txtAltList}%
+            \if\grpquestions\eq@Zero
+                \ifwithinMCFI
+                    \xdef\s@veCorrAnsMCFI{[\txtAltList]}\else
+                    \eq@recordCorrAns{[\txtAltList]}\fi
+            \else
+                \eq@recordGrpAnsArray{[\txtAltList]}%
+            \fi
+            \eq@@RespBoxTxt
+        }%
+    \else
+        \def\eq@next{\@argRead}%
+    \fi\eq@next
+}
+\def\eq@@RespBoxTxt{%
+    \ifeq@proofing\makebox[0pt][l]{\space\txt@correctAnswer}\fi
+    \eq@TextField
+    \egroup
+}
+\def\gobbleTxt#1>#2,#3,#4,{}
+\gdef\txt@correctAnswer{\ttfamily\color{\@proofingsymbolColor}%
+    \spaceskip=2pt\xspaceskip=2pt
+    \expandafter\gobbleTxt\meaning\rbTxtAlt
+}
+\begin{defineJS}[%
+    \catcode`\@=0\relax\catcode`\%=14\relax]{\AAKqRespBoxTxtPC}
+if(event.willCommit){
+    RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
+@thegrpquestionno,@grpPointValue,@grpTotalWeight,%
+"@grpEvalFunction"@fi);
+    RecordProblemType("@eqQT",@thequestionno);
+    var retn = ProcRespTxtPC(@rbTxtAlt);
+@ifx@grpquestions1%
+        ProbValue[@thequestionno][3+@thegrpquestionno]%
+=ProcRespTxtPC.txtPCpCr;@else%
+        ProbValue[@thequestionno]=ProcRespTxtPC.txtPCpCr;@fi
+        ProcUserResp(retn,event.value,@thequestionno,0%
+@ifx@grpquestions1,@thegrpquestionno@fi);
+}
+if (!isQuizInitialized("@currQuiz")) {
+    @eqObjAlert@space eqAppAlert(InitMsg("@bqlabelISO"),3);
+    event.rc = false;
+}
+\end{defineJS}
+\def\@@RespBoxTxtPCActions
+{%
+    \AA{\if\eqQuizType\isQZ
+            \AAKeystroke{\AAKqRespBoxTxtPC}
+        \else
+            \AAKeystroke{%
+                if(event.willCommit) {\r\t
+                    retn = ProcRespTxtPC(\rbTxtAlt);\r
+\if\@sqTurnOffAlerts1%
+                \t\RespBoxTxtOnBlur\r
+\fi
+                }%
+            }
+            \AAOnFocus{\JS{var retn = null;}}
+\if\@sqTurnOffAlerts0%
+            \AAOnBlur{\JS{\RespBoxTxtOnBlur}}%
+\fi
+        \fi
+    }
+}
+\newcommand{\RespBoxTxtPC}{\def\rbFlag{0}\@RespBoxTxtPC}
+\def\annot@subtype@rbtpc{rbtpc}
+\newcommand\@RespBoxTxtPC[1][]
+{%
+    \edef\annot@subtype{\annot@subtype@rbtpc}%
+    \eq@AddProbToQzQuesList
+    \smallskip\ifx\grpquestions\eq@Zero
+        \addtocounter{eqpointvalue}{\eqPTs}\fi
+    \if\eqQuizType\isQZ\def\rbFlag{1}\global\IsRespBoxtrue
+        \ifx\grpquestions\eq@One
+            \stepcounter{grpquestionno}%
+            \def\Fld@name{%
+                grpobj.\curr@quiz.\thequestionno.\thegrpquestionno}%
+        \else
+            \eq@recordThesePTs\eq@recordProbType
+            \edef\eqtmp{\aPointType}%
+            \xdef\aPointType{\eqtmp,[\eqPTs,"text"]}%
+            \stepcounter{questionno}%
+            \def\Fld@name{obj.\curr@quiz.\thequestionno}%
+        \fi
+    \else
+        \stepcounter{questionno}%
+        \def\Fld@name{obj.\oField.\thequestionno}%
+    \fi
+    \moreRespBoxTxtDefaults
+    \leavevmode\hbox\bgroup\text@@Field{#1}{\Fld@name}%
+    {\RBW}{\DefaultHeightOfWidget}%
+    {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxTxtPC}%
+    {\RespBoxTxtDefaults\@moreRespBoxTxtDefaults
+     \@@RespBoxTxtPCActions\every@eqTextField\every@RespBoxTxt}%
+}
+\def\@@RespBoxTxtPC#1{\@ifnextchar[{\@@@RespBoxTxtPC{#1}}
+    {\@ifstar{\@@@RespBoxTxtPC{#1}[\curr@quiz.\thequestionno]}%
+    {\@@@RespBoxTxtPC{#1}[]}}}
+\def\@@@RespBoxTxtPC#1[#2]#3{\xdef\@qzsolndest{#2}%
+    \begingroup
+    \def\rexpStr##1{\eqbs\eqbs\eqbs\eqbs##1}%
+    \def\\##1{\eqbs\eqbs\eqbs\eqbs##1}%
+    \def\word##1{\\b##1\\b}\def\any{@any@}
+    \gdef\rbTxtAlt{\rbFlag,#1,1}% force sub-string match
+    \global\let\txtAltList\@empty
+    \count0=#3 \ifnum\count0>0 \expandafter\@argReadPC\else
+    \PackageError{exerquiz}{%
+        The third required parameter of
+        \string\RespBoxTxtPC\MessageBreak
+        is required to be a positive integer.
+        You entered\MessageBreak #3\space instead}
+        {Enter a positive integer.}\fi
+}
+\newcommand\@argReadPC[2][0]{\xdef\jsTempArgs{\txtAltList}%
+    \ifx\txtAltList\@empty\xdef\txtAltList{["#2",#1]}\else
+    \xdef\txtAltList{\jsTempArgs,["#2",#1]}\fi\@@argReadPC}
+\def\@@argReadPC{\advance\count0 by-1\relax
+    \ifnum\count0=0\relax
+        \def\eq@next{\endgroup
+            \xdef\rbTxtAlt{\rbTxtAlt,\txtAltList}%
+            \if\grpquestions\eq@Zero
+                \ifwithinMCFI
+                    \xdef\s@veCorrAnsFCFI{[\txtAltList]}\else
+                    \eq@recordCorrAns{[\txtAltList]}\fi
+            \else
+                \eq@recordGrpAnsArray{[\txtAltList]}%
+            \fi
+            \eq@@RespBoxTxtPC
+        }%
+    \else
+        \def\eq@next{\@argReadPC}%
+    \fi\eq@next
+}
+\def\eq@@RespBoxTxtPC{%
+    \ifeq@proofing\makebox[0pt][l]{\space\txt@correctAnswer}\fi
+    \eq@TextField
+     \egroup
+}
+\def\RespBoxEssayDefaults
+{%
+    \BC{0 0 0}\W{1}\S{S}\Ff{\FfMultiline}\rawPDF{}%
+}
+\def\@@RespBoxEssayActions
+{%
+    \AA{\if\eqQuizType\isQZ
+        \AAKeystroke{%
+            if(event.willCommit){\jsR\jsT
+            RecordPointValue(\eqPTs,\thequestionno);\jsR\jsT
+            RecordProblemType("\eqQT",\thequestionno);\jsR\jsT
+            }\jsR
+            if (!isQuizInitialized("\curr@quiz")) {\jsR\jsT
+                @eqObjAlert\space eqAppAlert(%
+                    InitMsg("\bqlabelISO"),3);\jsR\jsT
+                event.rc = false;\jsR
+            }%
+        }%
+    \fi
+    }
+}
+\newcommand\RespBoxEssay[3][]
+{%
+    \smallskip\addtocounter{eqpointvalue}{\eqPTs}%
+    \stepcounter{questionno}%
+    \mbox{\text@@Field{#1}{essay.\curr@quiz.\thequestionno}{#2}{#3}%
+    \edef\eqtmp{\aPointType}\xdef\aPointType{\eqtmp,[\eqPTs,"essay"]}%
+    {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxEssayActions
+     \eq@TextField}{\RespBoxEssayDefaults\every@eqTextField}}%
+}
+\let\@@sqTallyBoxActions\@empty
+\@ifundefined{calcOrder}{%
+\ifpdf\def\@@sqTallyBoxActions{%
+    \AA{\AAValidate{getTotalTally("\oField");}}}\fi}{}
+\def\sqTallyBoxDefaults
+{%
+    \BC{0 0 0}\W{1}\textColor{1 0 0 rg}\S{I}\Q{2}\Ff{\FfReadOnly}
+}
+\ifpdf\def\@@sqTallyBoxActions{%
+    \AA{\AAValidate{getTotalTally("\oField");}}}\else
+    \let\@@sqTallyBoxActions\@empty
+\fi
+\newcommand\sqTallyBox[1][]
+{%
+    \mbox{\text@@Field{#1}{tally.\oField.\thequestionno}%
+        {\TBW}{\DefaultHeightOfWidget}%
+        {}{\eq@setWidgetProps\eq@TextField}%
+        {\sqTallyBoxDefaults\@@sqTallyBoxActions\every@eqTextField
+        \every@sqTallyBox}}%
+}
+\def\sqTallyTotalDefaults
+{%
+    \rawPDF{}\W{1}\BC{0 0 0}\S{I}\textColor{1 0 0 rg}%
+    \Q{2}\Ff{\FfReadOnly}%
+}
+\def\@@sqTallyTotalActions
+{%
+    \AA{%
+        \AAKeystroke{AFNumber_Keystroke(0,0,0,0,"",true);}
+        \AAFormat{AFNumber_Format(0,0,0,0,"",true);}
+        \AACalculate{%
+            AFSimple_Calculate("SUM",new Array("tally.\oField"));
+    }}
+}
+\newcommand\sqTallyTotal[1][]
+{%
+    \mbox{\text@@Field{#1}{tallytotal.\oField}{\TBW}%
+        {\DefaultHeightOfWidget}{\eq@protect\AA}%
+        {\eq@setWidgetProps\eq@TextField}%
+        {\sqTallyTotalDefaults\@@sqTallyTotalActions\every@eqTextField
+         \every@sqTallyTotal}}%
+}
+\def\CorrAnsButtonDefaults
+{%
+   \CA{\eq@local@CorrAnsButton}\W{1}\S{S}
+    \BC{0 0 0}\BG{.7529 .7529 .7529}\H{P}
+}
+\def\normalCABtnBC{0 0 0}
+\def\qCorrAnsButtonActionHook{\JS{%
+\ifx\@qzsolndest\@empty\else
+  if (event.shift)\jsR\jsT
+      this.gotoNamedDest("\@qzsolndest");\jsR
+  else {\jsR\jsT\fi
+\ifShowAppr % dps17
+  \ifarrowDelim
+    if (typeof event.target.appr=="undefined")\r\JST\t
+      event.target.appr=false;\r\JST
+    event.target.appr=!event.target.appr;\r\JST
+    if (event.target.appr) {\r\t\JST
+      var _substVars=\indepVars;\r\t\JST
+      var _substAns=getSubstValue(_substVars,"\CorrectAns");\r\t\JST
+      var value=RespBoxAppr("\CorrectAns");\r\JST
+    } else value="\CorrectAns";\r\JST
+  \else
+    value="\CorrectAns";\r\JST
+  \fi
+\else
+      value="\CorrectAns";\r\JST
+\fi
+    \processJSfunc("Ans.\curr@quiz",value,\currQuiz);\r
+\ifx\@qzsolndest\@empty\else % dps17
+  }\fi
+}}
+ \def\sqCorrAnsButtonActionHook
+ {%
+     \JS{%
+        \ifx\@qzsolndest\@empty\else
+            if (event.shift)\jsR\jsT
+            this.gotoNamedDest("\@qzsolndest");\jsR
+            else\jsR\jsT
+        \fi
+        \processJSfunc("obj.\oField.\thequestionno","\CorrectAns",%
+\currQuiz);
+     }%
+ }
+\newcommand\CorrAnsButton[1][]{\eq@@CorrAnsButton{#1}}
+\def\eq@@CorrAnsButton#1#2{\bgroup\makeJSspecials % 1/12
+    \@ifstar{\eq@@@CorrAnsButton{#1}{#2}}{%
+        \eq@@@CorrAnsButton{#1}{#2}{DisplayAnswer}}%
+}
+\def\eq@@@CorrAnsButton#1#2#3{\gdef\CorrectAns{#2}%
+    \def\processJSfunc{#3}\ifx\@qzsolndest\@empty\let\JST\@empty\else
+    \let\JST\jsT\fi % dps17
+    \ifx\eq@ProcRespIntervals\g@processJSfunc % 01/11
+        \let\@inmathwarn@SAVE\@inmathwarn\let\@inmathwarn\@gobble
+        \pdfstringdef{\CorrectAns}{\CorrectAns}%
+        \let\@inmathwarn\@inmathwarn@SAVE\fi
+    \if\eqQuizType\isQZ\def\Fld@name{corr.\curr@quiz.\thequestionno}%
+    \else\def\Fld@name{corr.\oField.\thequestionno}\fi
+    \if\eqQuizType\isQZ
+        \edef\@@CorrAnsButtonActions{\noexpand\F{\FHidden}%
+            \ifx\@qzsolndest\@empty%\noexpand\BC{\normalCABtnBC}%
+            \else\noexpand\BC{\solution@Color}\fi
+            \noexpand\A{\noexpand\qCorrAnsButtonActionHook}}%
+        \ifeq@noquizsolutions\else % dps17 (\let\rpl\eq@rpl)
+           \mbox{\let\rpl\eq@rpl
+              \push@@Button{#1}{\Fld@name}{}{\DefaultHeightOfWidget}%
+                {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
+                {\CorrAnsButtonDefaults\@@CorrAnsButtonActions
+                \every@ButtonField\every@CorrAnsButton}}%
+        \fi
+    \else
+        \edef\@@CorrAnsButtonActions{%
+        \ifx\@qzsolndest\@empty%\noexpand\BC{\normalCABtnBC}
+        \else\noexpand\BC{\solution@Color}\fi
+        \noexpand\A{\noexpand\sqCorrAnsButtonActionHook}}%
+        \mbox{\push@@Button{#1}{\Fld@name}{}{\DefaultHeightOfWidget}%
+            {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
+            {\CorrAnsButtonDefaults\@@CorrAnsButtonActions
+            \every@ButtonField\every@CorrAnsButton}}%
+    \fi
+    \egroup
+}
+\def\sqClearButtonDefaults
+{%
+    \CA{\eq@local@sqClearButton}\textColor{0 g}\F{\FPrint}
+    \BC{0 0 0}\BG{.7529 .7529 .7529}\W{1}\S{B}\Ff{\FfNoExport}
+}
+\def\@@sqClearButtonActions
+{%
+    \A{\JS{ProcessIt = false;\jsR
+        if ( typeof \oField\space== "undefined" )\jsR\jsT
+            \oField\space= new Object;\jsR
+        if (typeof appAlerts["\oField"] == "undefined")\jsR\jsT
+            appAlerts["\oField"] = new Object;\jsR
+        this.resetForm(new Array("mc.\oField","obj.\oField",%
+        "tally.\oField","grpobj.\oField"));\jsR
+        var f = this.getField("obj.\oField");\jsR
+        if ( f != null ) f.strokeColor=\ifx\defaultColorJSLoc\@empty
+\defaultColorJS\else\defaultColorJSLoc\fi;\jsR
+        f = this.getField("grpobj.\oField");\jsR
+        if ( f != null ) f.strokeColor=\ifx\defaultColorJSLoc\@empty
+\defaultColorJS\else\defaultColorJSLoc\fi;\jsR
+        f = this.getField("rbmarkup.\oField");\jsR
+        if ( f != null ) f.display=display.hidden;\jsR
+        \oField.Grp = {};\jsR
+        appAlerts["\oField"].bAfterValue=false;\jsR
+        ProcessIt=true;}%
+    }
+}
+\newcommand\sqClearButton[1][]
+{%
+    \mbox{\push@@Button{#1}{clear.\oField}{}{\DefaultHeightOfWidget}%
+        {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
+        {\sqClearButtonDefaults\@@sqClearButtonActions\every@ButtonField
+         \every@sqClearButton}}%
+}
+\def\PromptButtonDefaults
+{%
+   \CA{\eq@local@CorrAnsButton}\W{1}\S{S}\BC{0 0 0}
+   \BG{.7529 .7529 .7529}\H{P}
+}
+\newcommand{\promptButtonMsg}{%
+    "Would you like to see the correct answer at this time? "\r\t\t
+    + "Your current answer will be the one that will be scored. "\r\t\t
+    + "If you click on \\"Yes\\",
+        you will not be able to change your answer."
+}
+\newcommand{\AnsPromptBtnStr}{Answer:\space}
+\def\PromptButtonActionHook
+{%
+     \JS{%
+        if (!isQuizInitialized("\currQuiz")) {\r\t
+            eqAppAlert(InitMsg("\bqlabelISO"),3);\r\t
+            event.rc=false;\r
+        } else {\r\t
+            if ( !\currQuiz.oAlertCheck.bAfterValue ) {\r\t
+                var resp=eqAppAlert({\r\t\t
+                    cMsg:\promptButtonMsg,\r\t\t
+                    nIcon: 2, nType: 2,\r\t\t
+                    cTitle: ("AcroTeX Prompt Message"),\r\t\t
+                    oCheckbox: \currQuiz.oAlertCheck\r\t
+                });\r\t
+            }\r
+            if ( promptQuiz.oAlertCheck.bAfterValue || resp==4 )\r\t
+            {\r\t\t
+                var field=this.getField(%
+                    "obj.\currQuiz.\thequestionno");\r\t\t
+                field.readonly=true;\r\t\t
+                field=this.getField("Ans.\currQuiz");\r\t\t
+                if (field!=null)
+                    field.value = "\AnsPromptBtnStr\PromptAns";\r\t
+            }\r
+        }
+    }%
+}
+\newcommand\@PromptButton[2][]
+{%
+    \def\PromptAns{#2}\if\eqQuizType\isQZ
+    \def\Fld@name{promptButton.\curr@quiz.\thequestionno}%
+    \else\def\Fld@name{promptButton.\oField.\thequestionno}\fi
+    \if\eqQuizType\isQZ
+        \def\@@PromptButtonActions{%
+            \A{\PromptButtonActionHook}}%
+            \mbox{\push@@Button{#1}{\Fld@name}{}%
+                {\DefaultHeightOfWidget}{\eq@protect\A}%
+                {\eq@setButtonProps\eq@Button@driver}%
+                {\PromptButtonDefaults\@@PromptButtonActions
+                \every@ButtonField\every@CorrAnsButton}}%
+        \else\PackageWarning{exerquiz}{The \string\PromptButton
+            is for quiz questions only.}
+    \fi
+}
+\newcommand{\PromptButton}{\makebox[0pt][r] % assumes xcolor
+    {\@PromptButton[\textColor{1 0 0 rg}]{\CorrectAns}}}
+\let\eq@ansGrpArray\@empty
+\def\eq@recordGrpAnsArray#1{%
+    \ifx\eq@ansGrpArray\@empty
+        \edef\tmp@exp{\noexpand\g@addto@macro
+            \noexpand\eq@ansGrpArray{#1}}\else
+        \edef\tmp@exp{\noexpand\g@addto@macro
+            \noexpand\eq@ansGrpArray{,#1}}\fi
+        \tmp@exp
+}
+\let\grpquestions\eq@Zero
+\def\mathGrp{\global\let\eq@ansGrpArray\@empty
+    \@ifnextchar[{\@imathGrp}{\@imathGrp[groupEval]}}
+\def\@imathGrp[#1]{\def\argi{#1}%
+    \@ifnextchar[{\@iimathGrp}{\@iimathGrp[]}}
+\def\@iimathGrp[#1]{\def\argii{#1}%
+    \eq@AddProbToQzQuesList
+    \global\let\grpquestions\eq@One
+    \setcounter{grpquestionno}{0}%
+    \stepcounter{questionno}%
+    \xdef\beginGrp{\thequestionno}%
+    \xdef\grpPointValue{\eqPTs}%
+    \eq@recordThesePTs\eq@recordProbType
+    \if\eqQuizType\isQZ
+        \edef\eqtmp{\aPointType}%
+        \xdef\aPointType{\eqtmp,[\eqPTs,"grp"]}\fi
+    \addtocounter{eqpointvalue}{\eqPTs}%
+    \ifx\argii\@empty
+        \xdef\grpTotalWeight{\eqPTs}%
+        \xdef\grpEvalFunction{\argi}%
+    \else
+        \xdef\grpTotalWeight{\argi}%
+        \xdef\grpEvalFunction{\argii}%
+    \fi
+}
+\def\endmathGrp{\global\let\grpquestions\eq@Zero
+    \eq@recordCorrAns{[\eq@ansGrpArray]}%
+    \xdef\endGrp{\thequestionno}}
+\def\CorrAnsButtonGrpDefaults
+{%
+   \CA{\eq@local@CorrAnsButton}\W{1}\S{S}\BC{0 0 0}
+   \BG{.7529 .7529 .7529}\H{P}
+}
+\def\CorrAnsButtonGrpActionHook{\JS{%
+\ifx\@qzsolndest\@empty\else
+    if (event.shift)\jsR\jsT
+        this.gotoNamedDest("\@qzsolndest");\jsR
+    else\jsR
+\fi
+    {\jsR\jsT
+        var aCorrectAns=\CorrectAns;\jsR\jsT
+        var beginGrp = 1;\jsR\jsT
+        grpOffset = beginGrp;\jsR\jsT
+        if ( \currQuiz.Grp==null ) \currQuiz.Grp = {};\jsR\jsT
+        if (typeof \currQuiz.Grp["\thequestionno"]=="undefined")\jsR\jsT
+        {\jsR\jsT\jsT
+            \currQuiz.Grp["\thequestionno"] = {offset: 0};\jsR\jsT\jsT
+            var f = this.getField(%
+                "grpobj.\curr@quiz.\thequestionno."
+                    + grpOffset)\jsR\jsT\jsT
+            if ( f.readonly ) {\jsR\jsT\jsT
+                f.readonly = false;\jsR\jsT\jsT
+                f.setFocus();\jsR\jsT\jsT
+                eqDelay = app.setTimeOut(%
+                    "f.readonly = true;
+                    app.clearTimeOut(eqDelay);",10);\jsR\jsT
+            } else f.setFocus();\jsR\jsT
+        }\jsR\jsT
+        else \jsR\jsT
+        {\jsR\jsT\jsT
+            \currQuiz.Grp["\thequestionno"].offset =
+                ++\currQuiz.Grp["\thequestionno"].offset
+                \% aCorrectAns.length;\jsR\jsT\jsT
+            grpOffset = beginGrp
+                + \currQuiz.Grp["\thequestionno"].offset;\jsR\jsT\jsT
+            var f = this.getField("grpobj.\curr@quiz.\thequestionno."
+                + grpOffset);\jsR\jsT\jsT
+            if ( f.readonly ) {\jsR\jsT\jsT
+                f.readonly = false;\jsR\jsT\jsT
+                f.setFocus();\jsR\jsT\jsT
+                eqDelay = app.setTimeOut("f.readonly = true;
+                    app.clearTimeOut(eqDelay);",10);\jsR\jsT
+            } else f.setFocus();\jsR\jsT
+        }\jsR\jsT
+\if\eqQuizType\isQZ
+        DisplayAnswer("Ans.\curr@quiz",
+            aCorrectAns[\currQuiz.Grp["\thequestionno"].offset],%
+\currQuiz);
+\else
+        DisplayAnswer("grpobj.\oField.\thequestionno."+ grpOffset,
+            aCorrectAns[\currQuiz.Grp["\thequestionno"].offset],%
+\oField);\jsR
+\fi
+    }
+}}
+\newcommand\CorrAnsButtonGrp[2][]
+{%
+    \makeStringArray{#2}%
+    \edef\CorrectAns{\stringArray}%
+    \if\eqQuizType\isQZ\def\Fld@name{corr.\curr@quiz.\thequestionno}%
+    \else\edef\currQuiz{\oField}%
+    \def\Fld@name{corr.\oField.\thequestionno}\fi
+    \if\eqQuizType\isQZ
+        \edef\@@CorrAnsButtonGrpActions{\noexpand\F{\FHidden}%
+            \ifx\@qzsolndest\@empty%\noexpand\BC{\normalCABtnBC}
+            \else\noexpand\BC{\solution@Color}\fi
+            \noexpand\A{\noexpand\CorrAnsButtonGrpActionHook}}%
+        \ifeq@noquizsolutions\else
+           \mbox{\push@@Button{#1}{\Fld@name}{}{\DefaultHeightOfWidget}%
+                {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
+                {\CorrAnsButtonGrpDefaults\@@CorrAnsButtonGrpActions
+                \every@ButtonField\every@CorrAnsButton}}%
+        \fi
+    \else
+        \edef\@@CorrAnsButtonGrpActions{%
+            \ifx\@qzsolndest\@empty%\noexpand\BC{\normalCABtnBC}
+            \else\noexpand\BC{\solution@Color}\fi
+            \noexpand\A{\noexpand\CorrAnsButtonGrpActionHook}}%
+        \mbox{\push@@Button{#1}{\Fld@name}{}{\DefaultHeightOfWidget}%
+            {\eq@protect\A}{\eq@setButtonProps\eq@Button@driver}%
+            {\CorrAnsButtonGrpDefaults\@@CorrAnsButtonGrpActions
+            \every@ButtonField\every@CorrAnsButton}}%
+    \fi
+}
+\def\makeStringArray#1{\def\stringArray{[}\@makeStringArray#1,\@nil}
+\def\@makeStringArray#1,#2\@nil{%
+    \edef\eq@temp{\stringArray}\def\argii{#2}%
+    \ifx\argii\@empty
+        \edef\stringArray{\eq@temp"#1"]}%
+        \def\eq@next{}%
+    \else
+        \edef\stringArray{\eq@temp"#1",}%
+        \def\eq@next{\@makeStringArray#2\@nil}%
+    \fi
+    \eq@next
+}
+\let\@eqListExp\relax
+\let\@currentQues\@empty
+\let\eqQzQuesList\@empty
+\def\eq@AddProbToQzQuesList{%
+    \edef\eq@tmpExp{\noexpand\g@addto@macro%
+        \noexpand\eqQzQuesList{%
+            \noexpand\@eqListExp{\@currentQues}{\thepage}}}%
+    \ifx\grpquestions\eq@Zero\eq@tmpExp\fi
+}
+\LangRedefinitions
+\input{aebjs.def}
+\inputSumryTblCode
+\inputMCFICode
+\newcommand{\solutionColor}[1]{\def\eq@argi{#1}\ifx\eq@argi\@empty
+    \def\solution@Color{\solutionColorDef}\else
+    \def\solution@Color{#1}\fi}
+\newcommand{\solutionColorDef}{0 .6 0}
+\solutionColor{\solutionColorDef}
+\@ifundefined{jsColor}{%
+    \InputIfFileExists{eqcolor.def}{\PackageInfo{exerquiz}
+        {Inputting eqcolor.def}}
+        {\PackageError{exerquiz}{cannot find eqcolor.def}
+        {Refresh your file name database and try again.}}
+}{}
+\newcommand\rghtColorJSDef{["RGB", 0, .6, 0]}
+\newcommand\rghtColorJS{\rghtColorJSDef}
+\newcommand\wrngColorJSDef{color.red}
+\newcommand\wrngColorJS{\wrngColorJSDef}
+\newcommand\partialColorJSDef{color.blue}
+\newcommand\partialColorJS{\partialColorJSDef}
+\newcommand\defaultColorJSDef{color.black}
+\newcommand\defaultColorJS{\defaultColorJSDef}
+\let\defaultColorJSLoc\@empty
+\let\defaultColorJSLocDef\@empty
+\let\rghtColorJSLoc\@empty
+\let\rghtColorJSLocDef\@empty
+\let\wrngColorJSLoc\@empty
+\let\wrngColorJSLocDef\@empty
+\let\partialColorJSLoc\@empty
+\let\partialColorJSLocDef\@empty
+\def\chooseJSsymbol{\@ifstar{\let\eq@isstar\eq@YES\chooseJSsymboli}
+    {\let\eq@isstar\eq@NO\chooseJSsymboli}}
+\def\chooseJSsymboli#1{\lowercase{\edef\eq@arg{#1}}%
+    \def\eq@carg{check}\ifx\eq@arg\eq@carg
+    \def\eq@retnStyle{style.ch}\else
+    \def\eq@carg{cross}\ifx\eq@arg\eq@carg
+    \def\eq@retnStyle{style.cr}\else
+    \def\eq@carg{diamond}\ifx\eq@arg\eq@carg
+    \def\eq@retnStyle{style.di}\else
+    \def\eq@carg{circle}\ifx\eq@arg\eq@carg
+    \def\eq@retnStyle{style.ci}\else
+    \def\eq@carg{star}\ifx\eq@arg\eq@carg
+    \def\eq@retnStyle{style.st}\else
+    \def\eq@carg{square}\ifx\eq@arg\eq@carg
+    \def\eq@retnStyle{style.sq}\else
+    \let\eq@retnStyle\@empty
+    \ifx\eq@isstar\eq@NO\PackageWarning{exerquiz}
+    {Argument `#1' not recognized.\MessageBreak
+     Permissible values are check, cross, diamond,\MessageBreak
+     circle, star, square. Will use the default}\fi
+    \fi\fi\fi\fi\fi\fi
+}
+\newcommand\setRghtAnsSymb[1]{\chooseJSsymbol{#1}%
+    \ifx\eq@retnStyle\@empty\else
+    \edef\rghtAnsSymbJS{\eq@retnStyle}%
+    \edef\rghtAnsSymb{\eq@carg}\fi}
+\def\rghtAnsSymbJS{style.ch}
+\def\rghtAnsSymb{check}
+\newcommand\setCorrAnsSymb[1]{\chooseJSsymbol{#1}%
+    \ifx\eq@retnStyle\@empty\else
+    \edef\corrAnsSymbJS{\eq@retnStyle}%
+    \edef\corrAnsSymb{\eq@carg}\fi}
+\def\corrAnsSymbJS{style.ci}
+\def\corrAnsSymb{circle}
+\newcommand\setWrngAnsSymb[1]{\chooseJSsymbol{#1}%
+    \ifx\eq@retnStyle\@empty\else
+    \edef\wrngAnsSymbJS{\eq@retnStyle}%
+    \edef\wrngAnsSymb{\eq@carg}\fi}
+\def\wrngAnsSymbJS{style.cr}
+\def\wrngAnsSymb{cross}
+\def\setRghtAnsSymbLoc#1{\chooseJSsymbol*{#1}%
+    \ifx\eq@retnStyle\@empty
+        \let\rghtAnsSymbJSLoc\@empty\else
+        \edef\rghtAnsSymbJSLoc{\eq@retnStyle}\fi
+}
+\def\setCorrAnsSymbLoc#1{\chooseJSsymbol*{#1}%
+    \ifx\eq@retnStyle\@empty
+        \let\corrAnsSymbJSLoc\@empty\else
+        \edef\corrAnsSymbJSLoc{\eq@retnStyle}\fi
+}
+\def\setWrngAnsSymbLoc#1{\chooseJSsymbol*{#1}%
+    \ifx\eq@retnStyle\@empty
+        \let\wrngAnsSymbJSLoc\@empty\else
+        \edef\wrngAnsSymbJSLoc{\eq@retnStyle}\fi
+}
+\let\rghtAnsSymbJSLoc\@empty
+\let\rghtAnsSymbJSLocDef\@empty
+\let\corrAnsSymbJSLoc\@empty
+\let\corrAnsSymbJSLocDef\@empty
+\let\wrngAnsSymbJSLoc\@empty
+\let\wrngAnsSymbJSLocDef\@empty
+\newcommand\everyeqTextField[1]{\def\every@eqTextField{#1}}
+\def\every@eqTextField{}
+\newcommand\everyRespBoxMath[1]{\def\every@RespBoxMath{#1}}
+\def\every@RespBoxMath{}
+\newcommand\everyRespBoxTxt[1]{\def\every@RespBoxTxt{#1}}
+\def\every@RespBoxTxt{}
+\newcommand\everyrbMarkup[1]{\def\every@rbMarkup{#1}}
+\def\every@rbMarkup{}
+\newcommand\everysqTallyBox[1]{\def\every@sqTallyBox{#1}}
+\def\every@sqTallyBox{}
+\newcommand\everysqTallyTotal[1]{\def\every@sqTallyTotal{#1}}
+\def\every@sqTallyTotal{}
+\newcommand\everyScoreField[1]{\def\every@ScoreField{#1}}
+\def\every@ScoreField{}
+\newcommand\everyAnswerField[1]{\def\every@AnswerField{#1}}
+\def\every@AnswerField{}
+\newcommand\everyPointsField[1]{\def\every@PointsField{#1}}
+\def\every@PointsField{}
+\newcommand\everyPercentField[1]{\def\every@PercentField{#1}}
+\def\every@PercentField{}
+\newcommand\everyGradeField[1]{\def\every@GradeField{#1}}
+\def\every@GradeField{}
+\newcommand{\everysqRadioButton}[1]{\def\every@sqRadioButton{#1}}
+\def\every@sqRadioButton{}
+\newcommand{\everyqRadioButton}[1]{\def\every@qRadioButton{#1}}
+\def\every@qRadioButton{}
+\newcommand{\everyqckCheckBox}[1]{\def\every@qckCheckbox{#1}}
+\def\every@qckCheckbox{}
+\newcommand{\everyqCheckBox}[1]{\def\every@qCheckBox{#1}}
+\def\every@qCheckBox{}
+\newcommand{\everysqCheckBox}[1]{\def\every@sqCheckBox{#1}}
+\def\every@sqCheckBox{}
+\let\everyeqButtonField\everyButtonField
+\newcommand\everyCorrAnsButton[1]{\def\every@CorrAnsButton{#1}}
+\def\every@CorrAnsButton{}
+\newcommand\everysqClearButton[1]{\def\every@sqClearButton{#1}}
+\def\every@sqClearButton{}
+\newcommand\everyeqButton[1]{\def\every@eqButton{#1}}
+\newcommand\everyCorrButton{\everyeqButton}
+\def\every@eqButton{}
+\newcommand\everyBeginQuizButton[1]{\def\every@BeginQuizButton{#1}}
+\def\every@BeginQuizButton{}
+\newcommand\everyEndQuizButton[1]{\def\every@EndQuizButton{#1}}
+\def\every@EndQuizButton{}
+\let\everyeqGenButton\everyPushButton
+\let\every@eqGenButton\every@PushButton
+\let\eqGenButton\pushButton
+\newcommand\everyeqIcon[1]{\def\every@eqIcon{#1}}
+\def\every@eqIcon{}
+\def\formatInitAltApprs{\formatInitAltApprs}
+\def\@eqAddAAFormat#1{\def\@rgi{#1}\ifx\@rgi\formatInitAltApprs
+  \bInitAltAppr\else\def\eqAddAAFormat{#1}\fi}
+\def\eqAddAAFormat{}
+\def\formatAsSet{try{formatAsSet()}catch(e){}}
+\def\formatAsVector{try{formatAsVector()}catch(e){}}
+\def\eq@SupActnLst{{\AddAAKeystroke}{\AddAAMouseUpMC}%
+  {\AddAAMouseUpMS}{\AddAAFormat}}
+\newcommand\setActionKeys{\edef\catOfAt{\the\catcode`@}%
+  \ifnum\catOfAt=11 \let\eq@CatTail\relax\else
+  \makeatletter\let\eq@CatTail\makeatother\fi\setActionKeysi}
+\def\setActionKeysi#1{\let\eq@itsGood\eq@One
+  \def\setActionKeys@cont{\processAppArgs#1\end\@nil}%
+  \begingroup\eq@checkivValidKeys#1\end\ef@nil\endgroup\eq@CatTail}
+\def\eq@checkivValidKeys#1#2{\def\eq@GOOD{good}\expandafter
+    \@tfor\expandafter
+    \@ction\expandafter:\expandafter=\eq@SupActnLst\do{%
+    \expandafter\def\@ction{good}}%
+    \ifx\end#1% if #1=\end, #2=\ef@nil.
+      \def\eq@next{\aftergroup\setActionKeys@cont}%
+    \else
+      \if\eq@itsGood\eq@One
+        \let\itp@ss0\let\@@next\relax
+        \expandafter\@tfor\expandafter
+          \@ction\expandafter:\expandafter=\eq@SupActnLst\do{%
+          \expandafter\ifx\expandafter#1\@ction
+          \let\itp@ss\eq@One\@break@tfor
+        \fi}% do
+        \if\itp@ss\eq@Zero\let\eq@itsGood\eq@Zero
+          \def\eq@next{\def\eq@lastArg{#1}\expandafter
+            \eq@sqkErrorMsg\ef@gobbletonil}\else
+          \let\eq@next\eq@checkivValidKeys\fi
+        \else\let\eq@next\ef@gobbletonil\fi
+    \fi %\ifx\end
+    \eq@next
+}
+\def\eq@sqkErrorMsg#1{\PackageError{exerquiz}{The key \expandafter
+  \string\eq@lastArg\space is not supported by
+  \string\setActionKeys.\MessageBreak
+  Remove the key or correct the spelling of the key}{}}
+\def\addToAction{\makeatletter\@ifstar{\let\isSt@r\eq@YES\@ddToAction}
+  {\let\isSt@r\eq@NO\@ddToAction}}
+\def\@ddToAction#1#2{\let\eq@itsGood\eq@One
+  \def\setActionKeys@cont{\@@ddToAction{#1}{#2}}\begingroup
+  \eq@checkivValidKeys{#1}{#2}\end\ef@nil\endgroup\makeatother}
+\def\@@ddToAction#1#2{\@getCmdName{#1}%
+  \if\isSt@r\eq@YES\toks2={#2}%
+    \toks@=\aeb@exiii{\csname eq\@CmdName\endcsname}%
+    \edef\tmp@tokshold{\the\toks2 \the\toks@}%
+    \toks@=\expandafter{\tmp@tokshold}\else
+    \toks@=\aeb@exiii{\csname eq\@CmdName\endcsname#2}\fi
+  \expandafter\edef\csname eq\@CmdName\endcsname{\the\toks@}%
+}
+\def\@eqAddAAKeystroke#1{\def\argi{#1}\ifx\argi\@empty
+    \def\eqAddAAKeystroke{}\else\def\eqAddAAKeystroke{#1}\fi} %\r
+\def\eqAddAAKeystroke{}
+\def\@eqAddAAMouseUpMC#1{\def\argi{#1}\ifx\argi\@empty
+    \def\eqAddAAMouseUpMC{}\else\def\eqAddAAMouseUpMC{#1}\fi}
+\def\eqAddAAMouseUpMC{}
+\def\@eqAddAAMouseUpMS#1{\def\argi{#1}\ifx\argi\@empty
+    \def\eqAddAAMouseUpMS{}\else\def\eqAddAAMouseUpMS{#1}\fi}
+\def\eqAddAAMouseUpMS{}
+\def\eqIconDefaults
+{%
+    \rawPDF{}\S{}\mkIns{/TP 1}\W{}
+    \CA{}\RC{}\AC{}\BC{}\BG{}\H{N}
+    \textColor{0 g}\Ff{\FfReadOnly}
+}
+\newcommand\eqIcon[4][]
+{%
+    \mbox{\push@@Button{#1}{#2}{#3}{#4}{}{\eq@setButtonProps
+        \eq@Button@driver}{\eqIconDefaults\every@ButtonField
+        \every@eqIcon}}%
+}
+\eq@restoreCats
+\endinput
+%%
+%% End of file `exerquiz.sty'.
-- 
cgit v1.2.3

