summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-04-01 22:53:08 +0000
committerKarl Berry <karl@freefriends.org>2013-04-01 22:53:08 +0000
commitc25d79c21f64b8a6308def0cb49fd157013fe73c (patch)
treec1d5192b68b883e9b1777f49c77ac51dd22bcf65
parent10de002a89f8d259923ae38d4f6d5f79638f90cb (diff)
xint (1apr13)
git-svn-id: svn://tug.org/texlive/trunk@29602 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/xint/README52
-rw-r--r--Master/texmf-dist/doc/latex/xint/xint.pdfbin0 -> 232494 bytes
-rw-r--r--Master/texmf-dist/source/latex/xint/xint.dtx6164
-rw-r--r--Master/texmf-dist/source/latex/xint/xint.ins25
-rw-r--r--Master/texmf-dist/tex/latex/xint/xint.sty3209
-rw-r--r--Master/texmf-dist/tex/latex/xint/xintgcd.sty545
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rw-r--r--Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/xint.tlpsrc0
9 files changed, 9997 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/xint/README b/Master/texmf-dist/doc/latex/xint/README
new file mode 100644
index 00000000000..d4de9587878
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xint/README
@@ -0,0 +1,52 @@
+%----------------------------------------------------------------
+% xint: Expandable operations on long numbers
+% xintgcd: Euclidean algorithm with xint package
+% Copyright (C) 2013 by Jean-Francois Burnol
+% Version: v1.0 (2013/03/28)
+%----------------------------------------------------------------
+
+ This work consists of the main source file xint.dtx and
+ its derived files, among them the style files xint.sty,
+ xintgcd.sty, and the documentation file xint.pdf.
+
+ The author of this work is Jean-Francois Burnol
+ <jfbu at free dot fr>
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c of this license or (at your option) any later
+ version. This version of this license is in
+ http://www.latex-project.org/lppl/lppl-1-3c.txt
+ and the latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3 or later is part of all distributions of
+ LaTeX version 2005/12/01 or later.
+
+ Installation and Usage:
+ =======================
+
+ Run tex or latex on xint.dtx.
+
+ This will extract the style files xint.sty and xintgcd.sty (and
+ xint.ins). Files with the same names and in the same repertory
+ will be overwritten. The tex (not latex) run will stop with the
+ complaint that it does not understand \NeedsTeXFormat, but the
+ style files will already have been extracted by that time.
+
+ Alternatively, run tex or latex on xint.ins if available.
+
+ To get xint.pdf run pdflatex thrice on xint.dtx
+
+ xint.sty, xintgcd.sty -> TDS:tex/generic/xint/
+ xint.dtx -> TDS:source/generic/xint/
+ xint.pdf -> TDS:doc/generic/xint/
+
+ It may well be necessary to then refresh the TeX installation
+ filename database.
+
+ Usage with LaTeX: \usepackage{xint}
+ \usepackage{xintgcd}
+
+ Usage with TeX: \input xint.sty\relax
+ \input xintgcd.sty\relax
+
diff --git a/Master/texmf-dist/doc/latex/xint/xint.pdf b/Master/texmf-dist/doc/latex/xint/xint.pdf
new file mode 100644
index 00000000000..10b138f207b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/xint/xint.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/xint/xint.dtx b/Master/texmf-dist/source/latex/xint/xint.dtx
new file mode 100644
index 00000000000..a652e6fa7c0
--- /dev/null
+++ b/Master/texmf-dist/source/latex/xint/xint.dtx
@@ -0,0 +1,6164 @@
+% -*- coding: iso-latin-1; -*-
+% File: xint.dtx
+%%----------------------------------------------------------------
+%% xint: Expandable operations on long numbers
+%% xintgcd: Euclidean algorithm with xint package
+%% Copyright (C) 2013 by Jean-Francois Burnol
+%%----------------------------------------------------------------
+%<*ins>
+\def\pkgname{xint}
+\def\pkgdate{2013/03/28}
+\def\pkgversion{v1.0}
+\def\pkgdescription{Expandable operations on long numbers (jfB)}
+%</ins>
+%
+% This work consists of the main source file xint.dtx and
+% its derived files, among them the style files xint.sty,
+% xintgcd.sty, and the documentation file xint.pdf.
+%
+% The author of this work is Jean-Francois Burnol
+% <jfbu at free dot fr>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. This version of this license is in
+% http://www.latex-project.org/lppl/lppl-1-3c.txt
+% and the latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% Installation and Usage:
+% =======================
+%
+% Run tex or latex on xint.dtx.
+%
+% This will extract the style files xint.sty and xintgcd.sty (and
+% xint.ins). Files with the same names and in the same repertory
+% will be overwritten. The tex (not latex) run will stop with the
+% complaint that it does not understand \NeedsTeXFormat, but the
+% style files will already have been extracted by that time.
+%
+% Alternatively, run tex or latex on xint.ins if available.
+%
+% To get xint.pdf run pdflatex thrice on xint.dtx
+%
+% xint.sty, xintgcd.sty -> TDS:tex/generic/xint/
+% xint.dtx -> TDS:source/generic/xint/
+% xint.pdf -> TDS:doc/generic/xint/
+%
+% It may well be necessary to then refresh the TeX installation
+% filename database.
+%
+% Usage with LaTeX: \usepackage{xint}
+% \usepackage{xintgcd}
+%
+% Usage with TeX: \input xint.sty\relax
+% \input xintgcd.sty\relax
+%
+%<*none>
+\def\lasttimestamp{Time-stamp: <31-03-2013 20:55:34 CEST jfb>}
+\def\docdate{2013/03/31}
+\def\striptimestamp#1 <#2 #3 #4 #5>{#2 at #3 #4}
+\edef\dtxtimestamp{\expandafter\striptimestamp\lasttimestamp}
+\begingroup
+\input docstrip.tex
+\askforoverwritefalse
+\generate{\nopreamble
+\file{\pkgname.ins}{\from{\pkgname.dtx}{ins}}
+\usepreamble\defaultpreamble
+\file{\pkgname.sty}{\from{\pkgname.dtx}{package}}
+\file{\pkgname gcd.sty}{\from{\pkgname.dtx}{gcd}}}
+\endgroup
+\iffalse
+%</none>
+%<*ins>
+%----------- -> .ins file ----------------------------------------
+%%
+%% This is a generated file. Run tex or latex on this file to
+%% extract xint.sty and xintgcd.sty from xint.dtx
+%%
+%% See xint.dtx for the statements of copyright and conditions of
+%% distribution and/or modification of this work.
+%%
+\input docstrip.tex
+\askforoverwritefalse
+\generate{\usepreamble\defaultpreamble
+\file{\pkgname.sty}{\from{\pkgname.dtx}{package}}
+\file{\pkgname gcd.sty}{\from{\pkgname.dtx}{gcd}}}
+\endbatchfile
+%----------- end of .ins file ------------------------------------
+%</ins>
+%<*none>
+\fi
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{\pkgname.dtx}
+ [`\pkgname' source and documentation (\dtxtimestamp)]
+\documentclass[a4paper,11pt,abstract]{scrdoc}
+\pagestyle{headings}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[hscale=0.66,vscale=0.75]{geometry}
+
+\usepackage{xint}
+\usepackage{xintgcd}
+
+\usepackage{txfonts}
+
+% malheureusement, comme j'utilise des diacritiques dans mes
+% parties commentées, imprimées verbatim, je ne pourrai pas
+% utiliser dvipdfmx qui a un problème avec txtt
+
+\DeclareFontFamily{T1}{txtt}{}
+\DeclareFontShape{T1}{txtt}{m}{n}{ %medium
+ <->s*[.96] t1xtt%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{sc}{ %cap & small cap
+ <->s*[.96] t1xttsc%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{sl}{ %slanted
+ <->s*[.96] t1xttsl%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{it}{ %italic
+ <->ssub * txtt/m/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{m}{ui}{ %unslanted italic
+ <->ssub * txtt/m/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{n}{ %bold extended
+ <->t1xbtt%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{sc}{ %bold extended cap & small cap
+ <->t1xbttsc%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{sl}{ %bold extended slanted
+ <->t1xbttsl%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{it}{ %bold extended italic
+ <->ssub * txtt/bx/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{bx}{ui}{ %bold extended unslanted italic
+ <->ssub * txtt/bx/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{n}{ %bold
+ <->ssub * txtt/bx/n%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{sc}{ %bold cap & small cap
+ <->ssub * txtt/bx/sc%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{sl}{ %bold slanted
+ <->ssub * txtt/bx/sl%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{it}{ %bold italic
+ <->ssub * txtt/bx/it%
+}{}
+\DeclareFontShape{T1}{txtt}{b}{ui}{ %bold unslanted italic
+ <->ssub * txtt/bx/ui%
+}{}
+
+\usepackage{xspace}
+\usepackage{color}
+
+\definecolor{joli}{RGB}{225,95,0}
+\definecolor{JOLI}{RGB}{225,95,0}
+\definecolor{BLUE}{RGB}{0,0,255}
+\definecolor{niceone}{RGB}{38,128,192}
+
+\usepackage[english]{babel}
+
+\usepackage[%
+pdfencoding=pdfdoc,bookmarks=true]{hyperref}
+
+\hypersetup{%
+linktoc=all,%
+breaklinks=true,%
+hidelinks,%
+pdfauthor={Jean-Fran\c cois Burnol},%
+pdftitle={The xint and xintgcd packages},%
+pdfsubject={Arithmetic with TeX},%
+pdfkeywords={Expansion, arithmetic, TeX},%
+pdfstartview=FitH,%
+pdfpagemode=UseOutlines}
+
+
+\makeatletter
+% 7 mars 2013
+% This macro allows to conveniently center a line inside a paragraph and still
+% use therein \verb or other commands changing catcodes.
+% A proposito, the \LaTeX \centerline uses \hsize and not \linewidth !
+\def\@centeredline {\hbox to \linewidth
+ \bgroup \hss \bgroup
+ \aftergroup\centeredline@ }
+ \newcommand*\centeredline {%
+ \ifhmode
+ \\\relax
+ \def\centeredline@{\hss\egroup\hskip\z@skip}%
+ \else
+ \def\centeredline@{\hss\egroup}%
+ \fi
+ \afterassignment\@centeredline
+ \let\next=}
+\makeatother
+
+\makeatletter
+\let\original@check@percent\check@percent
+\let\check@percent\relax
+% le \verb de doc.sty est très chiant car il a retiré
+% \verbatim@font pour mettre un \ttfamily hard-coded
+% à la place.
+%
+% Par ailleurs j'en ai marre des erreurs dues au fait que mes
+% paragraphes reformatés dans emacs passent à la ligne au milieu
+% d'un \verb. Je décide donc d'annuler l'effet du \dospecials sur
+% les espaces dans la source. Et donc je retire le
+% \verb@eol@error et il n'y a donc plus lieu d'un comportement
+% différent pour l'impression des blancs, donné par la version étoilée.
+%
+% Et il n'y avait donc pas de \obeylines puisque la fin de ligne
+% devenait un message d'erreur dans \verb@eol@error
+%
+\def\verb {\relax \ifmmode \hbox \else \leavevmode \null \fi
+ \bgroup \let \do \do@noligs \verbatim@nolig@list \verbatim@font
+ \let \do \@makeother \dospecials \catcode 32 10 \@ifstar
+ {\@sverb }{\@sverb }}
+% ça c'est pour mes petits morceaux de code:
+\def\verbatim@font {\ttfamily }
+\def\MacroFont{\ttfamily\baselineskip12pt\relax}
+% Mais j'ai besoin d'un verbatim différent pour les nombres car je
+% ne veux pas passer en mode mathématique et je ne veux pas les 0
+% du txtt pour cela. Comme je n'utilise pas de tabulation, je vais
+% utiliser &
+\catcode`\& 13
+\def&{\begingroup\let\do\@makeother\dospecials\catcode`\& 13 \@jfverb }
+\def\@jfverb #1&{#1\endgroup }
+\makeatother
+
+\DeclareRobustCommand\csa[1]{{\ttfamily\char`\\#1}}
+\DeclareRobustCommand\csb[1]{{\color{blue}\ttfamily\char`\\#1}}
+
+\newcommand\ch[1]{\texorpdfstring{\csa{#1}}{\textbackslash #1}}
+\newcommand\chb[1]{\texorpdfstring{\csb{#1}}{\textbackslash #1}}
+
+
+\newcommand\xintname{%
+ \texorpdfstring{{\color{joli}\ttfamily\bfseries xint}}
+ {xint}\xspace}
+
+\newcommand\xintgcdname{%
+ \texorpdfstring{{\color{joli}\ttfamily\bfseries xintgcd}}
+ {xintgcd}\xspace}
+
+\frenchspacing
+
+\renewcommand\familydefault\sfdefault
+
+\usepackage{framed}
+
+\begin{document}
+\thispagestyle{empty}
+\rmfamily
+
+\begin{center}
+ {\normalfont\Large The \xintname and \xintgcdname packages}\\
+ \textsc{Jean-François Burnol}\par
+ \footnotesize \ttfamily
+ jfbu (at) free (dot) fr\\
+ Package version: \pkgversion\ (\pkgdate)\\
+ Documentation generated from the source file\\
+ with timestamp ``\dtxtimestamp''
+\end{center}
+
+\begin{abstract}
+ The \xintname package implements with expandable \TeX{} macros
+ the basic arithmetic operations of addition, subtraction,
+ multiplication and division, as applied to arbitrarily long
+ numbers represented as chains of digits with an optional minus
+ sign.
+
+ The \xintgcdname package provides implementations of the
+ Euclidean algorithm and of its typesetting.
+
+ The packages may be used with Plain and with \LaTeX.
+\end{abstract}
+
+
+% à cause des XX.YY, mais franchement tout ce qui concerne la
+% table des matières est une catastrophe de conception avec LaTeX
+% et scrartcl n'améliore pas les choses tant que ça ici.
+\makeatletter
+\def\l@subsection {\bprot@dottedtocline {2}{1.5em}{2.8em}}
+\makeatother
+
+
+\tableofcontents
+
+\section{Origins of this package}
+
+The package |bigintcalc| by \textsc{Heiko Oberdiek} already
+provides expandable arithmetic operations on ``big numbers'',
+exceeding the \TeX{} limits (of &2^{31}-1&), so why another
+one?
+
+I got started on this in early March 2013, via a thread on the
+|c.t.tex| usenet group, where \textsc{Ulrich D\,i\,e\,z} used the
+previously cited package together with a macro (|\ReverseOrder|)
+which I had contributed to another thread. \footnote{The
+ \csa{ReverseOrder} could be avoided in that circumstance, but it
+ does play a crucial r\^ole here.} What I had learned in this
+other thread thanks to interaction with \textsc{Ulrich D\,i\,e\,z} and
+\textsc{GL} on expandable manipulations of tokens motivated me to
+try my hands at addition and multiplication.
+
+I wrote macros \csa{bigMul} and \csa{bigAdd} which I posted to the
+newsgroup; they appeared to work comparatively fast. These first
+versions did not use the \eTeX{} \csa{numexpr} macro, they worked
+one digit at a time, having previously stored digit arithmetic in
+(many) macros.
+
+I noticed that the |bigintcalc| package used the \csa{numexpr}
+\eTeX{} primitive when available, but (as far as I could tell) not
+to do computations many digits at a time. Using \csa{numexpr} for
+one digit at a time for \csa{bigAdd} and \csa{bigMul} slowed them
+a tiny bit but avoided cluttering \TeX{} memory with 1200 macros
+storing pre-computed arithmetic with 2 or 3 digits. I wondered
+if some speed could be gained by using
+\csa{numexpr} to do four digits at a time for elementary
+multiplications (as the maximal admissible number for
+\csa{numexpr} has ten digits).
+
+The present package is the result of this initial questioning.
+
+\begin{framed}\centering
+ \xintname requires the \eTeX{} \csa{numexpr} primitive.
+\end{framed}
+
+I have aimed at speed wherever I could, and to the extent that I
+could guess what was more efficient for \TeX{}. After a while
+though I did opt for more readable coding style in those parts of
+the code which were not at the heart of repeatedly used loops. In
+particular I started using \csa{ifnum} and \csa{ifcase} constructs
+which I had completely avoided so far, working only with macro
+expansions.
+
+This implementation is thus a \TeX nical thing, quite different
+from what one would do in a structured programming language like
+|C|, although the underlying algorithms are just the standard
+steps applied to hand computations (nothing fancy like
+Fast Fourier Transform...)
+
+By the way, yes \xintname enjoys working fast and efficiently with
+200 digits numbers, but surely any program (even poorly written)
+in |C| using the |CPU| for arithmetic operations on arrays of
+numbers (not digits!!!) will work thousands of times faster (or
+more, I don't know) than what can be achieved using \TeX{} to
+manipulate strings of ASCII representations of digits!
+
+% \pdfresettimer
+% \edef\x{\xintPow{1325798301}{137}}
+% \the\pdfelapsedtime\
+% \xintLen{\x}
+
+% \pdfresettimer
+% \edef\x{\xintFac{1000}}
+% \edef\T{\the\pdfelapsedtime}\T=
+% \xintQuo\T{65536} secondes\par
+% \pdfresettimer
+% \edef\y{\xintSqr{\x}}
+% \edef\T{\the\pdfelapsedtime}\T=
+% \xintQuo\T{65536} secondes\par
+% \xintLen{\x}\par
+% \xintLen{\y}\par
+
+% Sur l'iMac c'est un peu plus rapide:
+% 55570 1250
+% 573033= 8 secondes
+% 3382960= 51 secondes
+% 2568
+% 5136
+
+% This warning being issued, \xintname computes &1325798301^{137}&
+% which has 1250 digits in less than 1 second (on my 2012 acquired
+% laptop). It checks a Bezout identity involving two multiplications
+% of 200 digits numbers (and a subtraction) in one 12th of a second.
+% It computes 1000! (which has 2568 digits) in less than 10 seconds
+% and its square in less than 60 seconds: of course this will be
+% dwarfed by any specialized software. Communicating such
+% computation times from runs on an unspecified machine is not very
+% precise, but I guess my laptop is representative of the models of
+% the last two years.
+
+\section{Expansions}
+
+Except otherwise stated all macros are completely expandable. For
+example, with the following code snippet within |myfile.tex|
+\begin{verbatim}
+\newwrite\outfile
+\immediate\openout\outfile \jobname-out\relax
+\immediate\write\outfile {\xintQuo{\xintPow{2}{1000}}{\xintFac{100}}}
+% \immediate\closeout\outfile
+\end{verbatim}
+the tex run creates a file |myfile-out.tex|
+containing the decimal representation of the integer quotient &2^{1000}/100!&.
+Or, similar things can happen inside a |\csname...\endcsname|, and
+of course in an |\edef|.
+
+\edef\x{\xintQuo{\xintPow {2}{1000}}{\xintFac{100}}}
+\edef\y{\xintLen{\x}}
+\def\allownumbersplit #1%
+ {\ifx #1\relax \else #1\hskip 0pt plus 1pt
+ \expandafter\allownumbersplit\fi}%
+
+Furthermore the package macros give their final results in two
+expansion steps. They twice expand their arguments so that they
+can be arbitrarily chained. Hence \centeredline{%
+ |\xintLen{\xintQuo{\xintPow{2}{1000}}{\xintFac{100}}}|} expands
+in two steps and tells us that &[2^{1000}/100!]& has {\y}
+digits. This is not so many and we could print it here:
+{\expandafter\expandafter\expandafter\allownumbersplit
+ \xintQuo{\xintPow {2}{1000}}{\xintFac{100}}\relax}. For the sake
+of typesetting this documentation and not have big numbers extend
+into the margin and go beyond the page physical limits, I use this
+little macro (not provided by the package):
+\begin{verbatim}
+\def\allownumbersplit #1%
+ {\ifx #1\relax \else #1\hskip 0pt plus 1pt
+ \expandafter\allownumbersplit\fi}%
+\expandafter\expandafter\expandafter\allownumbersplit
+ \xintQuo{\xintPow {2}{1000}}{\xintFac{100}}\relax
+\end{verbatim}
+
+Remarks on the double expansion of arguments:
+\begin{enumerate}
+\item When I say that the macros expand twice their arguments,
+ this means that they expand the first token seen (for each
+ argument), then expand again the first token of the result of
+ the first expansion. For example
+ \centeredline{|\def\x{12}\def\y{34}|%
+ |\xintAdd {\x}{\x\y}|} is \emph{not} a legal construct. It works here
+ by sheer luck as the |\y| gets expanded inside a |\numexpr|. But
+ this would fail in general: if you need a more complete
+ (expandable...) expansion of your initial input, you should use
+ the \fbox{\csa{bigintcalcNum}} macro from the |bigintcalc|
+ package. Or, outside of an expandable-only context, just massage
+ your inputs through \csa{edef}'s.
+
+\item Unfortunately, after |\def\x {12}|, one can not use just
+ |-\x| as input to one of the package macros: the rules above
+ explain that the twice expansion will act only on the minus sign,
+ hence do nothing. The only way is to use the \csb{xintOpp}
+ macro, as in for example |\xintAdd
+ {\xintOpp\x}{\x}|\,=\,{\xintAdd {\xintOpp\x}{\x}}.
+
+\def\x {12}%
+\item With the definition \centeredline{%
+ |\def\AplusBC #1#2#3{\xintAdd {#1}{\xintMul {#2}{#3}}}|} one
+ obtains an expandable macro producing the expected result, not
+ in two, but rather in three steps: a first expansion is consumed
+ by the macro expanding to its definition. As a result {|\xintAdd
+ {\AplusBC {1}{2}{3}}{4}|} would then miserably fail. The
+ solution is to use the \emph{lowercase} form of
+ \csa{xintAdd}: \centeredline {|\def\AplusBC
+ #1#2#3{\romannumeral0\xintadd {#1}{\xintMul {#2}{#3}}}|}%
+ and then \csa{AplusBC} will share the same properties as do the
+ other \xintname `primitive' macros.
+% ENFIN DÉBARRASSÉ DES TRÈS TRÈS TRÈS CHIANTS EOL ERROR DE \verb !!!
+
+ Don't leave any space after the zero, and use the lowercase form
+ \emph{only} for the external highest level of chained commands.
+ All \xintname provided public macros have such a lowercase form
+ for this purpose.
+\end{enumerate}
+
+\section {Inputs}
+
+After a twice expansion of the arguments, the ensuing numbers have
+to be strings of digits with one (and not more) optional minus
+sign (and not a plus sign). The first digit is not
+zero if there are more than one digit. And |-0| is not legal
+input. Syntax such as
+|\xintMul\A\B| is accepted and equivalent to |\xintMul {\A}{\B}|.
+Or course |\xintAdd\xintMul\A\B\C| does not work, the product
+operation must be put within braces:
+|\xintAdd{\xintMul\A\B}\C|.
+
+It would be nice to have a functional form |\add(x,\mul(y,z))| but
+this is not provided by the package. Arguments must be either
+within braces or a single control sequence.
+
+For the division (but not for addition, subtraction, or
+division), the two inputs must have at most
+&2^{31}-9=&{\xintSub{\xintPow {2}{31}}{9}} digits.
+
+Anyhow I guess that even much smaller sizes exceed the \TeX{}
+memory limits on any installation. But if the situation did arise
+nevertheless of such a gigantic input, an arithmetic overflow
+would occur (after some long time I guess) as \xintname first
+computes the length of the inputs by using \csa{numexpr} with
+successive additions of the number |8| to itself until the whole
+input has been parsed (this initial step is only for the division
+algorithm, the three other arithmetic operations remain unaware of
+the sizes of their inputs, although they do experience them in a
+sense, as they initially reverse the order of digits of at least
+one of the input, which means they have to scan it entirely).
+
+Also: the factorial function \csa{xintFac} will refuse to
+(start...) compute |N!| if |N| $\geq$ 1000000000, and the power function
+|\xintPow {A}{B}|, when the absolute value \verb+|A|+ is at
+least two, will refuse to start the computation if |B| $\geq$ 1000000000
+(the minimal outcome is &2^{1000000000}& which has 301029996 digits...).
+
+In those latter cases, no arithmetic overflow will happen, but rather,
+copied from package |bigintcalc|, undefined control sequences with
+names indicating the source of the problem are inserted in the
+token stream and will appear in the log file in \TeX{} `undefined
+macro' error messages. This will not stop the
+computation, which (most of the time) will output a zero.
+
+No check is done on the format of the inputs after the initial
+twice expansion. Often, but not always, something starting with a
+|0| will be assumed to be zero (throwing the rest away, or
+sometimes not which then will lead to errors). Plus signs are not
+accepted and will cause errors.
+
+The sole exception is the macro \csb{xintNum} which accepts numbers
+starting with an arbitrary long sequence of plus signs, minus
+signs, followed by zeros and will remove all of them, keeping only
+the correct sign: \centeredline{|\xintNum
+ {+-+-+----++-++----00000000009876543210}|\texttt{=\xintNum
+ {+-+-+----++-++----0000000009876543210}}} But don't insert
+zeros within the initial signs. As with all other package macros,
+\csa{xintNum} expands twice its argument, and obtains its final
+result in two expansion steps.
+
+\begin{framed}
+ \TeX{}'s count registers cannot be directly used but must be
+ prefixed by |\the| or |\number|. The same for \csa{numexpr}
+ expressions.
+\end{framed}
+
+\section{Outputs}
+
+The output, when it consists of a single number, is always in the
+normalized form described in the previous section. Some macros
+have an output consisting of more than one number, each one is
+then within braces. For example \csb{xintDivision} gives first the
+quotient and then the remainder, each of them within braces. This
+is for programming purposes to avoid having to do twice the
+division, once for the quotient, the other one for the remainder: but
+of course macros \csb{xintQuo} and \csb{xintRem} are provided for easier
+direct access.
+
+The macro \csb{xintDecSplit} cuts its second argument at a
+location specified by its first argument |x|. When |x| is negative
+the cut location is from the left end of the number, and if it
+exceeds the right end (least significant digit), the second member
+of the \csa{xintDecSplit} output will be an \emph{empty} pair of braces;
+and if the cut is not too far to the right, the leading zeros of
+the right half will not be removed. This is the only case where a
+package macro may output something which would need to be input to
+\csa{xintNum} before further processing by the other package
+macros.
+
+When using things such as |\ifcase \xintSgn {\A}| one has to leave
+a space after the closing brace for \TeX{} to
+stop its scanning for a number: once \TeX{} has finished expanding
+|\xintSgn{\A}| and has so far obtained either |1|, |0|, or |-1|, a
+space (or something `unexpandable') must stop it looking for more digits.
+
+\section{Assignments}
+
+\xintAssign\xintBezout{357}{323}\to\tmpA\tmpB\tmpU\tmpV\tmpD
+
+The end user might not need to maintain at all times complete
+expandability. For example why not allow oneself the two definitions
+|\edef\A {\xintQuo{100}{3}}| and |\edef\B {\xintRem {100}{3}}|. A special
+ syntax is provided to make these things more efficient, as we
+ know that \csa{xintDivision} computes both the quotient and the
+ remainder at the same time:
+ \centeredline{\csb{xintAssign}\csa{xintDivision}|{100}{3}|\csb{to}|\A\B|}
+ \centeredline{\csb{xintAssign}\csa{xintDivision}%
+|{\xintPow {2}{1000}}{\xintFac{100}}|\csb{to}|\A\B|} gives
+\xintAssign\xintDivision{\xintPow {2}{1000}}{\xintFac{100}}\to\A\B
+|\meaning\A|\texttt{: \expandafter\allownumbersplit\meaning\A\relax} and
+|\meaning\B|\texttt{: \expandafter\allownumbersplit\meaning\B\relax}.
+
+
+ Another example (which uses a macro from the \xintgcdname
+ package):
+ \centeredline{\csb{xintAssign}\csa{xintBezout}|{357}{323}|%
+ \csb{to}|\A\B\U\V\D|} is equivalent to setting |\A| to
+ \texttt{\tmpA}, |\B| to \texttt{\tmpB}, |\U| to \texttt{\tmpU},
+ |\V| to \texttt{\tmpV}, and |\D| to \texttt{\tmpD}. And indeed
+ (\tmpU)$\times$\tmpA-(\tmpV)$\times$\tmpB=
+ \xintSub{\xintMul\tmpU\tmpA}{\xintMul\tmpV\tmpB}
+ is a Bezout Identity.
+\xintAssign\xintBezout{3570902836026}{200467139463}\to\tmpA\tmpB\tmpU\tmpV\tmpD
+\centeredline{\csb{xintAssign}\csa{xintBezout}|{3570902836026}{200467139463}|%
+ \csb{to}|\A\B\U\V\D|} gives then |\U|\texttt{:
+ \expandafter\allownumbersplit\meaning\tmpU\relax} and
+|\V|\texttt{: \expandafter\allownumbersplit\meaning\tmpV\relax}.
+
+
+
+ When one does not know in advance the number of tokens, one can
+ use \csa{xintAssignArray} or its synonym \csa{xintDigitsOf}:
+ \centeredline{\csb{xintDigitsOf}\csa{xintPow}|{2}{100}|\csb{to}\csa{Out}}
+ This defines \csa{Out} to be macro with one parameter,
+ \csa{Out}|{0}| gives the size |N| of the array and
+ \csa{Out}|{n}|, for |n| from |1| to |N| then gives the |n|th
+ element of the array, here the |n|th digit of &2^{100}&, from
+ the most significant to the least significant. As usual, the
+ generated macro \csa{Out} is completely expandable and expands twice its
+ (unique) argument. Consider the following code snippet:
+\begin{verbatim}
+\newcount\cnta
+\newcount\cntb
+\begingroup
+\xintDigitsOf\xintPow{2}{100}\to\Out
+\cnta = 1
+\cntb = 0
+\loop
+\advance \cntb \xintSqr{\Out{\the\cnta}}
+\ifnum \cnta < \Out{0}
+\advance\cnta 1
+\repeat
+
+|2^{100}| (=\xintPow {2}{100}) has \Out{0} digits and the sum of
+their squares is \the\cntb. These digits are, from the least to
+the most significant: \cnta = \Out{0}
+\loop \Out{\the\cnta}\ifnum \cnta > 1 \advance\cnta -1 , \repeat.
+\endgroup
+\end{verbatim}
+
+\newcount\cnta
+\newcount\cntb
+\begingroup
+\xintDigitsOf\xintPow{2}{100}\to\Out
+\cnta = 1
+\cntb = 0
+\loop
+\advance \cntb \xintSqr{\Out{\the\cnta}}
+\ifnum \cnta < \Out{0}
+\advance\cnta 1
+\repeat
+
+&2^{100}& (=\xintPow {2}{100}) has \Out{0} digits and the sum of
+their squares is \the\cntb. These digits are, from the least to
+the most significant: \cnta = \Out{0}
+\loop \Out{\the\cnta}\ifnum \cnta > 1 \advance\cnta -1 , \repeat.
+\endgroup
+
+We used a group in order to release the memory taken by the
+\csa{Out} array: indeed internally, besides \csa{Out} itself,
+additional macros are defined which are \csa{Out0}, \csa{Out00},
+\csa{Out1}, \csa{Out2}, ..., \csa{OutN}, where |N| is the size of
+the array (which is the value returned by |\Out{0}|; the digits
+are parts of the names not arguments).
+
+The command \csb{xintRelaxArray}\csa{Out} sets all these macros to
+\csa{relax}, but it was simpler to put everything withing a group.
+
+Needless to say \csb{xintAssign}, \csb{xintAssignArray} and
+\csb{xintDigitsOf} do not do any check on whether the macros they
+define are already defined.
+
+In the example above, we deliberately broke all rules of complete
+expandability, but had we wanted to compute the sum of the digits,
+not the sum of the squares, we could just have written:
+\centeredline{\csb{xintSum}|{\xintPow{2}{100}}=|\texttt{%
+ \xintSum{\xintPow{2}{100}}}} Indeed, \csa{xintSum} is usually
+used as in \centeredline{%
+ \csb{xintSum}|{{123}{-345}{\xintFac{7}}{\xintOpp{\xintRem{3347}{591}}}}=|\texttt{%
+ \xintSum{{123}{-345}{\xintFac{7}}{\xintOpp{\xintRem{3347}{591}}}}}}
+but in the example above each digit of &2^{100}& is treated as
+would have been a summand enclosed within braces, due to the rules
+of \TeX{} for parsing macro arguments.
+
+Note that |{-\xintRem{3347}{591}}| is not a valid input, because
+the double expansion will apply only to the minus sign and leave
+unaffected the |\xintRem|. So we used \csa{xintOpp} which replaces
+a number with its opposite.
+
+As another use of \csa{xintAssignArray} let us extract one line
+from the source code of the \xintgcdname macro
+\csb{xintTypesetEuclideAlgorithm}.
+\centeredline{|\xintAssignArray\xintEuclideAlgorithm
+ {#1}{#2}\to\U|}
+This is done inside a group. After this command |\U{1}| contains
+the number |N| of steps of the algorithm (not to be confused with
+|\U{0}=2N+4| which is the number of elements in the |\U| array),
+and the GCD is to be found in |\U{3}|, a convenient location
+between |\U{2}| and |\U{4}| which are (absolute values of the
+twice expansion of) the
+initial inputs. Then follow |N| quotients and remainders
+from the first to the last step of the algorithm. The
+\csa{xintTypesetEuclideAlgorithm} macro organizes this data
+for typesetting: this is just an example of one way to do it.
+
+
+%% As an example: \xintTypesetEuclideAlgorithm {2362001530033}{981106461701}
+
+\section{Error messages}
+
+We employ the same method as in the |bigintcalc| package. But the
+error is always thrown \emph{before} the end of the
+|romannumeral0| expansion so as to not disturb further processing
+of the token stream, if the operation was a secondary one whose
+output is expected by a first one. Here is the list of possible
+errors:
+\begin{verbatim}
+\xintError:ArrayIndexIsNegative
+\xintError:ArrayIndexBeyondLimit
+\xintError:FactorialOfNegativeNumber
+\xintError:FactorialOfTooBigNumber
+\xintError:DivisionByZero
+\xintError:FractionRoundedToZero
+\xintError:ExponentTooBig
+\xintError:TooBigDecimalShift
+\xintError:TooBigDecimalSplit
+\xintError:NoBezoutForZeros
+\end{verbatim}
+
+\section{Package namespace}
+
+Inner macros of the \xintname and \xintgcdname packages all begin
+either with |\XINT@| or with |\xint@|. The package public commands
+all start with |\xint|. The major forms have their initials
+capitalized, and lowercase forms, prefixed with |\romannumeral0|,
+allow definitions of further macros expanding in two steps to
+their full expansion (and can thus be chained with the `primitive'
+\xintname macros). Some other control sequence names are used
+only as delimiters, and left undefined.
+
+The |\xintReverseOrder|\marg{tokens} macro uses |\XINT@UNDEF| and
+|\XINT@undef| as dummy tokens and can be used on arbitrary token
+strings not containing these control sequence names. Anything
+within braces is treated as one unit: one level of exterior braces
+is removed and the contents are not reverted.
+
+\section{Loading and usage}
+
+\begin{verbatim}
+ Usage with LaTeX: \usepackage{xint}
+ \usepackage{xintgcd}
+
+ Usage with TeX: \input xint.sty\relax
+ \input xintgcd.sty\relax
+\end{verbatim}
+
+We have added, directly copied from packages by \textsc{Heiko
+ Oberdiek}, a mecanism of re-load and \eTeX{} detection,
+especially for Plain \TeX{}. As \eTeX{} is required, the
+executable |tex| can not be used, |etex| or |pdftex| (version
+|1.40| or later) or ..., must
+be invoked.
+
+Furthermore, the package \xintgcdname will check for previous
+loading of \xintname, and will try to load it if this was not
+already done.
+
+Also inspired from the \textsc{Heiko Oberdiek} packages we have
+included a complete catcode protection mecanism. The packages may
+be loaded in any catcode configuration satisfying these
+requirements: the percent is comment character, the backslash is
+escape character, digits have category code other and letters have
+category code letter. Nothing else is assumed, and the previous
+configuration is restored after the loading of the packages.
+
+This is for the loading of the packages. For the actual use of the
+macros, note that when feeding them with negative numbers the
+minus sign must have category code other, as is standard.
+
+\xintname presupposes that the usual \csa{space} and
+\csa{empty} macros are pre-defined, which is the case in Plain
+\TeX{} as well as in \LaTeX.
+
+Lastly, the macros \csa{xintRelaxArray} (of \xintname) and
+\csa{xintTypesetEuclideAlgorithm} and
+\csa{xintTypesetBezoutAlgorithm} (of \xintgcdname) use
+\csa{loop}, both Plain and \LaTeX{} incarnations are
+compatible. \csa{xintTypesetBezoutAlgorithm} also uses the
+\csa{endgraf} macro.
+
+
+\section{Installation}
+
+\begin{verbatim}
+ Run tex or latex on xint.dtx.
+
+ This will extract the style files xint.sty and xintgcd.sty (and
+ xint.ins). Files with the same names and in the same repertory
+ will be overwritten. The tex (not latex) run will stop with the
+ complaint that it does not understand \NeedsTeXFormat, but the
+ style files will already have been extracted by that time.
+
+ Alternatively, run tex or latex on xint.ins if available.
+
+ To get xint.pdf run pdflatex thrice on xint.dtx
+
+ xint.sty, xintgcd.sty -> TDS:tex/generic/xint/
+ xint.dtx -> TDS:source/generic/xint/
+ xint.pdf -> TDS:doc/generic/xint/
+
+ It may well be necessary to then refresh the TeX installation
+ filename database.
+\end{verbatim}
+
+
+\section{Commands of the \xintname package}
+
+\def\n{\string{N\string}}
+\def\m{\string{M\string}}
+\def\x{\string{x\string}}
+
+\n{} stands for a normalised number within braces as described in
+the documentation, or for a control sequence expanding in at most
+two steps to such a number (without the braces!), or for a control
+sequence within braces expanding in at most two steps to such a
+number, of for material within braces which expands in two
+expansion of the first token to such a number.
+
+\subsection{\chb{xintRev}}
+
+\csa{xintRev\n} will revert the order of the digits of the number,
+keeping the optional sign. Leading zeros
+resulting from the operation are not removed (see the
+\csa{xintNum} macro for this).
+\centeredline{|\xintRev{-123000}|\texttt{=\xintRev{-123000}}}
+\centeredline{|\xintNum{\xintRev{-123000}}|\texttt{=\xintNum{\xintRev{-123000}}}}
+
+\subsection{\chb{xintReverseOrder}}
+
+\csa{xintReverseOrder}\marg{token\_list} does not do any
+expansion of its argument and just reverses the order of the
+tokens. Brace pairs encountered are removed once and the enclosed
+material does not get reverted.
+
+\subsection{\chb{xintNum}}
+
+\csa{xintNum\n} removes chains of plus or minus signs, followed by
+zeros.
+\centeredline{|\xintNum{+---++----+--000000000367941789479}|\texttt
+{=\xintNum{+---++----+--000000000367941789479}}}
+
+\subsection{\chb{xintLen}}
+
+\csa{xintLen\n} returns the length of the number, not counting the
+sign.
+\centeredline{|\xintLen{-12345678901234567890123456789}|\texttt
+{=\xintLen{-12345678901234567890123456789}}}
+
+\subsection{\chb{xintLength}}
+
+\csa{xintLength}\marg{token\_list} does not do any expansion of
+its argument and just counts how many tokens there are. Things
+enclosed in braces count as one, and there should be no such
+brace group within the final eight slots.
+
+\subsection{\chb{xintAssign}}
+
+\csa{xintAssign}\meta{braced things}\csa{to}%
+\meta{as many cs as they are things} defines (without checking if
+something gets overwritten) the control sequences on the right of
+\csa{to} to be the complete expansions of the successive things on
+the left of \csa{to} enclosed within braces.
+
+Important: a double expansion is applied first to the material
+extending up to \csa{to}.
+
+\xintAssign\xintPow {7}{13}\to\SevenToThePowerThirteen
+\xintAssign\xintDivision{1000000000000}{133333333}\to\Q\R
+
+As a special exception, if after this initial double expansion a
+brace does not immediately follows \csa{xintAssign}, it is assumed
+that there is only one control sequence to define and it is then
+defined to be the complete expansion of the material between
+\csa{xintAssign} and \csa{to}.
+\centeredline{|\xintAssign\xintDivision{1000000000000}{133333333}\to\Q\R|}
+\centeredline{|\meaning\Q: |\texttt{\meaning\Q}, |\meaning\R:
+ |\texttt{\meaning\R}} \centeredline{|\xintAssign\xintPow
+ {7}{13}\to\SevenToThePowerThirteen|}
+\centeredline{|\SevenToThePowerThirteen=|\texttt{\SevenToThePowerThirteen}}
+
+Of course this macro and its cousins completely break usage in
+pure expansion contexts, as assignments are made via the
+\csa{edef} primitive.
+
+\subsection{\chb{xintAssignArray}}
+
+\xintAssignArray\xintBezout {1000}{113}\to\Bez
+
+\csa{xintAssign}\meta{braced things}\csa{to}\csa{myArray} first
+double expands the first token then defines \csa{myArray} to be a
+macro with one parameter, such that \csa{myArray\n} expands in two
+steps (which include the twice-expansion of \texttt{\n}) to give
+the |N|th braced thing, itself completely expanded.
+\csa{myArray}|{0}| returns the number |M| of elements of the array
+so that the successive elements are \csa{myArray}|{1}|, \dots,
+\csa{myArray}|{M}|. \centeredline{|\xintAssignArray\xintBezout
+ {1000}{113}\to\Bez|} will set |\Bez{0}| to \texttt{\Bez0},
+|\Bez{1}| to \texttt{\Bez1}, |\Bez{2}| to \texttt{\Bez2},
+|\Bez{3}| to \texttt{\Bez3}, |\Bez{4}| to \texttt{\Bez4}, and
+|\Bez{5}| to \texttt{\Bez5}:
+(\Bez3)${}\times{}$\Bez1${}-{}$(\Bez4)${}\times{}$\Bez2${}={}$\Bez5.
+
+\subsection{\chb{xintRelaxArray}}
+
+\csa{xintRelaxArray}\csa{myArray} sets to \csa{relax} all
+macros which were defined by the previous \csa{xintAssignArray}
+with \csa{myArray} as array name.
+
+\subsection{\chb{xintDigitsOf}}
+
+This is a synonym for \csa{xintAssignArray}, to be used to define
+an array giving all the digits of a given number.
+
+\subsection{\chb{xintSgn}}
+
+\csa{xintSgn\n} returns 1 if the number is positive, 0 if it is
+zero and -1 if it is negative.
+
+\subsection{\chb{xintOpp}}
+
+\csa{xintOpp\n} returns the opposite |-N| of the number |N|.
+
+\subsection{\chb{xintAbs}}
+
+\csa{xintAbs\n} returns the absolute value of the number.
+
+\subsection{\chb{xintAdd}}
+
+\csa{xintAdd\n\m} returns the sum of the two numbers.
+
+\subsection{\chb{xintSub}}
+
+\csa{xintSub\n\m} returns the difference |N-M|.
+
+\subsection{\chb{xintCmp}}
+
+\csa{xintCmp\n\m} returns 1 if |N>M|, 0 if |N=M|, and -1 if |N<M|.
+
+\subsection{\chb{xintGeq}}
+
+\csa{xintGeq\n\m} returns 1 if the absolute value of the first
+number is at least equal to the absolute value of the second
+number. If \verb+|N|<|M|+ it returns 0.
+
+\subsection{\chb{xintMax}}
+
+\csa{xintMax\n\m} returns the largest of the two in the sense of the order
+structure on the relative integers (\emph{i.e.} the right-most
+number if they are put on a line with positive numbers on the right).
+
+\subsection{\chb{xintMin}}
+
+\csa{xintMin\n\m} returns the smallest of the two in the sense of the order
+structure on the relative integers (\emph{i.e.} the left-most
+number if they are put on a line with positive numbers on the right).
+
+\subsection{\chb{xintSum}}
+
+\csa{xintSum}\marg{braced things} after expanding its argument
+twice expects to find a sequence of tokens (or braced material).
+Each is twice-expanded, and the sum of all these numbers is
+returned.
+\centeredline{%
+ \csa{xintSum}|{{123}{-98763450}{\xintFac{7}}{\xintMul{3347}{591}}}=|\texttt{%
+ \xintSum{{123}{-98763450}{\xintFac{7}}{\xintMul{3347}{591}}}}}
+\centeredline{\csa{xintSum}|{1234567890}=|\texttt{%
+ \xintSum{1234567890}}}
+
+\subsection{\chb{xintSumExpr}}
+
+\csa{xintSum}\meta{braced things}\csa{relax} is to what
+\csa{xintSum} reduces after its initial double expansion of its
+argument. \centeredline{%
+ \csa{xintSumExpr}| {123}{-98763450}|%
+ |{\xintFac{7}}{\xintMul{3347}{591}}\relax=|\texttt{%
+ \xintSumExpr {123}{-98763450}{\xintFac{7}}{\xintMul{3347}{591}}\relax}}
+
+\subsection{\chb{xintMul}}
+
+\csa{xintMul\n\m} returns the product of the two numbers.
+
+\subsection{\chb{xintSqr}}
+
+\csa{xintSqr\n} returns the square.
+
+\subsection{\chb{xintPrd}}
+
+\csa{xintPrd}\marg{braced things} after expanding its argument
+twice expects to find a sequence of tokens (or braced material).
+Each is twice-expanded, and the product of all these numbers is
+returned.
+\centeredline{%
+ \csa{xintPrd}|{{-9876}{\xintFac{7}}{\xintMul{3347}{591}}}=|%
+\texttt{%
+ \xintPrd{{-9876}{\xintFac{7}}{\xintMul{3347}{591}}}}}
+\centeredline{\csa{xintPrd}|{123456789123456789}=|\texttt{%
+ \xintPrd{123456789123456789}}}
+
+
+\subsection{\chb{xintProductExpr}}
+
+\csa{xintProductExpr}\meta{braced things}\csa{relax} is to what
+\csa{xintPrd} reduces after its initial double expansion of its
+argument.
+\centeredline{\csa{xintProductExpr}| 123456789123456789\relax=|\texttt{%
+ \xintProductExpr 123456789123456789\relax}}
+
+\subsection{\chb{xintFac}}
+
+\csa{xintFac\n} returns the factorial. It is an error if the
+argument is negative or at least &10^9&. It is not recommended to
+launch the computation of things such as &100000!&, if you need
+your computer for other tasks.
+
+\subsection{\chb{xintPow}}
+
+\csa{xintPow\n\m} returns |N^M|. When |M| is zero, this is 1. Some
+cases (|N| zero and |M| negative, \verb+|N|>1+ and |M| negative,
+\verb+|N|>1+ and |M| at least &10^9&) make \xintname throw errors.
+
+\subsection{\chb{xintDivision}}
+
+\csa{xintDivision\n\m} returns |{quotient Q}{remainder R}|. This
+is euclidean division: |N = QM + R|, |0|${}\leq{}$\verb+R < |M|+. So the
+remainder is always non-negative and the formula |N = QM + R|
+always holds independently of the signs of |N| or |M|. Division by
+zero is of course an error (even if |N| vanishes) and returns |{0}{0}|.
+
+\subsection{\chb{xintQuo}}
+
+\csa{xintQuo\n\m} returns the quotient from the euclidean division.
+
+\subsection{\chb{xintRem}}
+
+\csa{xintRem\n\m} returns the remainder from the euclidean division.
+
+
+\subsection{\chb{xintFDg}}
+
+\csa{xintFDg\n} returns the first digit (most significant) of the
+decimal expansion.
+
+\subsection{\chb{xintLDg}}
+
+\csa{xintLDg\n} returns the least significant digit. When the
+number is positive, this is the same as the remainder in the
+euclidean division by ten.
+
+\subsection{\chb{xintOdd}}
+
+\csa{xintOdd\n} is 1 if the number is odd and 0 otherwise.
+
+\subsection{\chb{xintDSL}}
+
+\csa{xintDSL\n} is decimal shift left, \emph{i.e.} multiplication
+by ten.
+
+\subsection{\chb{xintDSR}}
+
+\csa{xintDSR\n} is decimal shift right, \emph{i.e.} it removes the
+last digit (keeping the sign). For a positive number, this is the
+same as the quotient from the
+euclidean division by ten.
+
+\subsection{\chb{xintDSH}}
+
+\csa{xintDSH\x\n} is parametrized decimal shift. When |x| is
+negative, it is like iterating \csa{xintDSL} \verb+|x|+ times
+(\emph{i.e.} multiplication by &10^{-&|x|&}&). When |x| is
+positive, it is like iterating \csa{DSR} |x| times. When |x|
+exceeds the length of the number, the result is zero.
+
+\subsection{\chb{xintDecSplit}}
+
+
+\csa{xintDecSplit\x\n} cuts the number into two pieces (each
+within a pair of enclosing braces). First the
+sign if present is \emph{removed}. Then, when |x|
+is positive or vanishes, this is like the
+euclidean division by &10^{&|x|&}&. When |x| is negative the
+number is split into a first piece with the \verb+|x|+ most
+significant digits and a second piece with the remaining digits.
+Leading zeros in this second piece are not removed. In the case
+where the absolute value of |x| is at least the length of the
+number, the second piece is empty (not zero!). So the absolute
+value of the original number is always the concatenation of the
+first and second piece, in this case with a negative |x|.
+\xintAssign\xintDecSplit {0}{-123004321}\to\L\R
+\centeredline{|\xintAssign\xintDecSplit {0}{-123004321}\to\L\R|}
+|\meaning\L: |\texttt{\meaning\L}, |\meaning\R: |\texttt{\meaning\R}
+\xintAssign\xintDecSplit {6}{-123004321}\to\L\R
+\centeredline{|\xintAssign\xintDecSplit {6}{-123004321}\to\L\R|}
+|\meaning\L: |\texttt{\meaning\L}, |\meaning\R: |\texttt{\meaning\R}
+\xintAssign\xintDecSplit {-5}{-12300004321}\to\L\R
+\centeredline{|\xintAssign\xintDecSplit {-5}{-12300004321}\to\L\R|}
+|\meaning\L: |\texttt{\meaning\L}, |\meaning\R: |\texttt{\meaning\R}
+\xintAssign\xintDecSplit {-11}{-12300004321}\to\L\R
+\centeredline{|\xintAssign\xintDecSplit {-11}{-12300004321}\to\L\R|}
+|\meaning\L: |\texttt{\meaning\L}, |\meaning\R: |\texttt{\meaning\R}
+
+\subsection{\chb{xintDecSplitL}}
+
+\csa{xintDecSplitL\x\n} returns the first piece after the action
+of \csa{xintDecSplit}.
+
+\subsection{\chb{xintDecSplitR}}
+
+\csa{xintDecSplitR\x\n} returns the second piece after the action
+of \csa{xintDecSplit}.
+
+
+\section{Commands of the \xintgcdname package}
+
+
+\subsection{\chb{xintGCD}}
+
+\csa{xintGCD\n\m} computes the greatest common divisor. It is
+positive, except when both |N| and |M| vanish, for which the macro
+returns zero.
+\centeredline{\csa{xintGCD}|{10000}{1113}=|\texttt{\xintGCD{10000}{1113}}}
+
+\subsection{\chb{xintBezout}}
+
+\xintAssign{{\xintBezout {10000}{1113}}}\to\X
+\xintAssign {\xintBezout {10000}{1113}}\to\A\B\U\V\D
+
+\csa{xintBezout\n\m} returns five numbers |A|, |B|, |U|, |V|, |D| within
+braces. |A| is the first (twice-expanded) input number, |B| the
+second, |D| is the GCD, and \texttt{UA - VB = D}.
+\centeredline{|\xintAssign {{\xintBezout {10000}{1113}}}\to\X|}
+\centeredline{|\meaning\X: |\texttt{\meaning\X }.}
+\centeredline{|\xintAssign {\xintBezout {10000}{1113}}\to\A\B\U\V\D|}
+|\meaning\A: |\texttt{\meaning\A },
+|\meaning\B: |\texttt{\meaning\B },
+|\meaning\U: |\texttt{\meaning\U },
+|\meaning\V: |\texttt{\meaning\V },
+|\meaning\D: |\texttt{\meaning\D }.
+
+\subsection{\chb{xintEuclideAlgorithm}}
+
+\xintAssign {{\xintEuclideAlgorithm {10000}{1113}}}\to\X
+
+\def\restorebracecatcodes
+ {\catcode`\{=1 \catcode`\}=2 }
+
+\def\allowlistsplit
+ {\catcode`\{=12 \catcode`\}=12 \allowlistsplita }
+
+\def\allowlistsplitx {\futurelet\listnext\allowlistsplitxx }
+
+\def\allowlistsplitxx {\ifx\listnext\relax \restorebracecatcodes
+ \else \expandafter\allowlistsplitxxx \fi }
+\begingroup
+\catcode`\[=1
+\catcode`\]=2
+\catcode`\{=12
+\catcode`\}=12
+\gdef\allowlistsplita #1{[#1\allowlistsplitx {]
+\gdef\allowlistsplitxxx {#1}%
+ [{#1}\hskip 0pt plus 1pt \allowlistsplitx ]
+\endgroup
+
+\csa{xintEuclideAlgorithm\n\m} applies the Euclide algorithm and
+keeps a copy of all quotients and remainders.
+\centeredline{|\xintAssign {{\xintEuclideAlgorithm {10000}{1113}}}\to\X|}
+
+|\meaning\X: |\texttt{\expandafter\allowlistsplit\meaning\X
+ \relax }.
+The first token is the number of steps, the second is |N|, the
+third is the GCD, the fourth is |M| then the first quotient and
+remainder, the second quotient and remainder, \dots until the
+final quotient and last (zero) remainder.
+
+\subsection{\chb{xintBezoutAlgorithm}}
+
+\catcode`\& 4
+
+\xintAssign {{\xintBezoutAlgorithm {10000}{1113}}}\to\X
+
+\csa{xintBezoutAlgorithm\n\m} applies the Euclide algorithm and
+keeps a copy of all quotients and remainders. Furthermore it
+computes the entries of the successive products of the 2 by 2 matrices
+$\left(\vcenter{\halign {\,#&\,#\cr q & 1 \cr 1 & 0 \cr}}\right)$
+formed from the quotients arising in the algorithm.
+\centeredline{|\xintAssign {{\xintEuclideAlgorithm {10000}{1113}}}\to\X|}
+
+|\meaning\X: |\texttt{\expandafter\allowlistsplit\meaning\X \relax}.
+
+The first token is the number of steps, the second is |N|, then
+|0|, |1|, the GCD, |M|, |1|, |0|, the first quotient, the first
+remainder, the top left entry of the first matrix, the bottom left
+entry, and then these four things at each step until the end.
+
+\subsection{\chb{xintTypesetEuclideAlgorithm}}
+
+This macro is just an example of how to organize the data returned
+by \csa{xintEuclideAlgorithm}. See the source code and modify it
+to what is needed.
+\centeredline{|\xintTypesetEuclideAlgorithm {10000}{1113}|}
+\xintTypesetEuclideAlgorithm {10000}{1113}
+
+
+\subsection{\chb{xintTypesetBezoutAlgorithm}}
+
+This macro is just an example of how to organize the data returned
+by \csa{xintBezoutAlgorithm}. See the source code and modify it
+to what is needed.
+\centeredline{|\xintTypesetBezoutAlgorithm {10000}{1113}|}
+\xintTypesetBezoutAlgorithm {10000}{1113}
+
+
+
+
+\makeatletter
+\let\check@percent\original@check@percent
+\StopEventually{\check@checksum\end{document}\endinput}
+\makeatother
+
+\def\MacroFont{\ttfamily\small\baselineskip12pt\relax}
+
+\MakePercentIgnore
+%
+% \catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11
+% \let</none>\relax
+% \def<*package>{\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12}
+%
+%</none>
+%<*package>
+% \section {Package \xintname implementation}
+%
+% The commenting of the macros is currently (\docdate) very
+% sparse. Some comments may be left-overs from previous versions
+% of the macro, with parameters in another order for example.
+%
+% \subsection{Catcodes, \eTeX{} detection, reload detection}
+%
+% The method for package identification and reload detection is
+% copied verbatim from the packages by \textsc{Heiko Oberdiek}.
+%
+% The method for catcodes was also inspired by these packages, we
+% proceed slightly differently.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \expandafter\let\expandafter\x\csname ver@xint.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xint}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \else
+ \y{xint}{I was already loaded, aborting input}%
+ \aftergroup\endinput
+ \fi
+ \fi
+ \fi
+ \def\ChangeCatcodesIfInputNotAborted
+ {%
+ \endgroup
+ \edef\XINT@restorecatcodes@endinput
+ {%
+ \catcode47=\the\catcode47 % /
+ \catcode41=\the\catcode41 % )
+ \catcode40=\the\catcode40 % (
+ \catcode42=\the\catcode42 % *
+ \catcode43=\the\catcode43 % +
+ \catcode62=\the\catcode62 % >
+ \catcode60=\the\catcode60 % <
+ \catcode58=\the\catcode58 % :
+ \catcode46=\the\catcode46 % .
+ \catcode45=\the\catcode45 % -
+ \catcode44=\the\catcode44 % ,
+ \catcode35=\the\catcode35 % #
+ \catcode64=\the\catcode64 % @
+ \catcode125=\the\catcode125 % }
+ \catcode123=\the\catcode123 % {
+ \endlinechar=\the\endlinechar
+ \catcode13=\the\catcode13 % ^^M
+ \catcode32=\the\catcode32 %
+ \catcode61=\the\catcode61 % =
+ \noexpand\endinput
+ }%
+ \def\XINT@setcatcodes
+ {%
+ \catcode61=12 % =
+ \catcode32=10 % space
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=11 % : (made letter for error cs)
+ \catcode60=12 % <
+ \catcode62=12 % >
+ \catcode43=12 % +
+ \catcode42=12 % *
+ \catcode40=12 % (
+ \catcode41=12 % )
+ \catcode47=12 % /
+ }%
+ \XINT@setcatcodes
+ }%
+\ChangeCatcodesIfInputNotAborted
+% \end{macrocode}
+% \subsection{Package identification}
+%
+% Copied verbatim from \textsc{Heiko Oberdiek}'s packages.
+%
+% \begin{macrocode}
+\begingroup
+ \catcode91=12 % [
+ \catcode93=12 % ]
+ \catcode58=12 % : (does not really matter, was letter)
+ \expandafter\ifx\csname ProvidesPackage\endcsname\relax
+ \def\x#1#2#3[#4]{\endgroup
+ \immediate\write-1{Package: #3 #4}%
+ \xdef#1{#4}%
+ }%
+ \else
+ \def\x#1#2[#3]{\endgroup
+ #2[{#3}]%
+ \ifx#1\@undefined
+ \xdef#1{#3}%
+ \fi
+ \ifx#1\relax
+ \xdef#1{#3}%
+ \fi
+ }%
+ \fi
+\expandafter\x\csname ver@xint.sty\endcsname
+\ProvidesPackage{xint}%
+ [2013/03/28 v1.0 Expandable operations on long numbers (jfB)]%
+% \end{macrocode}
+% \subsection{Token management macros}
+% \begin{macrocode}
+\def\xint@gobble #1{}%
+\def\xint@gobble@one #1{}%
+\def\xint@gobble@two #1#2{}%
+\def\xint@gobble@three #1#2#3{}%
+\def\xint@gobble@four #1#2#3#4{}%
+\def\xint@gobble@five #1#2#3#4#5{}%
+\def\xint@gobble@six #1#2#3#4#5#6{}%
+\def\xint@gobble@seven #1#2#3#4#5#6#7{}%
+\def\xint@gobble@eight #1#2#3#4#5#6#7#8{}%
+\def\xint@secondoftwo #1#2{#2}%
+\def\xint@firstoftwo@andstop #1#2{ #1}%
+\def\xint@secondoftwo@andstop #1#2{ #2}%
+\def\xint@exchangetwo@keepbraces #1#2{{#2}{#1}}%
+\def\xint@exchangetwo@keepbraces@andstop #1#2{ {#2}{#1}}%
+\def\xint@xpxp@andstop {\expandafter\expandafter\expandafter\space }%
+\def\xint@r #1\R {}%
+\def\xint@w #1\W {}%
+\def\xint@z #1\Z {}%
+\def\xint@zero #10{}%
+\def\xint@one #11{}%
+\def\xint@minus #1-{}%
+\def\xint@relax #1\relax {}%
+\def\xint@quatrezeros #10000{}%
+\def\xint@bracedundef {\xint@undef }%
+\def\xint@UDzerofork #10\dummy #2#3\xint@UDforkzero {#2}%
+\def\xint@UDzerosfork #100\dummy #2#3\xint@UDforkzeros {#2}%
+\def\xint@UDsignfork #1-\dummy #2#3\xint@UDforksign {#2}%
+\def\xint@UDsignsfork #1--\dummy #2#3\xint@UDforksigns {#2}%
+\def\xint@UDzerominusfork #10-\dummy #2#3\xint@UDforkminuszero {#2}%
+\def\xint@afterfi #1#2\fi {\fi #1}%
+% \end{macrocode}
+% \subsection{\ch{xintRev}, \ch{xintReverseOrder}}
+% \begin{verbatim}
+% \xintRev: fait la double expansion, vérifie le signe
+% \xintReverseOrder: ne fait PAS la double expansion, ne regarde
+% PAS le signe.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintRev {\romannumeral0\xintrev }%
+\def\xintrev #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@rev
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@rev #1%
+{%
+ \XINT@rev@fork #1\Z
+}%
+\def\XINT@rev@fork #1#2%
+{%
+ \xint@UDsignfork
+ #1\dummy \XINT@rev@negative
+ -\dummy \XINT@rev@nonnegative
+ \xint@UDforksign
+ #1#2%
+}%
+\def\XINT@rev@negative #1#2\Z
+{%
+ \expandafter
+ \space
+ \expandafter
+ -%
+ \romannumeral0\XINT@rev {#2}%
+}%
+\def\XINT@rev@nonnegative #1\Z
+{%
+ \XINT@rev {#1}%
+}%
+\def\XINT@Rev {\romannumeral0\XINT@rev }%
+\let\xintReverseOrder \XINT@Rev
+\def\XINT@rev #1%
+{%
+ \XINT@rord@main {}#1%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+\def\XINT@rord@main #1#2#3#4#5#6#7#8#9%
+{%
+ \XINT@strip@undef #9\XINT@rord@cleanup\xint@undef
+ \XINT@rord@main {#9#8#7#6#5#4#3#2#1}%
+}%
+\def\XINT@rord@cleanup\xint@undef\XINT@rord@main #1#2\xint@UNDEF
+{%
+ \expandafter\space\XINT@strip@UNDEF #1%
+}%
+\def\XINT@strip@undef #1\xint@undef {}%
+\def\XINT@strip@UNDEF #1\xint@UNDEF {}%
+% \end{macrocode}
+% \subsection{\ch{XINT@RQ}}
+% \begin{verbatim}
+% cette macro renverse et ajoute le nombre minimal de zéros à
+% la fin pour que la longueur soit alors multiple de 4
+% \romannumeral0\XINT@RQ {}<le truc à renverser>\R\R\R\R\R\R\R\R\Z
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@RQ #1#2#3#4#5#6#7#8#9%
+{%
+ \xint@r #9\XINT@RQ@end\R
+ \XINT@RQ {#9#8#7#6#5#4#3#2#1}%
+}%
+\def\XINT@RQ@end\R\XINT@RQ #1#2\Z
+{%
+ \XINT@RQ@end@ #1\Z
+}%
+\def\XINT@RQ@end@ #1#2#3#4#5#6#7#8%
+{%
+ \xint@r #8\XINT@RQ@end@viii
+ #7\XINT@RQ@end@vii
+ #6\XINT@RQ@end@vi
+ #5\XINT@RQ@end@v
+ #4\XINT@RQ@end@iv
+ #3\XINT@RQ@end@iii
+ #2\XINT@RQ@end@ii
+ \R\XINT@RQ@end@i
+ \Z #2#3#4#5#6#7#8%
+}%
+\def\XINT@RQ@end@viii #1\Z #2#3#4#5#6#7#8#9\Z { #9}%
+\def\XINT@RQ@end@vii #1\Z #2#3#4#5#6#7#8#9\Z { #8#9000}%
+\def\XINT@RQ@end@vi #1\Z #2#3#4#5#6#7#8#9\Z { #7#8#900}%
+\def\XINT@RQ@end@v #1\Z #2#3#4#5#6#7#8#9\Z { #6#7#8#90}%
+\def\XINT@RQ@end@iv #1\Z #2#3#4#5#6#7#8#9\Z { #5#6#7#8#9}%
+\def\XINT@RQ@end@iii #1\Z #2#3#4#5#6#7#8#9\Z { #4#5#6#7#8#9000}%
+\def\XINT@RQ@end@ii #1\Z #2#3#4#5#6#7#8#9\Z { #3#4#5#6#7#8#900}%
+\def\XINT@RQ@end@i \Z #1#2#3#4#5#6#7#8\Z { #1#2#3#4#5#6#7#80}%
+% \end{macrocode}
+% \subsection{\ch{XINT@cuz}}
+% \begin{macrocode}
+\def\xint@cleanupzeros@andstop #1#2#3#4%
+{\expandafter
+ \space
+ \the\numexpr #1#2#3#4\relax
+}%
+\def\xint@cleanupzeros@nospace #1#2#3#4%
+{%
+ \the\numexpr #1#2#3#4\relax
+}%
+\def\XINT@Rev@andcleanupzeros #1%
+{%
+ \romannumeral0\expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0\XINT@rord@main {}#1%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% routine CleanUpZeros. Utilisée en particulier par la
+% soustraction.
+% INPUT: longueur **multiple de 4** (<-- ATTENTION)
+% OUTPUT: on a retiré tous les leading zéros, on n'est **plus*
+% nécessairement de longueur 4n
+% Délimiteur pour @main: \W\W\W\W\W\W\W\Z avec SEPT \W
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@cuz #1%
+{%
+ \XINT@cuz@loop #1\W\W\W\W\W\W\W\Z%
+}%
+\def\XINT@cuz@loop #1#2#3#4#5#6#7#8%
+{%
+ \xint@w #8\xint@cuz@enda\W
+ \xint@z #8\xint@cuz@endb\Z
+ \XINT@cuz@checka {#1#2#3#4#5#6#7#8}%
+}%
+\def\xint@cuz@enda #1\XINT@cuz@checka #2%
+{%
+ \xint@cuz@endaa #2%
+}%
+\def\xint@cuz@endaa #1#2#3#4#5\Z
+{%
+ \expandafter\space\the\numexpr #1#2#3#4\relax
+}%
+\def\xint@cuz@endb\Z\XINT@cuz@checka #1{ 0}%
+\def\XINT@cuz@checka #1%
+{%
+ \expandafter \XINT@cuz@checkb \the\numexpr #1\relax
+}%
+\def\XINT@cuz@checkb #1%
+{%
+ \xint@zero #1\xint@cuz@backtoloop 0\XINT@cuz@Stop #1%
+}%
+\def\XINT@cuz@Stop #1\W #2\Z{ #1}%
+\def\xint@cuz@backtoloop 0\XINT@cuz@Stop 0{\XINT@cuz@loop }%
+% \end{macrocode}
+% \subsection{\ch{xintNum}}
+% \begin{verbatim}
+% For example \xintNum {----+-+++---+----000000000000003}
+% \end{verbatim}
+% \begin{macrocode}
+\def\xintNum {\romannumeral0\xintnum }%
+\def\xintnum #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@num
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\XINT@Num {\romannumeral0\XINT@num }%
+\def\XINT@num #1{\XINT@num@loop #1\R\R\R\R\R\R\R\R\Z }%
+\def\XINT@num@loop #1#2#3#4#5#6#7#8%
+{%
+ \xint@r #8\XINT@num@end\R\XINT@num@NumEight #1#2#3#4#5#6#7#8%
+}%
+\def\XINT@num@end\R\XINT@num@NumEight #1\R #2\Z
+{%
+ \expandafter\space\the\numexpr #1+0\relax
+}%
+\def\XINT@num@NumEight #1#2#3#4#5#6#7#8%
+{%
+ \ifnum \numexpr #1#2#3#4#5#6#7#8+0\relax = 0
+ \xint@afterfi {\expandafter\XINT@num@keepsign@a
+ \the\numexpr #1#2#3#4#5#6#7#81\relax}%
+ \else
+ \xint@afterfi {\expandafter\XINT@num@finish
+ \the\numexpr #1#2#3#4#5#6#7#8\relax}%
+ \fi
+}%
+\def\XINT@num@keepsign@a #1%
+{%
+ \xint@one#1\XINT@num@gobacktoloop 1\XINT@num@keepsign@b
+}%
+\def\XINT@num@gobacktoloop 1\XINT@num@keepsign@b {\XINT@num@loop }%
+\def\XINT@num@keepsign@b #1{\XINT@num@loop -}%
+\def\XINT@num@finish #1\R #2\Z { #1}%
+% \end{macrocode}
+% \subsection{\ch{xintLen}, \ch{xintLength}}
+% \begin{verbatim}
+% \xintLen -> fait la double expansion, ne compte PAS le signe
+% \xintLength -> ne fait PAS la double expansion, compte le signe
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintLen {\romannumeral0\xintlen }%
+\def\xintlen #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@length@fork #1\R\R\R\R\R\R\R\R\Z
+}%
+\def\XINT@Len #1{\romannumeral0\XINT@length@fork #1\R\R\R\R\R\R\R\R\Z }%
+\def\XINT@length@fork #1%
+{%
+ \expandafter\XINT@length@loop
+ \xint@UDsignfork
+ #1\dummy {{0}}%
+ -\dummy {{0}#1}%
+ \xint@UDforksign
+}%
+\def\XINT@Length #1{\romannumeral0\XINT@length@loop {0}#1\R\R\R\R\R\R\R\R\Z }%
+\def\XINT@length #1{\XINT@length@loop {0}#1\R\R\R\R\R\R\R\R\Z }%
+\let\xintLength\XINT@Length
+\def\XINT@length@loop #1#2#3#4#5#6#7#8#9%
+{%
+ \xint@r #9\XINT@length@end {#2#3#4#5#6#7#8#9}\R
+ \expandafter\XINT@length@loop\expandafter {\the\numexpr #1+8\relax}%
+}%
+\def\XINT@length@end #1\R\expandafter\XINT@length@loop\expandafter #2#3\Z
+{%
+ \XINT@length@end@ #1\W\W\W\W\W\W\W\W\Z {#2}%
+}%
+\def\XINT@length@end@ #1\R #2#3#4#5#6#7#8#9\Z
+{%
+ \xint@w #2\XINT@length@end@i
+ #3\XINT@length@end@ii
+ #4\XINT@length@end@iii
+ #5\XINT@length@end@iv
+ #6\XINT@length@end@v
+ #7\XINT@length@end@vi
+ #8\XINT@length@end@vii
+ \W\XINT@length@end@viii
+}%
+\def\XINT@length@end@viii #1%
+ {\expandafter\space\the\numexpr #1-8\relax}%
+\def\XINT@length@end@vii #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-7\relax}%
+\def\XINT@length@end@vi #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-6\relax}%
+\def\XINT@length@end@v #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-5\relax}%
+\def\XINT@length@end@iv #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-4\relax}%
+\def\XINT@length@end@iii #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-3\relax}%
+\def\XINT@length@end@ii #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-2\relax}%
+\def\XINT@length@end@i #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-1\relax}%
+% \end{macrocode}
+% \subsection{\ch{xintAssign}, \ch{xintAssignArray}, \ch{xintDigitsOf}}
+% \begin{verbatim}
+% \xintAssign {a}{b}..{z}\to\A\B...\Z,
+% \xintAssignArray {a}{b}..{z}\to\U
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintAssign #1\to
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@assign@a #1{}\to
+}%
+\def\XINT@assign@a #1% attention to the # at the beginning of next line
+#{%
+ \def\xint@temp {#1}%
+ \ifx\empty\xint@temp
+ \expandafter\XINT@assign@b
+ \else
+ \expandafter\XINT@assign@B
+ \fi
+}%
+\def\XINT@assign@b #1#2\to #3%
+{%
+ \edef #3{#1}\def\xint@temp {#2}%
+ \ifx\empty\xint@temp
+ \else
+ \xint@afterfi{\XINT@assign@a #2\to }%
+ \fi
+}%
+\def\XINT@assign@B #1\to #2%
+{%
+ \edef #2{\xint@temp}%
+}%
+\def\xintRelaxArray #1%
+{%
+ \edef\xint@arrayname {\expandafter\xint@gobble\string #1}%
+ \expandafter\let\expandafter\xint@temp
+ \csname\xint@arrayname 0\endcsname
+ \count 255 0
+ \loop
+ \global\expandafter\let
+ \csname\xint@arrayname\the\count255\endcsname\relax
+ \ifnum \count 255 < \xint@temp
+ \advance\count 255 1
+ \repeat
+ \global\expandafter\let\csname\xint@arrayname 00\endcsname\relax
+ \global\let #1\relax
+}%
+\def\xintAssignArray #1\to #2%
+{%
+ \edef\xint@arrayname {\expandafter\xint@gobble\string #2}%
+ \count 255 0
+ \expandafter\expandafter\expandafter
+ \XINT@assignarray@loop #1\xint@undef
+ \csname\xint@arrayname 00\endcsname
+ \csname\xint@arrayname 0\endcsname
+ {\xint@arrayname}%
+ #2%
+}%
+\def\XINT@assignarray@loop #1%
+{%
+ \def\xint@temp {#1}%
+ \ifx\xint@bracedundef\xint@temp
+ \edef\xint@temp{\the\count 255 }%
+ \expandafter\let\csname\xint@arrayname0\endcsname\xint@temp
+ \expandafter\XINT@assignarray@end
+ \else
+ \advance\count 255 1
+ \expandafter\edef
+ \csname\xint@arrayname\the\count 255\endcsname{\xint@temp}%
+ \expandafter\XINT@assignarray@loop
+ \fi
+}%
+\def\XINT@assignarray@end {\expandafter\XINT@assignarray@@end }%
+\def\XINT@assignarray@@end #1%
+{%
+ \expandafter\XINT@assignarray@@@end\expandafter #1%
+}%
+\def\XINT@assignarray@@@end #1#2#3%
+{%
+ \expandafter\XINT@assignarray@@@@end
+ \expandafter #1\expandafter #2\expandafter{#3}%
+}%
+\def\XINT@assignarray@@@@end #1#2#3#4%
+{%
+ \def #4##1%
+ {\romannumeral0%
+ \expandafter\expandafter\expandafter
+ #1%
+ \expandafter\expandafter\expandafter
+ {##1}%
+ }%
+ \def #1##1%
+ {%
+ \ifnum ##1< 0
+ \xint@afterfi {\xintError:ArrayIndexIsNegative
+ \expandafter\space 0}%
+ \else
+ \xint@afterfi {%
+ \ifnum ##1> #2
+ \xint@afterfi {\xintError:ArrayIndexBeyondLimit
+ \expandafter\space 0}%
+ \else
+ \xint@afterfi
+ {\expandafter\expandafter\expandafter
+ \space\csname #3##1\endcsname}%
+ \fi}%
+ \fi
+ }%
+}%
+\let\xintDigitsOf\xintAssignArray
+% \end{macrocode}
+% \subsection{\ch{xintSgn}}
+% \begin{macrocode}
+\def\xintSgn {\romannumeral0\xintsgn }%
+\def\xintsgn #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@sgn #1\Z%
+}%
+\def\XINT@Sgn #1{\romannumeral0\XINT@sgn #1\Z }%
+\def\XINT@sgn #1%
+{%
+ \xint@xpxp@andstop
+ \xint@UDzerominusfork
+ #1-\dummy {\expandafter0}% zero
+ 0#1\dummy {\expandafter-\expandafter1}% n\'egatif
+ 0-\dummy {\expandafter1}% positif
+ \xint@UDforkminuszero
+ \xint@z
+}%
+% \end{macrocode}
+% \subsection{\ch{xintOpp}}
+% \begin{macrocode}
+\def\xintOpp {\romannumeral0\xintopp }%
+\def\xintopp #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@opp #1%
+}%
+\def\XINT@Opp #1{\romannumeral0\XINT@opp #1}%
+\def\XINT@opp #1%
+{%
+ \expandafter\space
+ \xint@UDzerominusfork
+ #1-\dummy 0% zero
+ 0#1\dummy {}% negative
+ 0-\dummy {-#1}% positive
+ \xint@UDforkminuszero
+}%
+% \end{macrocode}
+% \subsection{\ch{xintAbs}}
+% \begin{macrocode}
+\def\xintAbs {\romannumeral0\xintabs }%
+\def\xintabs #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@abs #1%
+}%
+\def\XINT@Abs {\romannumeral0\XINT@abs }%
+\def\XINT@abs #1%
+{%
+ \xint@UDsignfork
+ #1\dummy \XINT@abs@isnegative
+ -\dummy \XINT@abs@isnonnegative
+ \xint@UDforksign
+ #1%
+}%
+\def\XINT@abs@isnegative #1{ }%
+\def\XINT@abs@isnonnegative #1{ #1}%
+% \end{macrocode}
+% \begin{verbatim}
+%-----------------------------------------------------------------
+%-----------------------------------------------------------------
+% ARITHMETIC OPERATIONS: ADDITION, SUBTRACTION, SUMS,
+% MULTIPLICATION, PRODUCTS, FACTORIAL, POWERS, EUCLIDEAN DIVISION.
+% \end{verbatim}
+% \vspace*{-2\baselineskip}
+% \subsection{\ch{xintAdd}}
+% \begin{macrocode}
+\def\xintAdd {\romannumeral0\xintadd }%
+\def\xintadd #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@add
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@add #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@add@fork #2\Z #1\Z
+}%
+\def\XINT@Add #1#2{\romannumeral0\XINT@add@fork #2\Z #1\Z }%
+\def\XINT@add #1#2{\XINT@add@fork #2\Z #1\Z }%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% ADDITION
+% Ici #1#2 vient du *deuxième* argument de \xintAdd
+% et #3#4 donc du *premier* [algo plus efficace lorsque
+% le premier est plus long que le second]
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@add@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@add@secondiszero
+ #3\dummy \XINT@add@firstiszero
+ 0\dummy
+ {\xint@UDsignsfork
+ #1#3\dummy \XINT@add@minusminus % #1 = #3 = -
+ #1-\dummy \XINT@add@minusplus % #1 = -
+ #3-\dummy \XINT@add@plusminus % #3 = -
+ --\dummy \XINT@add@plusplus
+ \xint@UDforksigns}%
+ \xint@UDforkzero
+ {#2}{#4}#1#3%
+}%
+\def\XINT@add@secondiszero #1#2#3#4{ #4#2}%
+\def\XINT@add@firstiszero #1#2#3#4{ #3#1}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 vient du *deuxième* et #2 vient du *premier*
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@add@minusminus #1#2#3#4%
+{%
+ \expandafter\space\expandafter-%
+ \romannumeral0\XINT@add@pre {#2}{#1}%
+}%
+\def\XINT@add@minusplus #1#2#3#4%
+{%
+ \XINT@sub@pre {#4#2}{#1}%
+}%
+\def\XINT@add@plusminus #1#2#3#4%
+{%
+ \XINT@sub@pre {#3#1}{#2}%
+}%
+\def\XINT@add@plusplus #1#2#3#4%
+{%
+ \XINT@add@pre {#4#2}{#3#1}%
+}%
+\def\XINT@add@pre #1%
+{%
+ \expandafter\XINT@add@@pre\expandafter{%
+ \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+ }%
+}%
+\def\XINT@add@@pre #1#2%
+{%
+ \expandafter\XINT@add@A
+ \expandafter0\expandafter{\expandafter}%
+ \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% ADDITION \XINT@add@A
+% INPUT:
+% \romannumeral0\XINT@add@A <N1>\W\X\Y\Z <N2>\W\X\Y\Z
+% avec: N1 et N2 sur **4n**, et **renversés**, et le plus long ne
+% doit pas se terminer par 0000. [Donc on peut avoir 0000 comme
+% input si l'autre est >0 et ne se termine pas en 0000 bien sûr].
+% OUTPUT:
+% La somme N1+N2, *PAS* sur 4n, dans l'ordre *normal*, et *sans
+% leading zeros*
+% La procédure est plus rapide lorsque la longueur de N2 est
+% supérieure à celle de N1
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@add@A #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@add@az
+ \W\XINT@add@AB #1{#3#4#5#6}{#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% 1er nombre fini.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xint@add@az\W\XINT@add@AB #1#2%
+{%
+ \XINT@add@AC@checkcarry #1%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% ici #2 est prévu pour l'addition, mais attention il devra être renversé pour
+% \numexpr. #3 = résultat partiel. #4 = chiffres qui restent
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@add@AB #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{%
+ \xint@w
+ #5\xint@add@bz
+ \W\XINT@add@ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z
+}%
+\def\XINT@add@ABE #1#2#3#4#5#6%
+{\expandafter
+ \XINT@add@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax.%
+}%
+\def\XINT@add@ABEA #1#2#3.#4%
+{%
+ \XINT@add@A #2{#3#4}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% ici le deuxième nombre est fini
+% #6 part à la poubelle, #2#3#4#5 est le #2 dans \XINT@add@AB
+% on ne vérifie pas la retenue cette fois, mais les fois suivantes
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xint@add@bz\W\XINT@add@ABE #1#2#3#4#5#6%
+{\expandafter
+ \XINT@add@CC\the\numexpr #1+10#5#4#3#2\relax.%
+}%
+\def\XINT@add@CC #1#2#3.#4%
+{%
+ \XINT@add@AC@checkcarry #2{#3#4}% on va examiner et \'eliminer #2
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% retenue plus chiffres qui restent de l'un des deux nombres.
+% #2 = résultat partiel
+% #3#4#5#6 = summand, avec plus significatif à droite
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@add@AC@checkcarry #1%
+{%
+ \xint@zero #1\xint@add@AC@nocarry 0\XINT@add@C
+}%
+\def\xint@add@AC@nocarry 0\XINT@add@C #1#2\W\X\Y\Z
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1%
+}%
+\def\XINT@add@C #1#2#3#4#5%
+{%
+ \xint@w
+ #2\xint@add@cz
+ \W\XINT@add@CD {#5#4#3#2}{#1}%
+}%
+\def\XINT@add@CD #1%
+{\expandafter
+ \XINT@add@CC\the\numexpr 1+10#1\relax.%
+}%
+\def\xint@add@cz\W\XINT@add@CD #1#2{ 1#2}%
+% \end{macrocode}
+% \subsection{\ch{xintSub}}
+% \begin{macrocode}
+\def\xintSub {\romannumeral0\xintsub }%
+\def\xintsub #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@sub
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@sub #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@sub@fork #2\Z #1\Z
+}%
+\def\XINT@Sub #1#2{\romannumeral0\XINT@sub@fork #2\Z #1\Z }%
+\def\XINT@sub #1#2{\XINT@sub@fork #2\Z #1\Z }%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% SOUSTRACTION
+% #3#4-#1#2
+% #3#4 vient du *premier*
+% #1#2 vient du *second*
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@sub@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDsignsfork
+ #1#3\dummy \XINT@sub@minusminus
+ #1-\dummy \XINT@sub@minusplus % attention, #3=0 possible
+ #3-\dummy \XINT@sub@plusminus % attention, #1=0 possible
+ --\dummy {\xint@UDzerofork
+ #1\dummy \XINT@sub@secondiszero
+ #3\dummy \XINT@sub@firstiszero
+ 0\dummy \XINT@sub@plusplus
+ \xint@UDforkzero}%
+ \xint@UDforksigns
+ {#2}{#4}#1#3%
+}%
+\def\XINT@sub@secondiszero #1#2#3#4{ #4#2}%
+\def\XINT@sub@firstiszero #1#2#3#4{ -#3#1}%
+\def\XINT@sub@plusplus #1#2#3#4%
+{%
+ \XINT@sub@pre {#4#2}{#3#1}%
+}%
+\def\XINT@sub@minusminus #1#2#3#4%
+{%
+ \XINT@sub@pre {#1}{#2}%
+}%
+\def\XINT@sub@minusplus #1#2#3#4%
+{%
+ \xint@zero #4\xint@sub@mp0\XINT@add@pre {#4#2}{#1}%
+}%
+\def\xint@sub@mp0\XINT@add@pre #1#2{ #2}%
+\def\XINT@sub@plusminus #1#2#3#4%
+{%
+ \xint@zero #3\xint@sub@pm0\expandafter\space\expandafter-%
+ \romannumeral0\XINT@add@pre {#2}{#3#1}%
+}%
+\def\xint@sub@pm #1\XINT@add@pre #2#3{ -#2}%
+\def\XINT@sub@pre #1%
+{%
+ \expandafter\XINT@sub@@pre\expandafter{%
+ \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+ }%
+}%
+\def\XINT@sub@@pre #1#2%
+{%
+ \expandafter\XINT@sub@A
+ \expandafter1\expandafter{\expandafter}%
+ \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1 \W\X\Y\Z
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% \romannumeral0\XINT@subA 1{}<N1>\W\X\Y\Z<N2>\W\X\Y\Z
+% N1 et N2 sont présentés à l'envers ET ON A RAJOUTÉ DES ZÉROS
+% POUR QUE LEURS LONGUEURS À CHACUN SOIENT MULTIPLES DE 4, MAIS
+% AUCUN NE SE TERMINE EN 0000
+% output: N2 - N1
+% Elle donne le résultat dans le **bon ordre**, avec le bon signe,
+% et sans zéros superflus.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@sub@A #1#2#3\W\X\Y\Z #4#5#6#7%
+{%
+ \xint@w
+ #4\xint@sub@az
+ \W\XINT@sub@B #1{#4#5#6#7}{#2}#3\W\X\Y\Z
+}%
+\def\XINT@sub@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@sub@bz
+ \W\XINT@sub@onestep #1#2{#7#6#5#4}{#3}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% d'abord la branche principale
+% #6 = 4 chiffres de N1, plus significatif en *premier*,
+% #2#3#4#5 chiffres de N2, plus significatif en *dernier*
+% On veut N2 - N1.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@sub@onestep #1#2#3#4#5#6%
+{\expandafter
+ \XINT@sub@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% ON PRODUIT LE RÉSULTAT DANS LE BON ORDRE
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@sub@backtoA #1#2#3.#4%
+{%
+ \XINT@sub@A #2{#3#4}%
+}%
+\def\xint@sub@bz
+ \W\XINT@sub@onestep #1#2#3#4#5#6#7%
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@sub@C % une retenue
+ 0\dummy \XINT@sub@D % pas de retenue
+ \xint@UDforkzero
+ {#7}#2#3#4#5%
+}%
+\def\XINT@sub@D #1#2\W\X\Y\Z
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1%
+}%
+\def\XINT@sub@C #1#2#3#4#5%
+{%
+ \xint@w
+ #2\xint@sub@cz
+ \W\XINT@sub@AC@onestep {#5#4#3#2}{#1}%
+}%
+\def\XINT@sub@AC@onestep #1%
+{\expandafter
+ \XINT@sub@backtoC\the\numexpr 11#1-1\relax.%
+}%
+\def\XINT@sub@backtoC #1#2#3.#4%
+{%
+ \XINT@sub@AC@checkcarry #2{#3#4}% la retenue va \^etre examin\'ee
+}%
+\def\XINT@sub@AC@checkcarry #1%
+{%
+ \xint@one #1\xint@sub@AC@nocarry 1\XINT@sub@C
+}%
+\def\xint@sub@AC@nocarry 1\XINT@sub@C #1#2\W\X\Y\Z
+{%
+ \expandafter
+ \XINT@cuz@loop
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1\W\W\W\W\W\W\W\Z
+}%
+\def\xint@sub@cz\W\XINT@sub@AC@onestep #1%
+{%
+ \XINT@cuz
+}%
+\def\xint@sub@az\W\XINT@sub@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@sub@ez
+ \W\XINT@sub@Eenter #1{#3}#4#5#6#7%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% le premier nombre continue, le résultat sera < 0.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@sub@Eenter #1#2%
+{%
+ \expandafter
+ \XINT@sub@E\expandafter1\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ \W\X\Y\Z #1%
+}%
+\def\XINT@sub@E #1#2#3#4#5#6%
+{%
+ \xint@w #3\xint@sub@F\W\XINT@sub@Eonestep
+ #1{#6#5#4#3}{#2}%
+}%
+\def\XINT@sub@Eonestep #1#2%
+{\expandafter
+ \XINT@sub@backtoE\the\numexpr 110000-#2+#1-1\relax.%
+}%
+\def\XINT@sub@backtoE #1#2#3.#4%
+{%
+ \XINT@sub@E #2{#3#4}%
+}%
+\def\xint@sub@F\W\XINT@sub@Eonestep #1#2#3#4%
+{%
+ \xint@sub@Fthreewayfork
+ #4#1\dummy {\XINT@sub@Fdec 0}% soustraire 1. Et faire signe -
+ #1#4\dummy {\XINT@sub@Finc 1}% additionner 1. Et faire signe -
+ 10\dummy \XINT@sub@DD % terminer. Mais avec signe -
+ \xint@sub@Fforkthreeway
+ {#3}%
+}%
+\def\xint@sub@Fthreewayfork #110\dummy #2#3\xint@sub@Fforkthreeway {#2}%
+\def\XINT@sub@DD
+{\expandafter\space\expandafter-\romannumeral0\XINT@sub@D }%
+\def\XINT@sub@Fdec #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@sub@Fdec@finish\W\XINT@sub@Fdec@onestep
+ #1{#6#5#4#3}{#2}%
+}%
+\def\XINT@sub@Fdec@onestep #1#2%
+{\expandafter
+ \XINT@sub@backtoFdec\the\numexpr 11#2+#1-1\relax.%
+}%
+\def\XINT@sub@backtoFdec #1#2#3.#4%
+{%
+ \XINT@sub@Fdec #2{#3#4}%
+}%
+\def\xint@sub@Fdec@finish\W\XINT@sub@Fdec@onestep #1#2%
+{%
+ \expandafter\space\expandafter-\romannumeral0\XINT@cuz
+}%
+\def\XINT@sub@Finc #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@sub@Finc@finish\W\XINT@sub@Finc@onestep
+ #1{#6#5#4#3}{#2}%
+}%
+\def\XINT@sub@Finc@onestep #1#2%
+{\expandafter
+ \XINT@sub@backtoFinc\the\numexpr 10#2+#1\relax.%
+}%
+\def\XINT@sub@backtoFinc #1#2#3.#4%
+{%
+ \XINT@sub@Finc #2{#3#4}%
+}%
+\def\xint@sub@Finc@finish\W\XINT@sub@Finc@onestep #1#2#3%
+{%
+ \xint@UDzerofork
+ #1\dummy {\expandafter\space\expandafter-%
+ \xint@cleanupzeros@nospace}%
+ 0\dummy { -1}%
+ \xint@UDforkzero
+ #3%
+}%
+\def\xint@sub@ez\W\XINT@sub@Eenter #1%
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@sub@K % il y a une retenue
+ 0\dummy \XINT@sub@L % pas de retenue
+ \xint@UDforkzero
+}%
+\def\XINT@sub@L #1\W\X\Y\Z
+ {\XINT@cuz@loop #1\W\W\W\W\W\W\W\Z }%
+\def\XINT@sub@K #1%
+{%
+ \expandafter
+ \XINT@sub@KK\expandafter1\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@rord@main {}#1%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+\def\XINT@sub@KK #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@sub@KK@finish\W\XINT@sub@KK@onestep
+ #1{#6#5#4#3}{#2}%
+}%
+\def\XINT@sub@KK@onestep #1#2%
+{\expandafter
+ \XINT@sub@backtoKK\the\numexpr 110000-#2+#1-1\relax.%
+}%
+\def\XINT@sub@backtoKK #1#2#3.#4%
+{%
+ \XINT@sub@KK #2{#3#4}%
+}%
+\def\xint@sub@KK@finish\W\XINT@sub@KK@onestep #1#2#3%
+{%
+ \expandafter\space\expandafter-\romannumeral
+ 0\XINT@cuz@loop #3\W\W\W\W\W\W\W\Z
+}%
+% \end{macrocode}
+% \subsection{\ch{xintCmp}}
+% \begin{macrocode}
+\def\xintCmp {\romannumeral0\xintcmp }%
+\def\xintcmp #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@cmp
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@cmp #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@cmp@fork #2\Z #1\Z
+}%
+\def\XINT@Cmp #1#2{\romannumeral0\XINT@cmp@fork #2\Z #1\Z }%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% COMPARAISON
+% 1 si #3#4>#1#2, 0 si #3#4=#1#2, -1 si #3#4<#1#2
+% #3#4 vient du *premier*
+% #1#2 vient du *second*
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@cmp@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDsignsfork
+ #1#3\dummy \XINT@cmp@minusminus
+ #1-\dummy \XINT@cmp@minusplus
+ #3-\dummy \XINT@cmp@plusminus
+ --\dummy {\xint@UDzerosfork
+ #1#3\dummy \XINT@cmp@zerozero
+ #10\dummy \XINT@cmp@zeroplus
+ #30\dummy \XINT@cmp@pluszero
+ 00\dummy \XINT@cmp@plusplus
+ \xint@UDforkzeros}%
+ \xint@UDforksigns
+ {#2}{#4}#1#3%
+}%
+\def\XINT@cmp@minusplus #1#2#3#4{ 1}%
+\def\XINT@cmp@plusminus #1#2#3#4{ -1}%
+\def\XINT@cmp@zerozero #1#2#3#4{ 0}%
+\def\XINT@cmp@zeroplus #1#2#3#4{ 1}%
+\def\XINT@cmp@pluszero #1#2#3#4{ -1}%
+\def\XINT@cmp@plusplus #1#2#3#4%
+{%
+ \XINT@cmp@pre {#4#2}{#3#1}%
+}%
+\def\XINT@cmp@minusminus #1#2#3#4%
+{%
+ \XINT@cmp@pre {#1}{#2}%
+}%
+\def\XINT@cmp@pre #1%
+{%
+ \expandafter\XINT@cmp@@pre\expandafter{%
+ \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+ }%
+}%
+\def\XINT@cmp@@pre #1#2%
+{%
+ \expandafter\XINT@cmp@A
+ \expandafter1\expandafter{\expandafter}%
+ \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% COMPARAISON
+% N1 et N2 sont présentés à l'envers ET ON A RAJOUTÉ DES ZÉROS
+% POUR QUE LEURS LONGUEURS À CHACUN SOIENT MULTIPLES DE 4, MAIS
+% AUCUN NE SE TERMINE EN 0000
+% routine appelée via \XINT@cmp@A 1{}<N1>\W\X\Y\Z<N2>\W\X\Y\Z
+% ATTENTION RENVOIE 1 SI N1 < N2, 0 si N1 = N2, -1 si N1 > N2
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@cmp@A #1#2#3\W\X\Y\Z #4#5#6#7%
+{%
+ \xint@w
+ #4\xint@cmp@az
+ \W\XINT@cmp@B #1{#4#5#6#7}{#2}#3\W\X\Y\Z
+}%
+\def\XINT@cmp@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@cmp@bz
+ \W\XINT@cmp@onestep #1#2{#7#6#5#4}{#3}%
+}%
+\def\XINT@cmp@onestep #1#2#3#4#5#6%
+{\expandafter
+ \XINT@cmp@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.%
+}%
+\def\XINT@cmp@backtoA #1#2#3.#4%
+{%
+ \XINT@cmp@A #2{#3#4}%
+}%
+\def\xint@cmp@bz
+ \W\XINT@cmp@onestep #1\Z { 1}%
+\def\xint@cmp@az\W\XINT@cmp@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@cmp@ez
+ \W\XINT@cmp@Eenter #1{#3}#4#5#6#7%
+}%
+\def\XINT@cmp@Eenter #1\Z { -1}%
+\def\xint@cmp@ez\W\XINT@cmp@Eenter #1%
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@cmp@K % il y a une retenue
+ 0\dummy \XINT@cmp@L % pas de retenue
+ \xint@UDforkzero
+}%
+\def\XINT@cmp@K #1\Z { -1}%
+\def\XINT@cmp@L #1{\XINT@OneIfPositive@main #1}%
+\def\XINT@OneIfPositive #1%
+{%
+ \XINT@OneIfPositive@main #1\W\X\Y\Z%
+}%
+\def\XINT@OneIfPositive@main #1#2#3#4%
+{%
+ \xint@z #4\xint@OneIfPositive@terminated\Z\XINT@OneIfPositive@onestep
+ #1#2#3#4%
+}%
+\def\xint@OneIfPositive@terminated\Z\XINT@OneIfPositive@onestep\W\X\Y\Z { 0}%
+\def\XINT@OneIfPositive@onestep #1#2#3#4%
+{%
+ \expandafter
+ \XINT@OneIfPositive@check
+ \the\numexpr #1#2#3#4\relax
+}%
+\def\XINT@OneIfPositive@check #1%
+{%
+ \xint@zero
+ #1\xint@OneIfPositive@backtomain 0\XINT@OneIfPositive@finish #1%
+}%
+\def\XINT@OneIfPositive@finish #1\W\X\Y\Z{ 1}%
+\def\xint@OneIfPositive@backtomain 0\XINT@OneIfPositive@finish 0%
+ {\XINT@OneIfPositive@main }%
+% \end{macrocode}
+% \subsection{\ch{xintGeq}}
+% \begin{verbatim}
+% PLUS GRAND OU ÉGAL
+% attention compare les **valeurs absolues**
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintGeq {\romannumeral0\xintgeq }%
+\def\xintgeq #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@geq
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@geq #1#2%
+{\expandafter\expandafter\expandafter
+ \XINT@geq@fork #2\Z #1\Z
+}%
+\def\XINT@Geq #1#2{\romannumeral0\XINT@geq@fork #2\Z #1\Z }%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% PLUS GRAND OU ÉGAL
+% ATTENTION, TESTE les VALEURS ABSOLUES
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@geq@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@geq@secondiszero % |#1#2|=0
+ #3\dummy \XINT@geq@firstiszero % |#1#2|>0
+ 0\dummy {\xint@UDsignsfork
+ #1#3\dummy \XINT@geq@minusminus
+ #1-\dummy \XINT@geq@minusplus
+ #3-\dummy \XINT@geq@plusminus
+ --\dummy \XINT@geq@plusplus
+ \xint@UDforksigns}%
+ \xint@UDforkzero
+ {#2}{#4}#1#3%
+}%
+\def\XINT@geq@secondiszero #1#2#3#4{ 1}%
+\def\XINT@geq@firstiszero #1#2#3#4{ 0}%
+\def\XINT@geq@plusplus #1#2#3#4%
+ {\XINT@geq@pre {#4#2}{#3#1}}%
+\def\XINT@geq@minusminus #1#2#3#4%
+ {\XINT@geq@pre {#2}{#1}}%
+\def\XINT@geq@minusplus #1#2#3#4%
+ {\XINT@geq@pre {#4#2}{#1}}%
+\def\XINT@geq@plusminus #1#2#3#4%
+ {\XINT@geq@pre {#2}{#3#1}}%
+\def\XINT@geq@pre #1%
+{%
+ \expandafter\XINT@geq@@pre\expandafter{%
+ \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+ }%
+}%
+\def\XINT@geq@@pre #1#2%
+{%
+ \expandafter\XINT@geq@A
+ \expandafter1\expandafter{\expandafter}%
+ \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1 \W\X\Y\Z
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% PLUS GRAND OU ÉGAL
+% N1 et N2 sont présentés à l'envers ET ON A RAJOUTÉ DES ZÉROS
+% POUR QUE LEURS LONGUEURS À CHACUN SOIENT MULTIPLES DE 4, MAIS
+% AUCUN NE SE TERMINE EN 0000
+% routine appelée via
+% \romannumeral0\XINT@geq@A 1{}<N1>\W\X\Y\Z<N2>\W\X\Y\Z
+% ATTENTION RENVOIE 1 SI N1 < N2 ou N1 = N2 et 0 si N1 > N2
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@geq@A #1#2#3\W\X\Y\Z #4#5#6#7%
+{%
+ \xint@w
+ #4\xint@geq@az
+ \W\XINT@geq@B #1{#4#5#6#7}{#2}#3\W\X\Y\Z
+}%
+\def\XINT@geq@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@geq@bz
+ \W\XINT@geq@onestep #1#2{#7#6#5#4}{#3}%
+}%
+\def\XINT@geq@onestep #1#2#3#4#5#6%
+{\expandafter
+ \XINT@geq@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.%
+}%
+\def\XINT@geq@backtoA #1#2#3.#4%
+{%
+ \XINT@geq@A #2{#3#4}%
+}%
+\def\xint@geq@bz\W\XINT@geq@onestep #1\W\X\Y\Z { 1}%
+\def\xint@geq@az\W\XINT@geq@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@geq@ez
+ \W\XINT@geq@Eenter #1%
+}%
+\def\XINT@geq@Eenter #1\W\X\Y\Z { 0}%
+\def\xint@geq@ez\W\XINT@geq@Eenter #1%
+{%
+ \xint@UDzerofork
+ #1\dummy { 0} % il y a une retenue
+ 0\dummy { 1} % pas de retenue
+ \xint@UDforkzero
+}%
+% \end{macrocode}
+% \subsection{\ch{xintMax}}
+% \begin{macrocode}
+\def\xintMax {\romannumeral0\xintmax }%
+\def\xintmax #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@max
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@max #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@max@fork #2\Z #1\Z
+}%
+\def\XINT@Max #1#2{\romannumeral0\XINT@max@fork #2\Z #1\Z }%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #3#4 vient du *premier*
+% #1#2 vient du *second*
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@max@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDsignsfork
+ #1#3\dummy \XINT@max@minusminus % A < 0, B < 0
+ #1-\dummy \XINT@max@minusplus % B < 0, A >= 0
+ #3-\dummy \XINT@max@plusminus % A < 0, B >= 0
+ --\dummy {\xint@UDzerosfork
+ #1#3\dummy \XINT@max@zerozero % A = B = 0
+ #10\dummy \XINT@max@zeroplus % B = 0, A > 0
+ #30\dummy \XINT@max@pluszero % A = 0, B > 0
+ 00\dummy \XINT@max@plusplus % A, B > 0
+ \xint@UDforkzeros}%
+ \xint@UDforksigns
+ {#2}{#4}#1#3%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A = #4#2, B = #3#1
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@max@zerozero #1#2#3#4{ 0}%
+\def\XINT@max@zeroplus #1#2#3#4{ #4#2}%
+\def\XINT@max@pluszero #1#2#3#4{ #3#1}%
+\def\XINT@max@minusplus #1#2#3#4{ #4#2}%
+\def\XINT@max@plusminus #1#2#3#4{ #3#1}%
+\def\XINT@max@plusplus #1#2#3#4%
+{%
+ \ifodd\XINT@Geq {#4#2}{#3#1}
+ \xint@afterfi { #4#2}%
+ \else
+ \xint@afterfi { #3#1}%
+ \fi
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #3=-, #4=-, #1 = |B| = -B, #2 = |A| = -A
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@max@minusminus #1#2#3#4%
+{%
+ \ifodd\XINT@Geq {#1}{#2}
+ \xint@afterfi { -#2}%
+ \else
+ \xint@afterfi { -#1}%
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\ch{xintMin}}
+% \begin{macrocode}
+\def\xintMin {\romannumeral0\xintmin }%
+\def\xintmin #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@min
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@min #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@min@fork #2\Z #1\Z
+}%
+\def\XINT@Min #1#2{\romannumeral0\XINT@min@fork #2\Z #1\Z }%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #3#4 vient du *premier*
+% #1#2 vient du *second*
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@min@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDsignsfork
+ #1#3\dummy \XINT@min@minusminus % A < 0, B < 0
+ #1-\dummy \XINT@min@minusplus % B < 0, A >= 0
+ #3-\dummy \XINT@min@plusminus % A < 0, B >= 0
+ --\dummy {\xint@UDzerosfork
+ #1#3\dummy \XINT@min@zerozero % A = B = 0
+ #10\dummy \XINT@min@zeroplus % B = 0, A > 0
+ #30\dummy \XINT@min@pluszero % A = 0, B > 0
+ 00\dummy \XINT@min@plusplus % A, B > 0
+ \xint@UDforkzeros}%
+ \xint@UDforksigns
+ {#2}{#4}#1#3%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A = #4#2, B = #3#1
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@min@zerozero #1#2#3#4{ 0}%
+\def\XINT@min@zeroplus #1#2#3#4{ 0}%
+\def\XINT@min@pluszero #1#2#3#4{ 0}%
+\def\XINT@min@minusplus #1#2#3#4{ #3#1}%
+\def\XINT@min@plusminus #1#2#3#4{ #4#2}%
+\def\XINT@min@plusplus #1#2#3#4%
+{%
+ \ifodd\XINT@Geq {#4#2}{#3#1}
+ \xint@afterfi { #3#1}%
+ \else
+ \xint@afterfi { #4#2}%
+ \fi
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #3=-, #4=-, #1 = |B| = -B, #2 = |A| = -A
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@min@minusminus #1#2#3#4%
+{%
+ \ifodd\XINT@Geq {#1}{#2}
+ \xint@afterfi { -#1}%
+ \else
+ \xint@afterfi { -#2}%
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\ch{xintSum}, \ch{xintSumExpr}}
+% \begin{verbatim}
+% \xintSum {{a}{b}...{z}}
+% \xintSumExpr {a}{b}...{z}\relax
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@psum #1%
+{%
+ \romannumeral0\XINT@psum@checkifemptysum #1\Z
+}%
+\def\XINT@psum@checkifemptysum #1%
+{%
+ \xint@relax #1\XINT@psum@returnzero\relax \XINT@psum@RQfirst #1%
+}%
+\def\XINT@psum@returnzero #1\Z { 0}%
+\def\XINT@psum@RQfirst #1\Z
+{%
+ \expandafter\XINT@psum@loop\expandafter
+ {\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z}% avant: #1\Z
+}%
+\def\XINT@psum@loop #1#2%
+{%
+ \xint@relax #2\XINT@psum@end\relax
+ \expandafter
+ \XINT@psum@loop\expandafter
+ {\romannumeral0\expandafter\XINT@sum@A
+ \expandafter0\expandafter{\expandafter}%
+ \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z }%
+}%
+\def\XINT@psum@end\relax\expandafter
+ \XINT@psum@loop\expandafter #1%
+ {\XINT@psum@end@ #1}%
+\def\XINT@psum@end@ #1\W\X\Y\Z #2\W\X\Y\Z
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop\romannumeral0\XINT@rev {#2}%
+}%
+\def\xintSumExpr {\romannumeral0\xintsumexpr }%
+\def\xintSum {\romannumeral0\xintsum }%
+\def\xintsum #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xintsumexpr #1\relax
+}%
+\def\xintsumexpr #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@sum@checkifempty #1\Z {\XINT@psum }{\XINT@psum }%
+}%
+\def\XINT@sum@checkifempty #1%
+{%
+ \xint@relax #1\XINT@sum@returnzero\relax
+ \XINT@sum@checksign #1%
+}%
+\def\XINT@sum@returnzero #1\Z #2#3{ 0}%
+\def\XINT@sum@checksign #1%
+{%
+ \xint@zero #1\XINT@sum@skipzeroinput0%
+ \xint@UDsignfork
+ #1\dummy \XINT@sum@pushneg
+ -\dummy \XINT@sum@pushpos
+ \xint@UDforksign
+ #1%
+}%
+\def\XINT@sum@skipzeroinput #1\xint@UDforksign #2\Z #3#4%
+{%
+ \XINT@sum@xpxpnext {#3}{#4}%
+}%
+\def\XINT@sum@pushpos #1#2\Z #3#4%
+{%
+ \XINT@sum@xpxpnext {#3{#1#2}}{#4}%
+}%
+\def\XINT@sum@pushneg #1#2\Z #3#4%
+{%
+ \XINT@sum@xpxpnext {#3}{#4{#2}}%
+}%
+\def\XINT@sum@xpxpnext #1#2#3%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@sum@checkiffinished #3\Z {#1}{#2}%
+}%
+\def\XINT@sum@checkiffinished #1%
+{%
+ \xint@relax #1\XINT@sum@end\relax
+ \XINT@sum@checksign #1%
+}%
+\def\XINT@sum@end\relax\XINT@sum@checksign\relax #1\Z #2#3%
+ {\xintsub{#2\relax}{#3\relax}}%
+\def\XINT@sum@A #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@sum@az
+ \W\XINT@sum@B #1{#3#4#5#6}{#2}%
+}%
+\def\xint@sum@az\W\XINT@sum@B #1#2%
+{%
+ \XINT@sum@AC@checkcarry #1%
+}%
+\def\XINT@sum@B #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{%
+ \xint@w
+ #5\xint@sum@bz
+ \W\XINT@sum@E #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z
+}%
+\def\XINT@sum@E #1#2#3#4#5#6%
+{\expandafter
+ \XINT@sum@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax
+}%
+\def\XINT@sum@ABEA #1#2#3#4#5#6#7%
+{%
+ \XINT@sum@A #2{#7#6#5#4#3}%
+}%
+\def\xint@sum@bz\W\XINT@sum@E #1#2#3#4#5#6%
+{\expandafter
+ \XINT@sum@CC\the\numexpr #1+10#5#4#3#2\relax
+}%
+\def\XINT@sum@CC #1#2#3#4#5#6#7%
+{%
+ \XINT@sum@AC@checkcarry #2{#7#6#5#4#3}%
+}%
+\def\XINT@sum@AC@checkcarry #1%
+{%
+ \xint@zero #1\xint@sum@AC@nocarry 0\XINT@sum@C
+}%
+\def\xint@sum@AC@nocarry 0\XINT@sum@C #1#2\W\X\Y\Z { #1#2}%
+\def\XINT@sum@C #1#2#3#4#5%
+{%
+ \xint@w
+ #2\xint@sum@cz
+ \W\XINT@sum@D {#5#4#3#2}{#1}%
+}%
+\def\XINT@sum@D #1%
+{\expandafter
+ \XINT@sum@CC\the\numexpr 1+10#1\relax
+}%
+\def\xint@sum@cz\W\XINT@sum@D #1#2{ #21000}%
+% \end{macrocode}
+% \subsection{\ch{xintMul}}
+% \begin{macrocode}
+\def\xintMul {\romannumeral0\xintmul }%
+\def\xintmul #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@mul
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@mul #1#2%
+{\expandafter\expandafter\expandafter
+ \XINT@mul@fork #2\Z #1\Z
+}%
+\def\XINT@Mul #1#2{\romannumeral0\XINT@mul@fork #2\Z #1\Z }%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% MULTIPLICATION
+% Ici #1#2 = 2e input et #3#4 = 1er input
+% Algorithme plus efficace pour #3#4 plus long que #1#2
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@mul@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@mul@zero
+ #3\dummy \XINT@mul@zero
+ 0\dummy
+ {\xint@UDsignsfork
+ #1#3\dummy \XINT@mul@minusminus % #1 = #3 = -
+ #1-\dummy \XINT@mul@minusplus % #1 = -
+ #3-\dummy \XINT@mul@plusminus % #3 = -
+ --\dummy \XINT@mul@plusplus
+ \xint@UDforksigns}%
+ \xint@UDforkzero
+ {#2}{#4}#1#3%
+}%
+\def\XINT@mul@zero #1#2#3#4{ 0}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Dans ce qui suit #3#1 vient du #1#2 initial correspondant au
+% ** 2e ** input.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@mul@minusminus #1#2#3#4%
+{%
+ \expandafter
+ \XINT@mul@enter\romannumeral0%
+ \XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z
+}%
+\def\XINT@mul@minusplus #1#2#3#4%
+{%
+ \expandafter\space\expandafter-%
+ \romannumeral0\expandafter
+ \XINT@mul@enter\romannumeral0%
+ \XINT@RQ {}#4#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z
+}%
+\def\XINT@mul@plusminus #1#2#3#4%
+{%
+ \expandafter\space\expandafter-%
+ \romannumeral0\expandafter
+ \XINT@mul@enter\romannumeral0%
+ \XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #3#1\W\X\Y\Z
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Ici #3#1 correspond au **2e input** celui censé être
+% pyschologiquement plus petit
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@mul@plusplus #1#2#3#4%
+{%
+ \expandafter
+ \XINT@mul@enter\romannumeral0%
+ \XINT@RQ {}#4#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #3#1\W\X\Y\Z
+}%
+\def\XINT@mul@add@A #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@mul@add@az
+ \W\XINT@mul@add@AB #1{#3#4#5#6}{#2}%
+}%
+\def\xint@mul@add@az\W\XINT@mul@add@AB #1#2%
+{%
+ \XINT@mul@add@AC@checkcarry #1%
+}%
+\def\XINT@mul@add@AB #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{%
+ \XINT@mul@add@ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z
+}%
+\def\XINT@mul@add@ABE #1#2#3#4#5#6%
+{\expandafter
+ \XINT@mul@add@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax.%
+}%
+\def\XINT@mul@add@ABEA #1#2#3.#4%
+{%
+ \XINT@mul@add@A #2{#3#4}%
+}%
+\def\XINT@mul@add@AC@checkcarry #1%
+{%
+ \xint@zero #1\xint@mul@add@AC@nocarry 0\XINT@mul@add@C
+}%
+\def\xint@mul@add@AC@nocarry 0\XINT@mul@add@C #1#2\W\X\Y\Z
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1%
+}%
+\def\XINT@mul@add@C #1#2#3#4#5%
+{%
+ \xint@w
+ #5\xint@mul@add@cw
+ #4\xint@mul@add@cx
+ #3\xint@mul@add@cy
+ #2\xint@mul@add@cz
+ \W\XINT@mul@add@CD {#5#4#3#2}{#1}%
+}%
+\def\XINT@mul@add@CD #1%
+{\expandafter
+ \XINT@mul@add@CC\the\numexpr 1+10#1\relax.%
+}%
+\def\XINT@mul@add@CC #1#2#3.#4%
+{%
+ \XINT@mul@add@AC@checkcarry #2{#3#4}%
+}%
+\def\xint@mul@add@cw
+ #1\xint@mul@add@cx
+ #2\xint@mul@add@cy
+ #3\xint@mul@add@cz
+ \W\XINT@mul@add@CD
+{\expandafter
+ \XINT@mul@add@CDw\the\numexpr 1+#1#2#3\relax.%
+}%
+\def\XINT@mul@add@CDw #1.#2#3\X\Y\Z
+{%
+ \XINT@mul@add@end #1#3%
+}%
+\def\xint@mul@add@cx
+ #1\xint@mul@add@cy
+ #2\xint@mul@add@cz
+ \W\XINT@mul@add@CD
+{\expandafter
+ \XINT@mul@add@CDx\the\numexpr 1+#1#2\relax.%
+}%
+\def\XINT@mul@add@CDx #1.#2#3\Y\Z
+{%
+ \XINT@mul@add@end #1#3%
+}%
+\def\xint@mul@add@cy
+ #1\xint@mul@add@cz
+ \W\XINT@mul@add@CD
+{\expandafter
+ \XINT@mul@add@CDy\the\numexpr 1+#1\relax.%
+}%
+\def\XINT@mul@add@CDy #1.#2#3\Z
+{%
+ \XINT@mul@add@end #1#3%
+}%
+\def\xint@mul@add@cz\W\XINT@mul@add@CD #1#2#3{\XINT@mul@add@end #1#3}%
+\def\XINT@mul@add@end #1#2#3#4#5%
+{\expandafter\space
+ \the\numexpr #1#2#3#4#5\relax
+}%
+\def\XINT@mul@Ar #1#2#3#4#5#6%
+{%
+ \xint@z #6\xint@mul@br\Z\XINT@mul@Br #1{#6#5#4#3}{#2}%
+}%
+\def\xint@mul@br\Z\XINT@mul@Br #1#2%
+{%
+ \XINT@sum@AC@checkcarry #1%
+}%
+\def\XINT@mul@Br #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{\expandafter
+ \XINT@mul@ABEAr\the\numexpr #1+10#2+#8#7#6#5\relax.{#3}#4\W\X\Y\Z
+}%
+\def\XINT@mul@ABEAr #1#2#3#4#5#6.#7%
+{%
+ \XINT@mul@Ar #2{#7#6#5#4#3}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Mr renvoie le résultat ***à l'envers***, sur ***4n chiffres***
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@mul@Mr #1%
+{%
+ \expandafter
+ \XINT@mul@Mr@checkifzeroorone
+ \expandafter{\the\numexpr #1\relax}%
+}%
+\def\XINT@mul@Mr@checkifzeroorone #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@mul@Mr@zero
+ \or
+ \expandafter\XINT@mul@Mr@one
+ \else
+ \expandafter\XINT@mul@Nr
+ \fi
+ {0000}{}{#1}%
+}%
+\def\XINT@mul@Mr@zero #1\Z\Z\Z\Z { 0000}%
+\def\XINT@mul@Mr@one #1#2#3#4\Z\Z\Z\Z { #4}%
+\def\XINT@mul@Nr #1#2#3#4#5#6#7%
+{%
+ \xint@z #4\xint@mul@pr\Z\XINT@mul@Pr {#1}{#3}{#7#6#5#4}{#2}{#3}%
+}%
+\def\XINT@mul@Pr #1#2#3%
+{\expandafter
+ \XINT@mul@Lr\the\numexpr 10000#1+#2*#3\relax
+}%
+\def\XINT@mul@Lr 1#1#2#3#4#5#6#7#8#9%
+{%
+ \XINT@mul@Nr {#1#2#3#4}{#9#8#7#6#5}%
+}%
+\def\xint@mul@pr\Z\XINT@mul@Pr #1#2#3#4#5%
+{%
+ \xint@quatrezeros #1\XINT@mul@Mr@end@nocarry 0000\XINT@mul@Mr@end@carry
+ #1{#4}%
+}%
+\def\XINT@mul@Mr@end@nocarry 0000\XINT@mul@Mr@end@carry 0000#1{ #1}%
+\def\XINT@mul@Mr@end@carry #1#2#3#4#5{ #5#4#3#2#1}%
+\def\XINT@mul@M #1%
+{\expandafter
+ \XINT@mul@M@checkifzeroorone
+ \expandafter{\the\numexpr #1\relax}%
+}%
+\def\XINT@mul@M@checkifzeroorone #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@mul@M@zero
+ \or
+ \expandafter\XINT@mul@M@one
+ \else
+ \expandafter\XINT@mul@N
+ \fi
+ {0000}{}{#1}%
+}%
+\def\XINT@mul@M@zero #1\Z\Z\Z\Z { 0}%
+\def\XINT@mul@M@one #1#2#3#4\Z\Z\Z\Z {%
+ \expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0\XINT@rev{#4}%
+}%
+\def\XINT@mul@N #1#2#3#4#5#6#7%
+{%
+ \xint@z #4\xint@mul@p\Z\XINT@mul@P {#1}{#3}{#7#6#5#4}{#2}{#3}%
+}%
+\def\XINT@mul@P #1#2#3%
+{\expandafter
+ \XINT@mul@L\the\numexpr 10000#1+#2*#3\relax
+}%
+\def\XINT@mul@L 1#1#2#3#4#5#6#7#8#9%
+{%
+ \XINT@mul@N {#1#2#3#4}{#5#6#7#8#9}%
+}%
+\def\xint@mul@p\Z\XINT@mul@P #1#2#3#4#5%
+{%
+ \XINT@mul@M@end #1#4%
+}%
+\def\XINT@mul@M@end #1#2#3#4#5#6#7#8%
+{\expandafter\space
+ \the\numexpr #1#2#3#4#5#6#7#8\relax
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Routine de multiplication principale
+% délimiteur \W\X\Y\Z
+% Le résultat partiel est toujours maintenu avec significatif à
+% droite et il a un nombre multiple de 4 de chiffres
+% \romannumeral0\XINT@mul@enter <N1>\W\X\Y\Z <N2>\W\X\Y\Z
+% avec N1: *renversé*, *longueur 4n* (zéros éventuellement ajoutés
+% au-delà du chiffre le plus significatif)
+% et N2 = dans l'ordre *normal*, et pas forcément longueur 4n,
+% et N2 est *non nul*.
+% pas de signes
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@mul@enter #1\W\X\Y\Z #2#3#4#5%
+{%
+ \xint@w
+ #5\xint@mul@enterw
+ #4\xint@mul@enterx
+ #3\xint@mul@entery
+ #2\xint@mul@enterz
+ \W\XINT@mul@start {#2#3#4#5}#1\W\X\Y\Z
+}%
+\def\xint@mul@enterw
+ #1\xint@mul@enterx
+ #2\xint@mul@entery
+ #3\xint@mul@enterz
+ \W\XINT@mul@start #4#5\W\X\Y\Z \X\Y\Z
+{%
+ \XINT@mul@M {#3#2#1}#5\Z\Z\Z\Z
+}%
+\def\xint@mul@enterx
+ #1\xint@mul@entery
+ #2\xint@mul@enterz
+ \W\XINT@mul@start #3#4\W\X\Y\Z \Y\Z
+{%
+ \XINT@mul@M {#2#1}#4\Z\Z\Z\Z
+}%
+\def\xint@mul@entery
+ #1\xint@mul@enterz
+ \W\XINT@mul@start #2#3\W\X\Y\Z \Z
+{%
+ \XINT@mul@M {#1}#3\Z\Z\Z\Z
+}%
+\def\XINT@mul@start #1#2\W\X\Y\Z
+{\expandafter
+ \XINT@mul@main \expandafter
+ {\romannumeral0\XINT@mul@Mr {#1}#2\Z\Z\Z\Z}#2\W\X\Y\Z
+}%
+\def\XINT@mul@main #1#2\W\X\Y\Z #3#4#5#6%
+{%
+ \xint@w
+ #6\xint@mul@mainw
+ #5\xint@mul@mainx
+ #4\xint@mul@mainy
+ #3\xint@mul@mainz
+ \W\XINT@mul@compute {#1}{#3#4#5#6}#2\W\X\Y\Z
+}%
+\def\XINT@mul@compute #1#2#3\W\X\Y\Z
+{\expandafter
+ \XINT@mul@main \expandafter
+ {\romannumeral0\expandafter
+ \XINT@mul@Ar \expandafter0\expandafter{\expandafter}%
+ \romannumeral0\XINT@mul@Mr {#2}#3\Z\Z\Z\Z \W\X\Y\Z 0000#1\W\X\Y\Z
+ }#3\W\X\Y\Z
+}%
+\def\xint@mul@mainw
+ #1\xint@mul@mainx
+ #2\xint@mul@mainy
+ #3\xint@mul@mainz
+ \W\XINT@mul@compute #4#5#6\W\X\Y\Z \X\Y\Z
+{%
+ \expandafter
+ \XINT@mul@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#3#2#1}#6\Z\Z\Z\Z
+ \W\X\Y\Z 000#4\W\X\Y\Z
+}%
+\def\xint@mul@mainx
+ #1\xint@mul@mainy
+ #2\xint@mul@mainz
+ \W\XINT@mul@compute #3#4#5\W\X\Y\Z \Y\Z
+{%
+ \expandafter
+ \XINT@mul@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#2#1}#5\Z\Z\Z\Z
+ \W\X\Y\Z 00#3\W\X\Y\Z
+}%
+\def\xint@mul@mainy
+ #1\xint@mul@mainz
+ \W\XINT@mul@compute #2#3#4\W\X\Y\Z \Z
+{%
+ \expandafter
+ \XINT@mul@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#1}#4\Z\Z\Z\Z
+ \W\X\Y\Z 0#2\W\X\Y\Z
+}%
+\def\xint@mul@mainz\W\XINT@mul@compute #1#2#3\W\X\Y\Z
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop\romannumeral0\XINT@rev{#1}%
+}%
+% \end{macrocode}
+% \subsection{\ch{xintSqr}}
+% \begin{macrocode}
+\def\xintSqr {\romannumeral0\xintsqr }%
+\def\xintsqr #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@sqr
+ \expandafter\expandafter\expandafter
+ {\xintAbs{#1}}% fait l'expansion de #1 et se d\'ebarrasse du signe
+}%
+\def\XINT@sqr #1%
+{\expandafter
+ \XINT@mul@enter
+ \romannumeral0%
+ \XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z
+}%
+% \end{macrocode}
+% \subsection{\ch{xintPrd}, \ch{xintProductExpr}}
+% \begin{verbatim}
+% \xintPrd {{a}...{z}}
+% \xintProductExpr {a}...{z}\relax
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@posprod #1%
+{%
+ \XINT@pprod@checkifempty #1\Z
+}%
+\def\XINT@pprod@checkifempty #1%
+{%
+ \xint@relax #1\XINT@pprod@emptyproduct\relax
+ \XINT@pprod@RQfirst #1%
+}%
+\def\XINT@pprod@emptyproduct #1\Z { 1}%
+\def\XINT@pprod@RQfirst #1\Z
+{%
+ \expandafter\XINT@pprod@getnext\expandafter
+ {\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z}%
+}%
+\def\XINT@pprod@getnext #1#2%
+{%
+ \XINT@pprod@checkiffinished #2\Z {#1}%
+}%
+\def\XINT@pprod@checkiffinished #1%
+{%
+ \xint@relax #1\XINT@pprod@end\relax
+ \XINT@pprod@compute #1%
+}%
+\def\XINT@pprod@compute #1\Z #2%
+{%
+ \expandafter
+ \XINT@pprod@getnext
+ \expandafter
+ {\romannumeral0\XINT@prod@mul@enter #2\W\X\Y\Z #1\W\X\Y\Z}%
+}%
+\def\XINT@pprod@end\relax\XINT@pprod@compute #1\Z #2%
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0\XINT@rev {#2}%
+}%
+\def\xintProductExpr {\romannumeral0\xintproductexpr }%
+\def\xintPrd {\romannumeral0\xintprd }%
+\def\xintprd #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xintproductexpr #1\relax
+}%
+\def\xintproductexpr #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@prod@checkifempty #1\Z
+}%
+\def\XINT@prod@checkifempty #1%
+{%
+ \xint@relax #1\XINT@prod@emptyproduct\relax
+ \XINT@prod@checkfirstsign #1%
+}%
+\def\XINT@prod@emptyproduct #1\Z { 1}%
+\def\XINT@prod@checkfirstsign #1%
+{%
+ \xint@zero #1\XINT@prod@returnzero0%
+ \xint@UDsignfork
+ #1\dummy \XINT@prod@firstisneg
+ -\dummy \XINT@prod@firstispos
+ \xint@UDforksign
+ #1%
+}%
+\def\XINT@prod@returnzero #1\relax { 0}%
+\def\XINT@prod@firstisneg #1#2\Z
+{%
+ \expandafter\XINT@prod@xpxpnext\expandafter
+ 0\expandafter{\romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z}%
+}%
+\def\XINT@prod@firstispos #1\Z
+{%
+ \expandafter\XINT@prod@xpxpnext\expandafter
+ 1\expandafter{\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z }%
+}%
+\def\XINT@prod@xpxpnext #1#2#3%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@prod@checkiffinished #3\Z {#2}#1%
+}%
+\def\XINT@prod@checkiffinished #1%
+{%
+ \xint@relax #1\XINT@prod@end\relax
+ \XINT@prod@checksign #1%
+}%
+\def\XINT@prod@checksign #1%
+{%
+ \xint@zero #1\XINT@prod@returnzero0%
+ \xint@UDsignfork
+ #1\dummy \XINT@prod@neg
+ -\dummy \XINT@prod@pos
+ \xint@UDforksign
+ #1%
+}%
+\def\XINT@prod@pos #1\Z #2#3%
+{%
+ \expandafter
+ \XINT@prod@xpxpnext
+ \expandafter
+ #3%
+ \expandafter
+ {\romannumeral0\XINT@prod@mul@enter #2\W\X\Y\Z #1\W\X\Y\Z }%
+}%
+\def\XINT@prod@neg #1#2\Z #3#4%
+{%
+ \expandafter
+ \XINT@prod@xpxpnext
+ \expandafter
+ {\the\numexpr 1-#4\expandafter}%
+ \expandafter
+ {\romannumeral0\XINT@prod@mul@enter #3\W\X\Y\Z #2\W\X\Y\Z }%
+}%
+\def\XINT@prod@end\relax\XINT@prod@checksign #1\Z #2#3%
+{%
+ \expandafter
+ \xint@prod@cleanupzeros
+ \romannumeral0\XINT@rev {#2#3}%
+}%
+\def\xint@prod@cleanupzeros #1#2#3#4#5%
+{%
+ \expandafter\space\the\numexpr (2*#1-1)*#2#3#4#5\relax
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% MULTIPLICATION ET ADDITION POUR LES PRODUITS
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@prod@add@A #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@prod@add@az
+ \W\XINT@prod@add@AB #1{#3#4#5#6}{#2}%
+}%
+\def\xint@prod@add@az\W\XINT@prod@add@AB #1#2%
+{%
+ \XINT@prod@add@AC@checkcarry #1%
+}%
+\def\XINT@prod@add@AC@checkcarry #1%
+{%
+ \xint@zero #1\xint@prod@add@AC@nocarry 0\XINT@prod@add@C
+}%
+\def\xint@prod@add@AC@nocarry 0\XINT@prod@add@C
+{%
+ \XINT@prod@add@F
+}%
+\def\XINT@prod@add@AB #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{%
+ \XINT@prod@add@ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z
+}%
+\def\XINT@prod@add@ABE #1#2#3#4#5#6%
+{\expandafter
+ \XINT@prod@add@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax
+}%
+\def\XINT@prod@add@ABEA #1#2#3#4#5#6#7%
+{%
+ \XINT@prod@add@A #2{#7#6#5#4#3}%<-- attention on met donc \`a droite
+}%
+\def\XINT@prod@add@C #1#2#3#4#5%
+{%
+ \xint@w
+ #5\xint@prod@add@cw
+ #4\xint@prod@add@cx
+ #3\xint@prod@add@cy
+ #2\xint@prod@add@cz
+ \W\XINT@prod@add@CD {#5#4#3#2}{#1}%
+}%
+\def\XINT@prod@add@CD #1%
+{\expandafter
+ \XINT@prod@add@CC\the\numexpr 1+10#1\relax
+}%
+\def\XINT@prod@add@CC #1#2#3#4#5#6#7%
+{%
+ \XINT@prod@add@AC@checkcarry #2{#7#6#5#4#3}%
+}%
+\def\xint@prod@add@cw
+ #1\xint@prod@add@cx
+ #2\xint@prod@add@cy
+ #3\xint@prod@add@cz
+ \W\XINT@prod@add@CD
+{\expandafter
+ \XINT@prod@add@CDw\the\numexpr 1+10#1#2#3\relax
+}%
+\def\XINT@prod@add@CDw #1#2#3#4#5#6%
+{%
+ \xint@quatrezeros #2#3#4#5\XINT@prod@add@endDw@zeros
+ 0000\XINT@prod@add@endDw #2#3#4#5%
+}%
+\def\XINT@prod@add@endDw@zeros 0000\XINT@prod@add@endDw 0000#1\X\Y\Z{ #1}%
+\def\XINT@prod@add@endDw #1#2#3#4#5\X\Y\Z{ #5#4#3#2#1}%
+\def\xint@prod@add@cx
+ #1\xint@prod@add@cy
+ #2\xint@prod@add@cz
+ \W\XINT@prod@add@CD
+{\expandafter
+ \XINT@prod@add@CDx\the\numexpr 1+100#1#2\relax
+}%
+\def\XINT@prod@add@CDx #1#2#3#4#5#6%
+{%
+ \xint@quatrezeros #2#3#4#5\XINT@prod@add@endDx@zeros
+ 0000\XINT@prod@add@endDx #2#3#4#5%
+}%
+\def\XINT@prod@add@endDx@zeros 0000\XINT@prod@add@endDx 0000#1\Y\Z{ #1}%
+\def\XINT@prod@add@endDx #1#2#3#4#5\Y\Z{ #5#4#3#2#1}%
+\def\xint@prod@add@cy
+ #1\xint@prod@add@cz
+ \W\XINT@prod@add@CD
+{\expandafter
+ \XINT@prod@add@CDy\the\numexpr 1+1000#1\relax
+}%
+\def\XINT@prod@add@CDy #1#2#3#4#5#6%
+{%
+ \xint@quatrezeros #2#3#4#5\XINT@prod@add@endDy@zeros
+ 0000\XINT@prod@add@endDy #2#3#4#5%
+}%
+\def\XINT@prod@add@endDy@zeros 0000\XINT@prod@add@endDy 0000#1\Z{ #1}%
+\def\XINT@prod@add@endDy #1#2#3#4#5\Z{ #5#4#3#2#1}%
+\def\xint@prod@add@cz\W\XINT@prod@add@CD #1#2{ #21000}%
+\def\XINT@prod@add@F #1#2#3#4#5%
+{%
+ \xint@w
+ #5\xint@prod@add@Gw
+ #4\xint@prod@add@Gx
+ #3\xint@prod@add@Gy
+ #2\xint@prod@add@Gz
+ \W\XINT@prod@add@G {#2#3#4#5}{#1}%
+}%
+\def\XINT@prod@add@G #1#2%
+{%
+ \XINT@prod@add@F {#2#1}%
+}%
+\def\xint@prod@add@Gw
+ #1\xint@prod@add@Gx
+ #2\xint@prod@add@Gy
+ #3\xint@prod@add@Gz
+ \W\XINT@prod@add@G #4%
+{%
+ \xint@quatrezeros #3#2#10\XINT@prod@add@endGw@zeros
+ 0000\XINT@prod@add@endGw #3#2#10%
+}%
+\def\XINT@prod@add@endGw@zeros 0000\XINT@prod@add@endGw 0000#1\X\Y\Z{ #1}%
+\def\XINT@prod@add@endGw #1#2#3#4#5\X\Y\Z{ #5#1#2#3#4}%
+\def\xint@prod@add@Gx
+ #1\xint@prod@add@Gy
+ #2\xint@prod@add@Gz
+ \W\XINT@prod@add@G #3%
+{%
+ \xint@quatrezeros #2#100\XINT@prod@add@endGx@zeros
+ 0000\XINT@prod@add@endGx #2#100%
+}%
+\def\XINT@prod@add@endGx@zeros 0000\XINT@prod@add@endGx 0000#1\Y\Z{ #1}%
+\def\XINT@prod@add@endGx #1#2#3#4#5\Y\Z{ #5#1#2#3#4}%
+\def\xint@prod@add@Gy
+ #1\xint@prod@add@Gz
+ \W\XINT@prod@add@G #2%
+{%
+ \xint@quatrezeros #1000\XINT@prod@add@endGy@zeros
+ 0000\XINT@prod@add@endGy #1000%
+}%
+\def\XINT@prod@add@endGy@zeros 0000\XINT@prod@add@endGy 0000#1\Z{ #1}%
+\def\XINT@prod@add@endGy #1#2#3#4#5\Z{ #5#1#2#3#4}%
+\def\xint@prod@add@Gz\W\XINT@prod@add@G #1#2{ #2}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+%--- multiplication spéciale
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@prod@mul@enter #1\W\X\Y\Z #2#3#4#5%
+{%
+ \xint@w
+ #5\xint@prod@mul@enterw
+ #4\xint@prod@mul@enterx
+ #3\xint@prod@mul@entery
+ #2\xint@prod@mul@enterz
+ \W\XINT@prod@mul@start {#2#3#4#5}#1\W\X\Y\Z
+}%
+\def\xint@prod@mul@enterw
+ #1\xint@prod@mul@enterx
+ #2\xint@prod@mul@entery
+ #3\xint@prod@mul@enterz
+ \W\XINT@prod@mul@start #4#5\W\X\Y\Z \X\Y\Z
+{%
+ \XINT@mul@Mr {#3#2#1}#5\Z\Z\Z\Z
+}%
+\def\xint@prod@mul@enterx
+ #1\xint@prod@mul@entery
+ #2\xint@prod@mul@enterz
+ \W\XINT@prod@mul@start #3#4\W\X\Y\Z \Y\Z
+{%
+ \XINT@mul@Mr {#2#1}#4\Z\Z\Z\Z
+}%
+\def\xint@prod@mul@entery
+ #1\xint@prod@mul@enterz
+ \W\XINT@prod@mul@start #2#3\W\X\Y\Z \Z
+{%
+ \XINT@mul@Mr {#1}#3\Z\Z\Z\Z
+}%
+\def\XINT@prod@mul@start #1#2\W\X\Y\Z
+{\expandafter
+ \XINT@prod@mul@main \expandafter
+ {\romannumeral0%
+ \XINT@mul@Mr {#1}#2\Z\Z\Z\Z
+ }#2\W\X\Y\Z
+}%
+\def\XINT@prod@mul@main #1#2\W\X\Y\Z #3#4#5#6%
+{%
+ \xint@w
+ #6\xint@prod@mul@mainw
+ #5\xint@prod@mul@mainx
+ #4\xint@prod@mul@mainy
+ #3\xint@prod@mul@mainz
+ \W\XINT@prod@mul@compute {#1}{#3#4#5#6}#2\W\X\Y\Z
+}%
+\def\XINT@prod@mul@compute #1#2#3\W\X\Y\Z
+{\expandafter
+ \XINT@prod@mul@main \expandafter
+ {\romannumeral0\expandafter
+ \XINT@mul@Ar \expandafter0\expandafter{\expandafter}%
+ \romannumeral0\XINT@mul@Mr {#2}#3\Z\Z\Z\Z \W\X\Y\Z 0000#1\W\X\Y\Z
+ }#3\W\X\Y\Z
+}%
+\def\xint@prod@mul@mainw
+ #1\xint@prod@mul@mainx
+ #2\xint@prod@mul@mainy
+ #3\xint@prod@mul@mainz
+ \W\XINT@prod@mul@compute #4#5#6\W\X\Y\Z \X\Y\Z
+{%
+ \expandafter
+ \XINT@prod@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#3#2#1}#6\Z\Z\Z\Z
+ \W\X\Y\Z 000#4\W\X\Y\Z
+}%
+\def\xint@prod@mul@mainx
+ #1\xint@prod@mul@mainy
+ #2\xint@prod@mul@mainz
+ \W\XINT@prod@mul@compute #3#4#5\W\X\Y\Z \Y\Z
+{%
+ \expandafter
+ \XINT@prod@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#2#1}#5\Z\Z\Z\Z
+ \W\X\Y\Z 00#3\W\X\Y\Z
+}%
+\def\xint@prod@mul@mainy
+ #1\xint@prod@mul@mainz
+ \W\XINT@prod@mul@compute #2#3#4\W\X\Y\Z \Z
+{%
+ \expandafter
+ \XINT@prod@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#1}#4\Z\Z\Z\Z
+ \W\X\Y\Z 0#2\W\X\Y\Z
+}%
+\def\xint@prod@mul@mainz\W\XINT@prod@mul@compute #1#2#3\W\X\Y\Z
+{ #1}%
+% \end{macrocode}
+% \subsection{\ch{xintFac}}
+% \begin{macrocode}
+\def\xintFac {\romannumeral0\xintfac }%
+\def\xintfac #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@fac@fork
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\XINT@Fac {\romannumeral0\XINT@fac@fork }%
+\def\XINT@fac@fork #1%
+{%
+ \ifcase\xintSgn {#1}
+ \xint@afterfi{\expandafter\space\expandafter 1\xint@gobble }%
+ \or
+ \expandafter\XINT@fac@checklength
+ \else
+ \xint@afterfi{\xintError:FactorialOfNegativeNumber
+ \expandafter\space\expandafter 1\xint@gobble }%
+ \fi
+ {#1}%
+}%
+\def\XINT@fac@checklength #1%
+{%
+ \ifnum\xintLen {#1} > 9
+ \xint@afterfi{\xintError:FactorialOfTooBigNumber
+ \expandafter\space\expandafter 1\xint@gobble@three }%
+ \else
+ \expandafter\XINT@fac@loop
+ \fi
+ {1}{#1}{}%
+}%
+\def\XINT@fac@loop #1#2#3%
+{%
+ \ifnum #1<#2
+ \expandafter
+ \XINT@fac@loop
+ \expandafter
+ {\the\numexpr #1+1\expandafter }%
+ \else
+ \expandafter\XINT@fac@docomputation
+ \fi
+ {#2}{#3{#1}}%
+}%
+\def\XINT@fac@docomputation #1#2%
+{%
+ \XINT@posprod #2\relax
+}%
+% \end{macrocode}
+% \subsection{\ch{xintPow}}
+% \begin{macrocode}
+\def\xintPow {\romannumeral0\xintpow }%
+\def\xintpow #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@pow
+ #1\Z%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1#2 = A
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xint@pow #1#2\Z
+{%
+ \xint@UDsignfork
+ #1\dummy \XINT@pow@Aneg
+ -\dummy \XINT@pow@Anonneg
+ \xint@UDforksign
+ #1{#2}%
+}%
+\def\XINT@pow@Aneg #1#2#3%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@pow@Aneg@
+ \expandafter\expandafter\expandafter
+ {#3}{#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% B = #1, xpxp déjà fait
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@pow@Aneg@ #1%
+{%
+ \ifcase\XINT@Odd{#1}
+ \or \expandafter\XINT@pow@Aneg@Bodd
+ \fi
+ \XINT@pow@Anonneg@ {#1}%
+}%
+\def\XINT@pow@Aneg@Bodd #1%
+{%
+ \expandafter\XINT@opp\romannumeral0\XINT@pow@Anonneg@
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% B = #3, faire le xpxp
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@pow@Anonneg #1#2#3%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@pow@Anonneg@
+ \expandafter\expandafter\expandafter
+ {#3}{#1#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = B, #2 = |A|
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@pow@Anonneg@ #1#2%
+{%
+ \ifcase\XINT@Cmp {#2}{1}
+ \expandafter\XINT@pow@AisOne
+ \or
+ \expandafter\XINT@pow@AatleastTwo
+ \else
+ \expandafter\XINT@pow@AisZero
+ \fi
+ {#1}{#2}%
+}%
+\def\XINT@pow@AisOne #1#2{ 1}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@pow@AisZero #1#2%
+{%
+ \ifcase\XINT@Sgn {#1}
+ \xint@afterfi { 1}%
+ \or
+ \xint@afterfi { 0}%
+ \else
+ \xint@afterfi {\xintError:DivisionByZero\space 0}%
+ \fi
+}%
+\def\XINT@pow@AatleastTwo #1%
+{%
+ \ifcase\XINT@Sgn {#1}
+ \expandafter\XINT@pow@BisZero
+ \or
+ \expandafter\XINT@pow@checkBlength
+ \else
+ \expandafter\XINT@pow@BisNegative
+ \fi
+ {#1}%
+}%
+\def\XINT@pow@BisNegative #1#2{\xintError:FractionRoundedToZero\space 0}%
+\def\XINT@pow@BisZero #1#2{ 1}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% B = #1 > 0, A = #2 > 1
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@pow@checkBlength #1#2%
+{%
+ \ifnum\xintLen{#1} >9
+ \expandafter\XINT@pow@BtooBig
+ \else
+ \expandafter\XINT@pow@loop
+ \fi
+ {#1}{#2}\XINT@posprod
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+\def\XINT@pow@BtooBig #1\xint@UNDEF #2\xint@UNDEF
+ {\xintError:ExponentTooBig\space 0}%
+\def\XINT@pow@loop #1#2%
+{%
+ \ifnum #1 = 1
+ \expandafter\XINT@pow@loop@end
+ \else
+ \xint@afterfi{\expandafter\XINT@pow@loop@a
+ \expandafter{\the\numexpr 2*(#1/2)-#1\expandafter }%
+ % b mod 2
+ \expandafter{\the\numexpr #1-#1/2\expandafter }%
+ % [b/2]
+ \expandafter{\romannumeral0\xintsqr{#2}}}%
+ \fi
+ {{#2}}%
+}%
+\def\XINT@pow@loop@end {\romannumeral0\XINT@rord@main {}\relax }%
+\def\XINT@pow@loop@a #1%
+{%
+ \ifnum #1 = 1
+ \expandafter\XINT@pow@loop
+ \else
+ \expandafter\XINT@pow@loop@throwaway
+ \fi
+}%
+\def\XINT@pow@loop@throwaway #1#2#3%
+{%
+ \XINT@pow@loop {#1}{#2}%
+}%
+% \end{macrocode}
+% \subsection{\ch{xintDivision}, \ch{xintQuo}, \ch{xintRem}}
+% \begin{macrocode}
+\def\xintQuo {\romannumeral0\xintquo }%
+\def\xintRem {\romannumeral0\xintrem }%
+\def\xintquo {%
+ \expandafter
+ \xint@firstoftwo@andstop
+ \romannumeral0\xintdivision }%
+\def\xintrem {%
+ \expandafter
+ \xint@secondoftwo@andstop
+ \romannumeral0\xintdivision }%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = A, #2 = B. On calcule le quotient de A par B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintDivision {\romannumeral0\xintdivision }%
+\def\xintdivision #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@division
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@division #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@div@fork #2\Z #1\Z
+}%
+\def\XINT@Division #1#2{\romannumeral0\XINT@div@fork #2\Z #1\Z }%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1#2 = 2e input = diviseur = B
+% #3#4 = 1er input = divisé = A
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@div@BisZero
+ #3\dummy \XINT@div@AisZero
+ 0\dummy
+ {\xint@UDsignfork
+ #1\dummy \XINT@div@BisNegative % B < 0
+ #3\dummy \XINT@div@AisNegative % A < 0, B > 0
+ -\dummy \XINT@div@plusplus % B > 0, A > 0
+ \xint@UDforksign }%
+ \xint@UDforkzero
+ {#2}{#4}#1#3% #1#2=B, #3#4=A
+}%
+\def\XINT@div@BisZero #1#2#3#4%
+ {\xintError:DivisionByZero\space {0}{0}}%
+\def\XINT@div@AisZero #1#2#3#4{ {0}{0}}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% jusqu'à présent c'est facile.
+% minusplus signifie B < 0, A > 0
+% plusminus signifie B > 0, A < 0
+% Ici #3#1 correspond au diviseur B et #4#2 au divisé A
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@plusplus #1#2#3#4%
+{%
+ \XINT@div@prepare {#3#1}{#4#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% B = #3#1 < 0, A non nul positif ou négatif
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@BisNegative #1#2#3#4%
+{%
+ \expandafter\XINT@div@BisNegative@post
+ \romannumeral0\XINT@div@fork #1\Z #4#2\Z
+}%
+\def\XINT@div@BisNegative@post #1#2%
+{%
+ \expandafter\space\expandafter
+ {\romannumeral0\XINT@opp #1}{#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% B = #3#1 > 0, A =-#2< 0
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@AisNegative #1#2#3#4%
+{%
+ \expandafter\XINT@div@AisNegative@post
+ \romannumeral0\XINT@div@prepare {#3#1}{#2}{#3#1}%
+}%
+\def\XINT@div@AisNegative@post #1#2%
+{%
+ \ifcase\xintSgn {#2}
+ \expandafter \XINT@div@AisNegative@zerorem
+ \or
+ \expandafter \XINT@div@AisNegative@posrem
+ \fi
+ {#1}{#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% en #3 on a une copie de B (à l'endroit)
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@AisNegative@zerorem #1#2#3%
+{%
+ \expandafter\space\expandafter
+ {\romannumeral0\XINT@opp #1}{0}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = quotient, #2 = reste, #3 = diviseur initial (à l'endroit)
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@AisNegative@posrem #1%
+{%
+ \expandafter
+ \XINT@div@AisNegative@posrem@b
+ \expandafter
+ {\romannumeral0\xintopp {\XINT@Add{#1}{1}}}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% remplace Reste par B - Reste, après avoir remplacé Q par -(Q+1)
+% de sorte que la formule a = qb + r, 0<= r < |b| est valable
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@AisNegative@posrem@b #1#2#3%
+{%
+ \expandafter
+ \xint@exchangetwo@keepbraces@andstop
+ \expandafter
+ {\romannumeral0\XINT@sub {#3}{#2}}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% par la suite A et B sont > 0.
+% #1 = B. Pour le moment à l'endroit.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@prepare #1%
+{%
+ \expandafter
+ \XINT@div@prepareB@a
+ \expandafter
+ {\romannumeral0\XINT@length {#1}}{#1}% B > 0 ici
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Calcul du plus petit K = 4n >= longueur de B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@prepareB@a #1%
+{%
+ \expandafter\XINT@div@prepareB@b\expandafter
+ {\the\numexpr 4*((#1+1)/4)\relax}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = K
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@prepareB@b #1#2%
+{%
+ \expandafter\XINT@div@prepareB@c \expandafter
+ {\the\numexpr #1-#2\relax}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@prepareB@c #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@div@prepareB@di
+ \or \expandafter\XINT@div@prepareB@dii
+ \or \expandafter\XINT@div@prepareB@diii
+ \else \expandafter\XINT@div@prepareB@div
+ \fi
+}%
+\def\XINT@div@prepareB@di {\XINT@div@prepareB@e {}{0}}%
+\def\XINT@div@prepareB@dii {\XINT@div@prepareB@e {0}{1}}%
+\def\XINT@div@prepareB@diii {\XINT@div@prepareB@e {00}{2}}%
+\def\XINT@div@prepareB@div {\XINT@div@prepareB@e {000}{3}}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1 = zéros à rajouter à B, #2=c, #3=K, #4 = B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@prepareB@e #1#2#3#4%
+{%
+ \XINT@div@prepareB@f #4#1\Z {#3}{#2}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% x = #1#2#3#4 = 4 premiers chiffres de B. #1 est non nul.
+% Ensuite on renverse B pour calculs plus rapides par la suite.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@prepareB@f #1#2#3#4#5\Z
+{%
+ \expandafter
+ \XINT@div@prepareB@g
+ \expandafter
+ {\romannumeral0\XINT@rev {#1#2#3#4#5}}{#1#2#3#4}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #3= K, #4 = c, #5= {} ou {0} ou {00} ou {000}, #6 = A initial
+% #1 = B préparé et renversé, #2 = x = quatre premiers chiffres
+% On multiplie aussi A par 10^c.
+% B, x, K, c, {} ou {0} ou {00} ou {000}, A initial
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@prepareB@g #1#2#3#4#5#6%
+{%
+ \XINT@div@prepareA@a {#6#5}{#2}{#3}{#1}{#4}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A, x, K, B, c,
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@prepareA@a #1%
+{%
+ \expandafter
+ \XINT@div@prepareA@b
+ \expandafter
+ {\romannumeral0\XINT@length {#1}}{#1}% A >0 ici
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% L0, A, x, K, B, ...
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@prepareA@b #1%
+{%
+ \expandafter\XINT@div@prepareA@c\expandafter
+ {\the\numexpr 4*((#1+1)/4)\relax}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% L, L0, A, x, K, B,...
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@prepareA@c #1#2%
+{%
+ \expandafter\XINT@div@prepareA@d \expandafter
+ {\the\numexpr #1-#2\relax}{#1}%
+}%
+\def\XINT@div@prepareA@d #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@div@prepareA@di
+ \or \expandafter\XINT@div@prepareA@dii
+ \or \expandafter\XINT@div@prepareA@diii
+ \else \expandafter\XINT@div@prepareA@div
+ \fi
+}%
+\def\XINT@div@prepareA@di {\XINT@div@prepareA@e {}}%
+\def\XINT@div@prepareA@dii {\XINT@div@prepareA@e {0}}%
+\def\XINT@div@prepareA@diii {\XINT@div@prepareA@e {00}}%
+\def\XINT@div@prepareA@div {\XINT@div@prepareA@e {000}}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1#3 = A préparé, #2 = longueur de ce A préparé,
+%
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@prepareA@e #1#2#3%
+{%
+ \XINT@div@startswitch {#1#3}{#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A, L, x, K, B, ...
+% A, L, x, K, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@startswitch #1#2#3#4%
+{%
+ \ifnum #2 > #4
+ \expandafter\XINT@div@body@a
+ \else
+ \ifnum #2 = #4
+ \expandafter\expandafter\expandafter
+ \XINT@div@final@a
+ \else
+ \expandafter\expandafter\expandafter
+ \XINT@div@finished@a
+ \fi\fi {#1}{#4}{#3}{0000}{#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A, K, x, Q, L, B, c
+% ---- "Finished"
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@finished@a #1#2#3%
+{%
+ \expandafter
+ \XINT@div@finished@b
+ \expandafter
+ {\romannumeral0\XINT@cuz {#1}}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A, Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@finished@b #1#2#3#4#5%
+{%
+ \ifcase \XINT@Sgn {#1}
+ \xint@afterfi {\XINT@div@finished@c {0}}%
+ \or
+ \xint@afterfi {\expandafter\XINT@div@finished@c
+ \expandafter
+ {\romannumeral0\XINT@dsh@preparegobble {#1}{#5}}}%
+ \fi
+ {#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Reste Final, Q à renverser
+% #2 = Quotient, #1 = Reste.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@finished@c #1#2%
+{%
+ \expandafter
+ \space
+ \expandafter
+ {\romannumeral0\expandafter\xint@cleanupzeros@andstop
+ \romannumeral0\XINT@rev {#2}}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% ---- "Final"
+% A, K, x, Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@final@a #1%
+{%
+ \XINT@div@final@b #1\Z
+}%
+\def\XINT@div@final@b #1#2#3#4#5\Z
+{%
+ \xint@quatrezeros #1#2#3#4\xint@div@final@c0000%
+ \XINT@div@final@c {#1#2#3#4}{#1#2#3#4#5}%
+}%
+\def\xint@div@final@c0000\XINT@div@final@c #1%
+ {\XINT@div@finished@a }%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% a, A, K, x, Q, L, B ,c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@final@c #1#2#3#4%
+{%
+ \expandafter
+ \XINT@div@final@d
+ \expandafter
+ {\the\numexpr #1/#4\relax}{#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% q, A, Q, L, B à l'envers sur 4n, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@final@d #1#2#3#4#5%
+{%
+ \expandafter
+ \XINT@div@final@e
+ \expandafter
+ {\romannumeral0\xintsub {\xint@cleanupzeros@nospace #2}%
+ {\romannumeral0\XINT@mul@M {#1}#5\Z\Z\Z\Z }}%
+ {#1}{#2}{#3}{#4}{#5}%
+}%
+\def\XINT@div@final@e #1#2%
+{%
+ \ifnum\xintSgn{#1} < 0
+ \expandafter\XINT@div@final@d % en arri\`ere toute
+ \expandafter{\the\numexpr #2-1\expandafter
+ \expandafter\expandafter }%
+ \expandafter\xint@gobble@two
+ \else
+ \expandafter\XINT@div@final@f
+ \fi
+ {#1}{#2}%
+}%
+\def\XINT@div@final@f #1#2#3#4#5#6#7%
+{%
+ \ifcase \XINT@Sgn {#1}
+ \xint@afterfi {\XINT@div@final@end {0}}%
+ \or
+ \xint@afterfi {\expandafter\XINT@div@final@end
+ \expandafter
+ {\romannumeral0\XINT@dsh@preparegobble {#1}{#7}}}%
+ \fi
+ {\romannumeral0\xintadd {\XINT@Rev@andcleanupzeros{#4}}{#2}}%
+}%
+\def\XINT@div@final@end #1#2%
+{%
+ \expandafter\space\expandafter
+ {#2}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Boucle Principale
+% A, K, x, Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@a #1%
+{%
+ \XINT@div@body@b #1\Z
+}%
+\def\XINT@div@body@b #1#2#3#4#5#6#7#8#9\Z
+{%
+ \XINT@div@body@c
+ {#1#2#3#4#5#6#7#8#9}%
+ {#1#2#3#4#5#6#7#8}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A, a, K, x, Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@c #1#2#3%
+{%
+ \XINT@div@body@d {#3}{}#1\Z {#2}{#3}%
+}%
+\def\XINT@div@body@d #1#2#3#4#5#6%
+{%
+ \ifnum #1 > 0
+ \expandafter
+ \XINT@div@body@d
+ \expandafter
+ {\the\numexpr #1-4\expandafter }%
+ \else
+ \expandafter
+ \XINT@div@body@e
+ \fi
+ {#6#5#4#3#2}%
+}%
+\def\XINT@div@body@e #1#2\Z #3%
+{%
+ \XINT@div@body@f {#3}{#1}{#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% a, alpha, alpha', K, x, Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@f #1#2#3#4#5#6#7#8%
+{%
+ \expandafter\XINT@div@body@g
+ \expandafter
+ {\the\numexpr (#1+(#5+1)/2)/(#5+1)-1\relax }%
+ {#2}{#8}{#4}{#5}{#3}{#6}{#7}{#8}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% q1, alpha, B, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@g #1#2#3%
+{%
+ \expandafter
+ \XINT@div@body@h
+ \romannumeral0\XINT@div@sub@xpxp
+ {\romannumeral0\XINT@prod@mul@enter #3\W\X\Y\Z #1\W\X\Y\Z }%
+ {#2}\Z
+ {#3}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% alpha1 = alpha-q1 B, \Z, B, q1, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@h #1#2#3#4#5#6#7#8#9\Z
+{%
+ \ifnum #1#2#3#4>0
+ \xint@afterfi{\XINT@div@body@i {#1#2#3#4#5#6#7#8}}%
+ \else
+ \expandafter\XINT@div@body@k
+ \fi
+ {#1#2#3#4#5#6#7#8#9}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% a1, alpha1, B, q1, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@i #1#2#3#4#5#6%
+{%
+ \expandafter\XINT@div@body@j
+ \expandafter{\the\numexpr (#1+(#6+1)/2)/(#6+1)-1\relax }%
+ {#2}{#3}{#4}{#5}{#6}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% q2, alpha1, B, q1, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@j #1#2#3#4%
+{%
+ \expandafter
+ \XINT@div@body@l
+ \expandafter{\romannumeral0\XINT@div@sub@xpxp
+ {\romannumeral0\XINT@prod@mul@enter #3\W\X\Y\Z #1\W\X\Y\Z }%
+ {\XINT@Rev{#2}}}%
+ {#4+#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% alpha2, q1+q2, K, x, alpha', Q, L, B, c
+% attention body@j -> body@l
+% alpha1, B, q=q1, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@k #1#2%
+{%
+ \XINT@div@body@l {#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% alpha2, q= q1+q2, K, x, alpha', Q, L, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@l #1#2#3#4#5#6#7%
+{%
+ \expandafter
+ \XINT@div@body@m
+ \the\numexpr 100000000+#2\relax
+ {#6}{#3}{#7}{#1#5}{#4}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% chiffres de q, Q, K, L, A', x, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@m #1#2#3#4#5#6#7#8#9%
+{%
+ \ifnum #2#3#4#5>0
+ \xint@afterfi {\XINT@div@body@n {#9#8#7#6#5#4#3#2}}%
+ \else
+ \xint@afterfi {\XINT@div@body@n {#9#8#7#6}}%
+ \fi
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% q renversé, Q, K, L, A', x, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@n #1#2%
+{%
+ \expandafter\XINT@div@body@o\expandafter
+ {\romannumeral0\XINT@sum@A 0{}#1\W\X\Y\Z #2\W\X\Y\Z }%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% q+Q, K, L, A', x, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@o #1#2#3#4%
+{%
+ \XINT@div@body@p {#3}{#2}{}#4\Z {#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% L, K, {}, A'\Z, q+Q, x, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@p #1#2#3#4#5#6#7%
+{%
+ \ifnum #1 > #2
+ \xint@afterfi
+ {\ifnum #4#5#6#7 > 0
+ \expandafter\XINT@div@body@q
+ \else
+ \expandafter\XINT@div@body@repeatp
+ \fi }%
+ \else
+ \expandafter\XINT@div@gotofinal@a
+ \fi
+ {#1}{#2}{#3}#4#5#6#7%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% L, K, zeros, A' avec moins de zéros\Z, q+Q, x, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@repeatp #1#2#3#4#5#6#7%
+{%
+ \expandafter
+ \XINT@div@body@p
+ \expandafter
+ {\the\numexpr #1-4\relax}{#2}{0000#3}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% L -> L-4, zeros->zeros+0000, répéter jusqu'à ce que soit L=K
+% soit on ne trouve plus 0000
+% nouveau L, K, zeros, nouveau A=#4, Q+q, x, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@body@q #1#2#3#4\Z #5#6%
+{%
+ \XINT@div@body@a {#4}{#2}{#6}{#3#5}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A, K, x, Q, L, B, c --> iterate
+% ----
+% Boucle Principale achevée
+% ATTENTION IL FAUT AJOUTER 4 ZEROS DE MOINS QUE CEUX
+% QUI ONT ÉTÉ PRÉPARÉS DANS #3!!
+% L, K (L=K), zeros, A\Z, Q, x, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@gotofinal@a #1#2#3#4\Z %
+{%
+ \XINT@div@gotofinal@b #3\Z {#4}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% zeros\Z, A, L=K, Q, x, B, c
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@gotofinal@b 0000#1\Z #2#3#4#5%
+{%
+ \XINT@div@final@a {#2}{#3}{#5}{#1#4}{#3}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% A, L=K, x, Q avec zéros, L, B, c
+% La soustraction spéciale. Étendre deux fois les arguments
+% pour \XINT@div@sub@enter longueur multiple de 4 on sait que #2>#1,
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@div@sub@xpxp #1%
+{%
+ \expandafter
+ \XINT@div@sub@xpxp@
+ \expandafter
+ {#1}%
+}%
+\def\XINT@div@sub@xpxp@ #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@div@sub@xpxp@@
+ #2\W\X\Y\Z #1\W\X\Y\Z
+}%
+\def\XINT@div@sub@xpxp@@
+{%
+ \XINT@div@sub@A 1{}%
+}%
+\def\XINT@div@sub@A #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@div@sub@az
+ \W\XINT@div@sub@B #1{#3#4#5#6}{#2}%
+}%
+\def\XINT@div@sub@B #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{%
+ \xint@w
+ #5\xint@div@sub@bz
+ \W\XINT@div@sub@onestep #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z
+}%
+\def\XINT@div@sub@onestep #1#2#3#4#5#6%
+{\expandafter
+ \XINT@div@sub@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.%
+}%
+\def\XINT@div@sub@backtoA #1#2#3.#4%
+{%
+ \XINT@div@sub@A #2{#3#4}%
+}%
+\def\xint@div@sub@bz
+ \W\XINT@div@sub@onestep #1#2#3#4#5#6#7%
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@div@sub@C %
+ 0\dummy \XINT@div@sub@D % pas de retenue
+ \xint@UDforkzero
+ {#7}#2#3#4#5%
+}%
+\def\XINT@div@sub@D #1#2\W\X\Y\Z
+{%
+ \expandafter\space
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1%
+}%
+\def\XINT@div@sub@C #1#2#3#4#5%
+{%
+ \xint@w
+ #2\xint@div@sub@cz
+ \W\XINT@div@sub@AC@onestep {#5#4#3#2}{#1}%
+}%
+\def\XINT@div@sub@AC@onestep #1%
+{\expandafter
+ \XINT@div@sub@backtoC\the\numexpr 11#1-1\relax.%
+}%
+\def\XINT@div@sub@backtoC #1#2#3.#4%
+{%
+ \XINT@div@sub@AC@checkcarry #2{#3#4}% la retenue va \^etre examin\'ee
+}%
+\def\XINT@div@sub@AC@checkcarry #1%
+{%
+ \xint@one #1\xint@div@sub@AC@nocarry 1\XINT@div@sub@C
+}%
+\def\xint@div@sub@AC@nocarry 1\XINT@div@sub@C #1#2\W\X\Y\Z
+{%
+ \expandafter\space
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1%
+}%
+\def\xint@div@sub@cz\W\XINT@div@sub@AC@onestep #1#2{ #2}%
+\def\xint@div@sub@az\W\XINT@div@sub@B #1#2#3#4\Z { #3}%
+% \end{macrocode}
+% \begin{verbatim}
+%-----------------------------------------------------------------
+%-----------------------------------------------------------------
+% DECIMAL OPERATIONS: FIRST DIGIT, LASTDIGIT, ODDNESS,
+% MULTIPLICATION BY TEN, QUOTIENT BY TEN, QUOTIENT OR
+% MULTIPLICATION BY POWER OF TEN, SPLIT OPERATION.
+% \end{verbatim}
+% \vspace*{-2\baselineskip}
+% \subsection{\ch{xintFDg}}
+% \begin{verbatim}
+% FIRST DIGIT
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintFDg {\romannumeral0\xintfdg }%
+\def\xintfdg #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@fdg #1\W\Z
+}%
+\def\XINT@FDg #1{\romannumeral0\XINT@fdg #1\W\Z }%
+\def\XINT@fdg #1#2%
+{%
+ \xint@xpxp@andstop
+ \xint@UDzerominusfork
+ #1-\dummy {\expandafter 0}% zero
+ 0#1\dummy {\expandafter #2}% negative
+ 0-\dummy {\expandafter #1}% positive
+ \xint@UDforkminuszero
+ \xint@z
+}%
+% \end{macrocode}
+% \subsection{\ch{xintLDg}}
+% \begin{verbatim}
+% LAST DIGIT
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintLDg {\romannumeral0\xintldg }%
+\def\xintldg #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@ldg
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\XINT@LDg #1{\romannumeral0\XINT@ldg {#1}}%
+\def\XINT@ldg #1%
+{%
+ \expandafter
+ \XINT@ldg@
+ \romannumeral0\XINT@rev {#1}\Z
+}%
+\def\XINT@ldg@ #1%
+{%
+ \expandafter\space\expandafter #1\xint@z
+}%
+% \end{macrocode}
+% \subsection{\ch{xintOdd}}
+% \begin{verbatim}
+% ODDNESS
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintOdd {\romannumeral0\xintodd }%
+\def\xintodd #1%
+{%
+ \ifodd\xintLDg{#1}
+ \xint@afterfi{ 1}%
+ \else
+ \xint@afterfi{ 0}%
+ \fi
+}%
+\def\XINT@Odd #1%
+{\romannumeral0%
+ \ifodd\XINT@LDg{#1}
+ \xint@afterfi{ 1}%
+ \else
+ \xint@afterfi{ 0}%
+ \fi
+}%
+% \end{macrocode}
+% \subsection{\ch{xintDSL}}
+% \begin{verbatim}
+% DECIMAL SHIFT LEFT (=MULTIPLICATION PAR 10)
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintDSL {\romannumeral0\xintdsl }%
+\def\xintdsl #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@dsl #1\Z
+}%
+\def\XINT@DSL #1{\romannumeral0\XINT@dsl #1\Z }%
+\def\XINT@dsl #1%
+{%
+ \xint@zero #1\xint@dsl@zero 0\XINT@dsl@ #1%
+}%
+\def\xint@dsl@zero 0\XINT@dsl@ 0#1\Z { 0}%
+\def\XINT@dsl@ #1\Z { #10}%
+% \end{macrocode}
+% \subsection{\ch{xintDSR}}
+% \begin{verbatim}
+% DECIMAL SHIFT RIGHT (=DIVISION PAR 10)
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintDSR {\romannumeral0\xintdsr }%
+\def\xintdsr #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@dsr@a
+ \expandafter\expandafter\expandafter
+ {#1}\W\Z
+}%
+\def\XINT@DSR #1{\romannumeral0\XINT@dsr@a {#1}\W\Z }%
+\def\XINT@dsr@a
+{%
+ \expandafter
+ \XINT@dsr@b
+ \romannumeral0\XINT@rev
+}%
+\def\XINT@dsr@b #1#2#3\Z
+{%
+ \xint@w #2\xint@dsr@onedigit\W
+ \xint@minus #2\xint@dsr@onedigit-%
+ \expandafter
+ \XINT@dsr@removew
+ \romannumeral0\XINT@rev {#2#3}%
+}%
+\def\xint@dsr@onedigit #1\XINT@rev #2{ 0}%
+\def\XINT@dsr@removew #1\W { }%
+% \end{macrocode}
+% \subsection{\ch{xintDSH}}
+% \begin{verbatim}
+% DECIMAL SHIFTS
+% \xintDSH {x}{A}
+% si x <= 0, fait A -> A.10^(|x|)
+% si x > 0, et A >=0, fait A -> quo(A,10^(x))
+% si x > 0, et A < 0, fait A -> -quo(-A,10^(x))
+% (donc pour x > 0 c'est comme DSR itéré x fois)
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintDSH {\romannumeral0\xintdsh }%
+\def\xintdsh #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@dsh
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@dsh #1#2%
+{%
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter
+ \XINT@dsh@checkxsize
+ \expandafter\expandafter\expandafter
+ \xint@exchangetwo@keepbraces
+ \expandafter\expandafter\expandafter
+ {#2}{#1}%
+}%
+\def\XINT@DSH {\romannumeral0\XINT@dsh@checkxsize }%
+\def\XINT@dsh@checkxsize #1%
+{%
+ \ifnum\XINT@Len {#1} > 9
+ \expandafter\XINT@dsh@bigx
+ \else
+ \expandafter\XINT@dsh
+ \fi
+ {#1}%
+}%
+\def\XINT@dsh@bigx #1#2%
+{%
+ \ifcase\XINT@Sgn {#1}
+ \or \xint@afterfi { 0}%
+ \else \xint@afterfi
+ {%
+ \ifodd\XINT@Sgn {#2}
+ \xint@afterfi{\xintError:TooBigDecimalShift
+ \space0}%
+ \else \xint@afterfi { 0}%
+ \fi
+ }%
+ \fi
+}%
+\def\XINT@dsh #1#2{\XINT@dsh@checkAsign #2\Z {#1}}%
+\def\XINT@dsh@checkAsign #1%
+{%
+ \xint@UDzerominusfork
+ #1-\dummy \XINT@dsh@AisZero
+ 0#1\dummy \XINT@dsh@AisNeg
+ 0-\dummy {\XINT@dsh@directionfork #1}%
+ \xint@UDforkminuszero
+}%
+\def\XINT@dsh@AisZero #1\Z #2{ 0}%
+\def\XINT@dsh@AisNeg {\expandafter\XINT@dsh@neg@checkifreturnedzero
+ \romannumeral0\XINT@dsh@directionfork }%
+\def\XINT@dsh@neg@checkifreturnedzero #1%
+{%
+ \expandafter\space
+ \xint@UDzerofork
+ #1\dummy {0}%
+ 0\dummy {-#1}%
+ \xint@UDforkzero
+}%
+\def\XINT@dsh@directionfork #1\Z #2%
+{%
+ \XINT@dsh@checkxsign #2\Z {#1}%
+}%
+\def\XINT@dsh@checkxsign #1%
+{%
+ \xint@UDzerominusfork
+ #1-\dummy \XINT@dsh@donothing
+ 0#1\dummy \XINT@dsh@shiftleft
+ 0-\dummy {\XINT@dsh@shiftright #1}%
+ \xint@UDforkminuszero
+}%
+\def\XINT@dsh@donothing #1\Z #2{ #2}%
+\def\XINT@dsh@shiftright #1\Z #2%
+{%
+ \ifnum \XINT@Length {#2} > #1
+ \expandafter\XINT@dsh@preparegobble
+ \else
+ \expandafter\XINT@dsh@returnzero
+ \fi
+ {#2}{#1}%
+}%
+\def\XINT@dsh@returnzero #1#2{ 0}%
+\def\XINT@dsh@preparegobble #1%
+{%
+ \expandafter
+ \XINT@dsh@preparegobble@
+ \expandafter
+ {\romannumeral0\XINT@rev{#1}}%
+}%
+\def\XINT@dsh@preparegobble@ #1#2{\XINT@dsh@gobbleloop {#2}#1\Z }%
+\def\XINT@dsh@gobbleloop #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@dsh@endgobble
+ \or
+ \expandafter\XINT@dsh@gobble@one@andend
+ \or
+ \expandafter\XINT@dsh@gobble@two@andend
+ \or
+ \expandafter\XINT@dsh@gobble@three@andend
+ \or
+ \expandafter\XINT@dsh@gobble@four@andend
+ \or
+ \expandafter\XINT@dsh@gobble@five@andend
+ \or
+ \expandafter\XINT@dsh@gobble@six@andend
+ \or
+ \expandafter\XINT@dsh@gobble@seven@andend
+ \else
+ \expandafter \XINT@dsh@gobbleloop
+ \expandafter
+ {\the\numexpr
+ #1-8\expandafter\expandafter\expandafter }%
+ \expandafter
+ \xint@gobble@eight
+ \fi
+}%
+\def\XINT@dsh@gobble@one@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@one }%
+\def\XINT@dsh@gobble@two@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@two }%
+\def\XINT@dsh@gobble@three@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@three }%
+\def\XINT@dsh@gobble@four@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@four }%
+\def\XINT@dsh@gobble@five@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@five }%
+\def\XINT@dsh@gobble@six@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@six }%
+\def\XINT@dsh@gobble@seven@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@seven }%
+\def\XINT@dsh@endgobble #1\Z
+{%
+ \XINT@rev{#1}%
+}%
+\def\XINT@dsh@shiftleft #1\Z
+{%
+ \XINT@dsh@zeroloop {#1}\Z
+}%
+\def\XINT@dsh@zeroloop #1%
+{%
+ \ifcase #1
+ \expandafter \XINT@dsh@exit
+ \or
+ \expandafter \XINT@dsh@exiti
+ \or
+ \expandafter \XINT@dsh@exitii
+ \or
+ \expandafter \XINT@dsh@exitiii
+ \or
+ \expandafter \XINT@dsh@exitiv
+ \or
+ \expandafter \XINT@dsh@exitv
+ \or
+ \expandafter \XINT@dsh@exitvi
+ \or
+ \expandafter \XINT@dsh@exitvii
+ \else
+ \expandafter \XINT@dsh@zeroloop
+ \expandafter
+ {\the\numexpr
+ #1-8\expandafter\expandafter\expandafter }%
+ \expandafter
+ \XINT@dsh@addeightzeros
+ \fi
+}%
+\def\XINT@dsh@addeightzeros {00000000}%
+\def\XINT@dsh@exit #1\Z
+ {\XINT@dsh@addzeros {#1}}%
+\def\XINT@dsh@exiti #1\Z
+ {\XINT@dsh@addzeros {0#1}}%
+\def\XINT@dsh@exitii #1\Z
+ {\XINT@dsh@addzeros {00#1}}%
+\def\XINT@dsh@exitiii #1\Z
+ {\XINT@dsh@addzeros {000#1}}%
+\def\XINT@dsh@exitiv #1\Z
+ {\XINT@dsh@addzeros {0000#1}}%
+\def\XINT@dsh@exitv #1\Z
+ {\XINT@dsh@addzeros {00000#1}}%
+\def\XINT@dsh@exitvi #1\Z
+ {\XINT@dsh@addzeros {000000#1}}%
+\def\XINT@dsh@exitvii #1\Z
+ {\XINT@dsh@addzeros {0000000#1}}%
+\def\XINT@dsh@addzeros #1#2{ #2#1}%
+% \end{macrocode}
+% \subsection{\ch{xintDecSplit}, \ch{xintDecSplitL}, \ch{xintDecSplitR}}
+% \begin{verbatim}
+% DECIMAL SPLIT
+% Elle commence par remplacer A par |A|
+% si x = 0 elle renvoie {A}{0}
+% si x > 0, elle fait A -> [A/10^x], R est le reste SANS leading zeros.
+% et si x = ou > longueur de A ça donne {0}{A}
+% si x < 0, on part de la gauche. On découpe en deux. si |x| = ou >
+% longueur de A tout A est mis dans Q et R est **vide** (pas 0 !!)
+% R PEUT AVOIR DES LEADING ZEROS DANS CE CAS x <0.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintDecSplitL {\romannumeral0\xintdecsplitl }%
+\def\xintDecSplitR {\romannumeral0\xintdecsplitr }%
+\def\xintdecsplitl
+{%
+ \expandafter
+ \xint@firstoftwo@andstop
+ \romannumeral0\xintdecsplit
+}%
+\def\xintdecsplitr
+{%
+ \expandafter
+ \xint@secondoftwo@andstop
+ \romannumeral0\xintdecsplit
+}%
+\def\xintDecSplit {\romannumeral0\xintdecsplit }%
+\def\xintdecsplit #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@split
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% ON REMPLACE A PAR |A| !!
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xint@split #1#2%
+{%
+ \expandafter
+ \XINT@split@checkifAzero
+ \expandafter
+ {\romannumeral0\xintabs {#2}}{#1}% fait expansion de A
+}%
+\def\XINT@split@checkifAzero #1#2%
+{%
+ \ifcase \XINT@Sgn {#1}
+ \expandafter\XINT@split@AisZero
+ \fi
+ \XINT@split@checkxsize {#2}{#1}%
+}%
+\def\XINT@split@AisZero\XINT@split@checkxsize #1#2{ {0}{0}}%
+\def\XINT@split@checkxsize #1%
+{%
+ \ifnum\XINT@Len {#1} > 9
+ \expandafter\XINT@split@bigx
+ \else
+ \expandafter\XINT@split@xfork
+ \fi
+ #1\Z
+}%
+\def\XINT@split@bigx #1\Z #2%
+{%
+ \ifcase\XINT@Sgn {#1}
+ \or \xint@afterfi { {0}{#2}}%
+ \else
+ \xint@afterfi
+ {\expandafter\xintError:TooBigDecimalSplit
+ \space{0}{0}}%
+ \fi
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% si x > 0 division par 10^x
+% si x < 0 division par 10^{longueur(A)-|x|}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@split@xfork #1%
+{%
+ \xint@UDzerominusfork
+ #1-\dummy \XINT@split@donothing
+ 0#1\dummy \XINT@split@fromleft
+ 0-\dummy {\XINT@split@splitright #1}%
+ \xint@UDforkminuszero
+}%
+\def\XINT@split@donothing #1\Z #2{ {#2}{0}}%
+\def\XINT@split@fromleft #1\Z #2%
+{%
+ \XINT@split@fromleft@loop {#1}{}#2\W\W\W\W\W\W\W\W\Z %
+}%
+\def\XINT@split@fromleft@loop #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@split@fromleft@endsplit
+ \or
+ \expandafter\XINT@split@fromleft@one@andend
+ \or
+ \expandafter\XINT@split@fromleft@two@andend
+ \or
+ \expandafter\XINT@split@fromleft@three@andend
+ \or
+ \expandafter\XINT@split@fromleft@four@andend
+ \or
+ \expandafter\XINT@split@fromleft@five@andend
+ \or
+ \expandafter\XINT@split@fromleft@six@andend
+ \or
+ \expandafter\XINT@split@fromleft@seven@andend
+ \else
+ \expandafter \XINT@split@fromleft@loop@perhaps
+ \expandafter
+ {\the\numexpr
+ #1-8\expandafter\expandafter\expandafter }%
+ \expandafter
+ \XINT@split@fromleft@eight
+ \fi
+}%
+\def\XINT@split@fromleft@endsplit #1#2\W #3\Z
+ { {#1}{#2}}%
+\def\XINT@split@fromleft@eight #1#2#3#4#5#6#7#8#9%
+{%
+ #9{#1#2#3#4#5#6#7#8#9}%
+}%
+\def\XINT@split@fromleft@loop@perhaps #1#2%
+{%
+ \xint@w #2\XINT@split@fromleft@toofar\W \XINT@split@fromleft@loop
+ {#1}%
+}%
+\def\XINT@split@fromleft@toofar\W \XINT@split@fromleft@loop #1#2#3\Z
+{%
+ \XINT@split@fromleft@toofar@b #2\Z
+}%
+\def\XINT@split@fromleft@toofar@b #1\W #2\Z
+{%
+ \space {#1}{}%
+}%
+\def\XINT@split@fromleft@one@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@one }%
+\def\XINT@split@fromleft@one #1#2{#2{#1#2}}%
+\def\XINT@split@fromleft@two@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@two }%
+\def\XINT@split@fromleft@two #1#2#3{#3{#1#2#3}}%
+\def\XINT@split@fromleft@three@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@three }%
+\def\XINT@split@fromleft@three #1#2#3#4{#4{#1#2#3#4}}%
+\def\XINT@split@fromleft@four@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@four }%
+\def\XINT@split@fromleft@four #1#2#3#4#5{#5{#1#2#3#4#5}}%
+\def\XINT@split@fromleft@five@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@five }%
+\def\XINT@split@fromleft@five #1#2#3#4#5#6{#6{#1#2#3#4#5#6}}%
+\def\XINT@split@fromleft@six@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@six }%
+\def\XINT@split@fromleft@six #1#2#3#4#5#6#7{#7{#1#2#3#4#5#6#7}}%
+\def\XINT@split@fromleft@seven@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@seven }%
+\def\XINT@split@fromleft@seven #1#2#3#4#5#6#7#8{#8{#1#2#3#4#5#6#7#8}}%
+\def\XINT@split@fromleft@checkiftoofar #1#2#3\W #4\Z
+{%
+ \xint@w #1\XINT@split@fromleft@wenttoofar\W
+ \space {#2}{#3}%
+}%
+\def\XINT@split@fromleft@wenttoofar\W\space #1%
+{%
+ \XINT@split@fromleft@wenttoofar@b #1\Z
+}%
+\def\XINT@split@fromleft@wenttoofar@b #1\W #2\Z
+{%
+ \space {#1}%
+}%
+\def\XINT@split@splitright #1\Z #2%
+{%
+ \ifnum \XINT@Length {#2} > #1
+ \expandafter\XINT@split@pre
+ \else
+ \expandafter\XINT@split@quotientiszero
+ \fi
+ {#2}{#1}%
+}%
+\def\XINT@split@quotientiszero #1#2{ {0}{#1}}%
+\def\XINT@split@pre #1%
+{%
+ \expandafter
+ \XINT@split@@pre
+ \expandafter
+ {\romannumeral0\XINT@rev{#1}}%
+}%
+\def\XINT@split@@pre #1#2%
+{%
+ \XINT@split@loop {#2}{}#1\Z
+}%
+\def\XINT@split@loop #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@split@endsplit
+ \or
+ \expandafter\XINT@split@one@andend
+ \or
+ \expandafter\XINT@split@two@andend
+ \or
+ \expandafter\XINT@split@three@andend
+ \or
+ \expandafter\XINT@split@four@andend
+ \or
+ \expandafter\XINT@split@five@andend
+ \or
+ \expandafter\XINT@split@six@andend
+ \or
+ \expandafter\XINT@split@seven@andend
+ \else
+ \expandafter \XINT@split@loop
+ \expandafter
+ {\the\numexpr
+ #1-8\expandafter\expandafter\expandafter }%
+ \expandafter
+ \XINT@split@eight
+ \fi
+}%
+\def\XINT@split@eight #1#2#3#4#5#6#7#8#9{{#1#2#3#4#5#6#7#8#9}}%
+\def\XINT@split@one@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@one }%
+\def\XINT@split@one #1#2{{#1#2000}}%
+\def\XINT@split@two@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@two }%
+\def\XINT@split@two #1#2#3{{#1#2#300}}%
+\def\XINT@split@three@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@three }%
+\def\XINT@split@three #1#2#3#4{{#1#2#3#40}}%
+\def\XINT@split@four@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@four }%
+\def\XINT@split@four #1#2#3#4#5{{#1#2#3#4#5}}%
+\def\XINT@split@five@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@five }%
+\def\XINT@split@five #1#2#3#4#5#6{{#1#2#3#4#5#6000}}%
+\def\XINT@split@six@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@six }%
+\def\XINT@split@six #1#2#3#4#5#6#7{{#1#2#3#4#5#6#700}}%
+\def\XINT@split@seven@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@seven }%
+\def\XINT@split@seven #1#2#3#4#5#6#7#8{{#1#2#3#4#5#6#7#80}}%
+\def\XINT@split@endsplit #1#2\Z
+{%
+ \expandafter\expandafter\expandafter\XINT@split@endsplit@
+ \expandafter\expandafter\expandafter
+ {\romannumeral0\XINT@rev
+ {\Z\W\W\W\W\W\W\W #1\XINT@cuz@loop0\romannumeral}}%
+ {\romannumeral0\XINT@rev{#2}}%
+}%
+\def\XINT@split@endsplit@ #1#2%
+{%
+ \expandafter\space\expandafter {#2}{#1}%
+}%
+\XINT@restorecatcodes@endinput%
+% \end{macrocode}
+%</package>
+%<*gcd>
+% \section{Package \xintgcdname implementation}
+%
+% The commenting is currently (\docdate) very sparse.
+%
+% \subsection{Catcodes, \eTeX{} detection, reload detection}
+%
+% The code for reload detection is copied from \textsc{Heiko
+% Oberdiek}'s packages, and adapted here to check for previous
+% loading of the master \xintname package.
+%
+% The method for catcodes is slightly different, but still
+% directly inspired by these packages.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \def\space { }%
+ \let\z\endgroup
+ \expandafter\let\expandafter\x\csname ver@xintgcd.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xint.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xintgcd}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading of xintgcd.sty
+ \ifx\w\relax % but xint.sty not yet loaded.
+ \y{xintgcd}{Package xint is required}%
+ \y{xintgcd}{Will try \string\input\space xint.sty}%
+ \def\z{\endgroup\input xint.sty\relax}%
+ \fi
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \ifx\w\relax % xint.sty not yet loaded.
+ \y{xintgcd}{Package xint is required}%
+ \y{xintgcd}{Will try \string\RequirePackage{xint}}%
+ \def\z{\endgroup\RequirePackage{xint}}%
+ \fi
+ \else
+ \y{xintgcd}{I was already loaded, aborting input}%
+ \aftergroup\endinput
+ \fi
+ \fi
+ \fi
+\z%
+% \end{macrocode}
+% \subsection{Validation of \xintname loading}
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \def\empty {}%
+ \expandafter\let\expandafter\w\csname ver@xint.sty\endcsname
+ \ifx\w\relax % Plain TeX, user gave a file name at the prompt
+ \y{xintgcd}{Loading of package xint failed, aborting input}%
+ \aftergroup\endinput
+ \fi
+ \ifx\w\empty % LaTeX, user gave a file name at the prompt
+ \y{xintgcd}{Loading of package xint failed, aborting input}%
+ \aftergroup\endinput
+ \fi
+\endgroup%
+% \end{macrocode}
+% \subsection{Catcodes}
+%
+% Perhaps catcodes have changed after the loading of \xintname
+% and prior to the current loading of \xintgcdname, so we can not employ
+% the |\XINT@restorecatcodes@endinput| in this style file. But
+% there is no problem using |\XINT@setcatcodes|.
+%
+% \begin{macrocode}
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \def\x
+ {%
+ \endgroup
+ \edef\XINT@gcd@restorecatcodes@endinput
+ {%
+ \catcode36=\the\catcode36 % $
+ \catcode47=\the\catcode47 % /
+ \catcode41=\the\catcode41 % )
+ \catcode40=\the\catcode40 % (
+ \catcode42=\the\catcode42 % *
+ \catcode43=\the\catcode43 % +
+ \catcode62=\the\catcode62 % >
+ \catcode60=\the\catcode60 % <
+ \catcode58=\the\catcode58 % :
+ \catcode46=\the\catcode46 % .
+ \catcode45=\the\catcode45 % -
+ \catcode44=\the\catcode44 % ,
+ \catcode35=\the\catcode35 % #
+ \catcode64=\the\catcode64 % @
+ \catcode125=\the\catcode125 % }
+ \catcode123=\the\catcode123 % {
+ \endlinechar=\the\endlinechar
+ \catcode13=\the\catcode13 % ^^M
+ \catcode32=\the\catcode32 %
+ \catcode61=\the\catcode61 % =
+ \noexpand\endinput
+ }%
+ \XINT@setcatcodes
+ \catcode36=3 % $
+ }%
+\x
+% \end{macrocode}
+% \subsection{Package identification}
+% \begin{macrocode}
+\begingroup
+ \catcode91=12 % [
+ \catcode93=12 % ]
+ \catcode58=12 % :
+ \expandafter\ifx\csname ProvidesPackage\endcsname\relax
+ \def\x#1#2#3[#4]{\endgroup
+ \immediate\write-1{Package: #3 #4}%
+ \xdef#1{#4}%
+ }%
+ \else
+ \def\x#1#2[#3]{\endgroup
+ #2[{#3}]%
+ \ifx#1\@undefined
+ \xdef#1{#3}%
+ \fi
+ \ifx#1\relax
+ \xdef#1{#3}%
+ \fi
+ }%
+ \fi
+\expandafter\x\csname ver@xintgcd.sty\endcsname
+\ProvidesPackage{xintgcd}%
+ [2013/03/28 v1.0 Euclide algorithm with xint package (jfB)]%
+% \end{macrocode}
+% \subsection{\ch{xintGCD}}
+% \begin{macrocode}
+\def\xintGCD {\romannumeral0\xintgcd }%
+\def\xintgcd #1%
+{%
+ \expandafter
+ \XINT@gcd
+ \expandafter
+ {\romannumeral0\xintabs {#1}}%
+}%
+\def\XINT@gcd #1#2%
+{%
+ \expandafter
+ \XINT@gcd@fork
+ \romannumeral0\xintabs {#2}\Z #1\Z
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Ici #3#4=A, #1#2=B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@gcd@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@gcd@BisZero
+ #3\dummy \XINT@gcd@AisZero
+ 0\dummy \XINT@gcd@loop
+ \xint@UDforkzero
+ {#1#2}{#3#4}%
+}%
+\def\XINT@gcd@AisZero #1#2{ #1}%
+\def\XINT@gcd@BisZero #1#2{ #2}%
+\def\XINT@gcd@CheckRem #1#2\Z
+{%
+ \xint@zero #1\xint@gcd@end0\XINT@gcd@loop {#1#2}%
+}%
+\def\xint@gcd@end0\XINT@gcd@loop #1#2{ #2}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #1=B, #2=A
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@gcd@loop #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@gcd@CheckRem
+ \expandafter\xint@secondoftwo
+ \romannumeral0\XINT@div@prepare {#1}{#2}\Z
+ {#1}%
+}%
+% \end{macrocode}
+% \subsection{\ch{xintBezout}}
+% \begin{macrocode}
+\def\xintBezout {\romannumeral0\xintbezout }%
+\def\xintbezout #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@bezout
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@bezout #1#2%
+{\expandafter\expandafter\expandafter
+ \XINT@bezout@fork #2\Z #1\Z
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #3#4 = A, #1#2=B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerosfork
+ #1#3\dummy \XINT@bezout@botharezero
+ #10\dummy \XINT@bezout@secondiszero
+ #30\dummy \XINT@bezout@firstiszero
+ 00\dummy
+ {\xint@UDsignsfork
+ #1#3\dummy \XINT@bezout@minusminus % A < 0, B < 0
+ #1-\dummy \XINT@bezout@minusplus % A > 0, B < 0
+ #3-\dummy \XINT@bezout@plusminus % A < 0, B > 0
+ --\dummy \XINT@bezout@plusplus % A > 0, B > 0
+ \xint@UDforksigns }%
+ \xint@UDforkzeros
+ {#2}{#4}#1#3{#3#4}{#1#2}% #1#2=B, #3#4=A
+}%
+\def\XINT@bezout@botharezero #1#2#3#4#5#6%
+{%
+ \xintError:NoBezoutForZeros
+ \space {0}{0}{0}{0}{0}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% attention première entrée doit être ici (-1)^n donc 1
+% #4#2=0 = A, B = #3#1
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@firstiszero #1#2#3#4#5#6%
+{%
+ \xint@UDsignfork
+ #3\dummy { {0}{#3#1}{0}{1}{#1}}%
+ -\dummy { {0}{#3#1}{0}{-1}{#1}}%
+ \xint@UDforksign
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #4#2= A, B = #3#1 = 0
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@secondiszero #1#2#3#4#5#6%
+{%
+ \xint@UDsignfork
+ #4\dummy{ {#4#2}{0}{-1}{0}{#2}}%
+ -\dummy{ {#4#2}{0}{1}{0}{#2}}%
+ \xint@UDforksign
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% #4#2= A < 0, #3#1 = B < 0
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@minusminus #1#2#3#4%
+{%
+ \expandafter\XINT@bezout@mm@post
+ \romannumeral0\XINT@bezout@loop@a 1{#1}{#2}1001%
+}%
+\def\XINT@bezout@mm@post #1#2%
+{%
+ \expandafter
+ \XINT@bezout@mm@postb
+ \expandafter
+ {\romannumeral0\xintopp{#2}}{\romannumeral0\xintopp{#1}}%
+}%
+\def\XINT@bezout@mm@postb #1#2%
+{%
+ \expandafter
+ \XINT@bezout@mm@postc
+ \expandafter {#2}{#1}%
+}%
+\def\XINT@bezout@mm@postc #1#2#3#4#5%
+{%
+ \space {#4}{#5}{#1}{#2}{#3}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% minusplus #4#2= A > 0, B < 0
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@minusplus #1#2#3#4%
+{%
+ \expandafter\XINT@bezout@mp@post
+ \romannumeral0\XINT@bezout@loop@a 1{#1}{#4#2}1001%
+}%
+\def\XINT@bezout@mp@post #1#2%
+{%
+ \expandafter
+ \XINT@bezout@mp@postb
+ \expandafter
+ {\romannumeral0\xintopp {#2}}{#1}%
+}%
+\def\XINT@bezout@mp@postb #1#2#3#4#5%
+{%
+ \space {#4}{#5}{#2}{#1}{#3}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% plusminus A < 0, B > 0
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@plusminus #1#2#3#4%
+{%
+ \expandafter\XINT@bezout@pm@post
+ \romannumeral0\XINT@bezout@loop@a 1{#3#1}{#2}1001%
+}%
+\def\XINT@bezout@pm@post #1%
+{%
+ \expandafter
+ \XINT@bezout@pm@postb
+ \expandafter
+ {\romannumeral0\xintopp{#1}}%
+}%
+\def\XINT@bezout@pm@postb #1#2#3#4#5%
+{%
+ \space {#4}{#5}{#1}{#2}{#3}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% plusplus
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@plusplus #1#2#3#4%
+{%
+ \expandafter\XINT@bezout@pp@post
+ \romannumeral0\XINT@bezout@loop@a 1{#3#1}{#4#2}1001%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% la parité (-1)^N est en #1, et on la jette ici.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@pp@post #1#2#3#4#5%
+{%
+ \space {#4}{#5}{#1}{#2}{#3}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% n = 0: 1BAalpha(0)beta(0)alpha(-1)beta(-1)
+% n général:
+% {(-1)^n}{r(n-1)}{r(n-2)}{alpha(n-1)}{beta(n-1)}{alpha(n-2)}{beta(n-2)}
+% #2 = B, #3 = A
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@loop@a #1#2#3%
+{%
+ \expandafter\XINT@bezout@loop@b
+ \expandafter{\the\numexpr -#1\expandafter }%
+ \romannumeral0\XINT@div@prepare {#2}{#3}{#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Le q(n) a ici une existence éphémère, dans le version Bezout Algorithm
+% il faudra le conserver. On voudra à la fin
+% {{q(n)}{r(n)}{alpha(n)}{beta(n)}}
+% De plus ce n'est plus (-1)^n que l'on veut mais n. (ou dans un autre ordre)
+% {-(-1)^n}{q(n)}{r(n)}{r(n-1)}{alpha(n-1)}{beta(n-1)}{alpha(n-2)}{beta(n-2)}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@loop@b #1#2#3#4#5#6#7#8%
+{%
+ \expandafter
+ \XINT@bezout@loop@c
+ \expandafter
+ {\romannumeral0\xintadd{\XINT@Mul{#5}{#2}}{#7}}%
+ {\romannumeral0\xintadd{\XINT@Mul{#6}{#2}}{#8}}%
+ {#1}{#3}{#4}{#5}{#6}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {alpha(n)}{->beta(n)}{-(-1)^n}{r(n)}{r(n-1)}{alpha(n-1)}{beta(n-1)}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@loop@c #1#2%
+{%
+ \expandafter
+ \XINT@bezout@loop@d
+ \expandafter
+ {#2}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {beta(n)}{alpha(n)}{(-1)^(n+1)}{r(n)}{r(n-1)}{alpha(n-1)}{beta(n-1)}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@loop@d #1#2#3#4#5%
+{%
+ \XINT@bezout@loop@e #4\Z {#3}{#5}{#2}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% r(n)\Z {(-1)^(n+1)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@loop@e #1#2\Z
+{%
+ \xint@zero #1\xint@bezout@loop@exit0\XINT@bezout@loop@f
+ {#1#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {r(n)}{(-1)^(n+1)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezout@loop@f #1#2%
+{%
+ \XINT@bezout@loop@a {#2}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {(-1)^(n+1)}{r(n)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}
+% et itération
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xint@bezout@loop@exit0\XINT@bezout@loop@f #1#2%
+{%
+ \ifcase #2
+ \or \expandafter\XINT@bezout@exiteven
+ \else\expandafter\XINT@bezout@exitodd
+ \fi
+}%
+\def\XINT@bezout@exiteven #1#2#3#4#5%
+{%
+ \space {#5}{#4}{#1}%
+}%
+\def\XINT@bezout@exitodd #1#2#3#4#5%
+{%
+ \space {-#5}{-#4}{#1}%
+}%
+% \end{macrocode}
+% \subsection{\ch{xintEuclideAlgorithm}}
+% \begin{verbatim}
+% Pour Euclide:
+% {N}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}
+% u<2n> = u<2n+3>u<2n+2> + u<2n+4> à la n ième étape
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintEuclideAlgorithm {\romannumeral0\xinteuclidealgorithm }%
+\def\xinteuclidealgorithm #1%
+{%
+ \expandafter
+ \XINT@euc
+ \expandafter
+ {\romannumeral0\xintabs {#1}}%
+}%
+\def\XINT@euc #1#2%
+{%
+ \expandafter
+ \XINT@euc@fork
+ \romannumeral0\xintabs {#2}\Z #1\Z
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Ici #3#4=A, #1#2=B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@euc@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@euc@BisZero
+ #3\dummy \XINT@euc@AisZero
+ 0\dummy \XINT@euc@a
+ \xint@UDforkzero
+ {0}{#1#2}{#3#4}{{#3#4}{#1#2}}{}\Z
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Le {} pour protéger {{A}{B}} si on s'arrête après une étape (B divise A)
+% On va renvoyer:
+% {N}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@euc@AisZero #1#2#3#4#5#6{ {1}{0}{#2}{#2}{0}{0}}%
+\def\XINT@euc@BisZero #1#2#3#4#5#6{ {1}{0}{#3}{#3}{0}{0}}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {n}{rn}{an}{{qn}{rn}}...{{A}{B}}{}\Z
+% an = r(n-1)
+% Pour n=0 on a juste {0}{B}{A}{{A}{B}}{}\Z
+% \XINT@div@prepare {u}{v} divise v par u
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@euc@a #1#2#3%
+{%
+ \expandafter
+ \XINT@euc@b
+ \expandafter {\the\numexpr #1+1\expandafter }%
+ \romannumeral0\XINT@div@prepare {#2}{#3}{#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {n+1}{q(n+1)}{r(n+1)}{rn}{{qn}{rn}}...
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@euc@b #1#2#3#4%
+{%
+ \XINT@euc@c #3\Z {#1}{#3}{#4}{{#2}{#3}}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% r(n+1)\Z {n+1}{r(n+1)}{r(n)}{{q(n+1)}{r(n+1)}}{{qn}{rn}}...
+% Test si r(n+1) est nul.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@euc@c #1#2\Z
+{%
+ \xint@zero #1\xint@euc@end0\XINT@euc@a
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {n+1}{r(n+1)}{r(n)}{{q(n+1)}{r(n+1)}}...{}\Z
+% Ici r(n+1) = 0. On arrête on se prépare à inverser.
+% {n+1}{0}{r(n)}{{q(n+1)}{r(n+1)}}.....{{q1}{r1}}{{A}{B}}{}\Z
+% On veut renvoyer:
+% {N=n+1}{A}{D=r(n)}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xint@euc@end0\XINT@euc@a #1#2#3#4\Z%
+{%
+ \expandafter\xint@euc@end@
+ \romannumeral0%
+ \XINT@rord@main {}#4{{#1}{#3}}%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+\def\xint@euc@end@ #1#2#3%
+{%
+ \space {#1}{#3}{#2}%
+}%
+% \end{macrocode}
+% \subsection{\ch{xintBezoutAlgorithm}}
+% \begin{verbatim}
+% Pour Bezout: objectif, renvoyer
+% alpha0=1, beta0=0
+% alpha(-1)=0, beta(-1)=1
+% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}
+% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=B/D}{betaN=B/D}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintBezoutAlgorithm {\romannumeral0\xintbezoutalgorithm }%
+\def\xintbezoutalgorithm #1%
+{%
+ \expandafter
+ \XINT@bezalg
+ \expandafter
+ {\romannumeral0\xintabs {#1}}%
+}%
+\def\XINT@bezalg #1#2%
+{%
+ \expandafter
+ \XINT@bezalg@fork
+ \romannumeral0\xintabs {#2}\Z #1\Z
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Ici #3#4=A, #1#2=B
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezalg@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@bezalg@BisZero
+ #3\dummy \XINT@bezalg@AisZero
+ 0\dummy \XINT@bezalg@a
+ \xint@UDforkzero
+ 0{#1#2}{#3#4}1001{{#3#4}{#1#2}}{}\Z
+}%
+\def\XINT@bezalg@AisZero #1#2#3\Z{ {1}{0}{0}{1}{#2}{#2}{1}{0}{0}{0}{0}{1}}%
+\def\XINT@bezalg@BisZero #1#2#3#4\Z{ {1}{0}{0}{1}{#3}{#3}{1}{0}{0}{0}{0}{1}}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% pour préparer l'étape n+1 il faut
+% {n}{r(n)}{r(n-1)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}
+% {{q(n)}{r(n)}{alpha(n)}{beta(n)}}...
+% division de #3 par #2
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezalg@a #1#2#3%
+{%
+ \expandafter
+ \XINT@bezalg@b
+ \expandafter {\the\numexpr #1+1\expandafter }%
+ \romannumeral0\XINT@div@prepare {#2}{#3}{#2}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {n+1}{q(n+1)}{r(n+1)}{r(n)}{alpha(n)}{beta(n)}{alpha(n-1)}{beta(n-1)}...
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezalg@b #1#2#3#4#5#6#7#8%
+{%
+ \expandafter\XINT@bezalg@c\expandafter
+ {\romannumeral0\xintadd {\xintMul {#6}{#2}}{#8}}%
+ {\romannumeral0\xintadd {\xintMul {#5}{#2}}{#7}}%
+ {#1}{#2}{#3}{#4}{#5}{#6}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {beta(n+1)}{alpha(n+1)}{n+1}{q(n+1)}{r(n+1)}{r(n)}{alpha(n)}{beta(n}}%
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezalg@c #1#2#3#4#5#6%
+{%
+ \expandafter\XINT@bezalg@d\expandafter
+ {#2}{#3}{#4}{#5}{#6}{#1}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {alpha(n+1)}{n+1}{q(n+1)}{r(n+1)}{r(n)}{beta(n+1)}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezalg@d #1#2#3#4#5#6#7#8%
+{%
+ \XINT@bezalg@e #4\Z {#2}{#4}{#5}{#1}{#6}{#7}{#8}{{#3}{#4}{#1}{#6}}%
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% r(n+1)\Z {n+1}{r(n+1)}{r(n)}{alpha(n+1)}{beta(n+1)}
+% {alpha(n)}{beta(n)}{q,r,alpha,beta(n+1)}
+% Test si r(n+1) est nul.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\XINT@bezalg@e #1#2\Z
+{%
+ \xint@zero #1\xint@bezalg@end0\XINT@bezalg@a
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% Ici r(n+1) = 0. On arrête on se prépare à inverser.
+% {n+1}{r(n+1)}{r(n)}{alpha(n+1)}{beta(n+1)}%
+% {alpha(n)}{beta(n)}%
+% {q,r,alpha,beta(n+1)}...{{A}{B}}{}\Z
+% On veut renvoyer
+% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}
+% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=B/D}{betaN=B/D}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xint@bezalg@end0\XINT@bezalg@a #1#2#3#4#5#6#7#8\Z
+{%
+ \expandafter\xint@bezalg@end@
+ \romannumeral0%
+ \XINT@rord@main {}#8{{#1}{#3}}%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+% \end{macrocode}
+% \vspace*{-.5\baselineskip}
+% \begin{verbatim}
+% {N}{D}{A}{B}{q1}{r1}{alpha1=q1}{beta1=1}{q2}{r2}{alpha2}{beta2}
+% ....{qN}{rN=0}{alphaN=B/D}{betaN=B/D}
+% On veut renvoyer
+% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}
+% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=B/D}{betaN=B/D}
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xint@bezalg@end@ #1#2#3#4%
+{%
+ \space {#1}{#3}{0}{1}{#2}{#4}{1}{0}%
+}%
+% \end{macrocode}
+% \subsection{\ch{xintTypesetEuclideAlgorithm}}
+% \begin{verbatim}
+% TYPESETTING
+% Organisation:
+% {N}{A}{D}{B}{q1}{r1}{q2}{r2}{q3}{r3}....{qN}{rN=0}
+% \U1 = N = nombre d'étapes, \U3 = PGCD, \U2 = A, \U4=B
+% q1 = \U5, q2 = \U7 --> qn = \U<2n+3>, rn = \U<2n+4>
+% bn = rn. B = r0. A=r(-1)
+% r(n-2) = q(n)r(n-1)+r(n) (n e étape) (n au moins 1)
+% \U{2n} = \U{2n+3} \times \U{2n+2} + \U{2n+4}, n e étape.
+% avec n entre 1 et N.
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintTypesetEuclideAlgorithm #1#2%
+{% l'algo remplace #1 et #2 par |#1| et |#2|
+ \par
+ \begingroup
+ \xintAssignArray\xintEuclideAlgorithm {#1}{#2}\to\U
+ \edef\A{\U2}\edef\B{\U4}\edef\N{\U1}%
+ \setbox 0 \vbox{\halign {$##$\cr \A\cr \B \cr}}%
+ \noindent
+ \count 255 1
+ \loop
+ \hbox to \wd 0 {\hfil$\U{\the\numexpr 2*\count 255\relax}$}%
+ ${} = \U{\the\numexpr 2*\count 255 + 3\relax}
+ \times \U{\the\numexpr 2*\count 255 + 2\relax}
+ + \U{\the\numexpr 2*\count 255 + 4\relax}$%
+ \ifnum \count 255 < \N
+ \hfill\break
+ \advance \count 255 1
+ \repeat
+ \par
+ \endgroup
+}%
+% \end{macrocode}
+% \subsection{\ch{xintTypesetBezoutAlgorithm}}
+% \begin{verbatim}
+% Pour Bezout on a:
+% {N}{A}{0}{1}{D=r(n)}{B}{1}{0}{q1}{r1}{alpha1=q1}{beta1=1}
+% {q2}{r2}{alpha2}{beta2}....{qN}{rN=0}{alphaN=B/D}{betaN=B/D}%
+% Donc 4N+8 termes
+% U1 = N, U2= A, U5=D, U6=B,
+% q1 = U9, qn = U{4n+5}, n au moins 1
+% rn = U{4n+6} , n au moins -1
+% alpha(n) = U{4n+7}, n au moins -1
+% beta(n) = U{4n+8}, n au moins -1
+% \end{verbatim}
+% \vspace*{-1.5\baselineskip}
+% \begin{macrocode}
+\def\xintTypesetBezoutAlgorithm #1#2%
+{%
+ \par
+ \begingroup
+ \parindent0pt
+ \xintAssignArray\xintBezoutAlgorithm {#1}{#2}\to\BEZ
+ \edef\A{\BEZ2}\edef\B{\BEZ6}\edef\N{\BEZ1}% A = |#1|, B = |#2|
+ \setbox 0 \vbox{\halign {$##$\cr \A\cr \B \cr}}%
+ \count 255 1
+ \loop
+ \noindent
+ \hbox to \wd 0 {\hfil$\BEZ{\the\numexpr 4*\count 255 - 2\relax}$}%
+ ${} = \BEZ{\the\numexpr 4*\count 255 + 5\relax}
+ \times \BEZ{\the\numexpr 4*\count 255 + 2\relax}
+ + \BEZ{\the\numexpr 4*\count 255 + 6\relax}$\hfill\break
+ \hbox to \wd 0 {\hfil$\BEZ{\the\numexpr 4*\count 255 +7\relax}$}%
+ ${} = \BEZ{\the\numexpr 4*\count 255 + 5\relax}
+ \times \BEZ{\the\numexpr 4*\count 255 + 3\relax}
+ + \BEZ{\the\numexpr 4*\count 255 - 1\relax}$\hfill\break
+ \hbox to \wd 0 {\hfil$\BEZ{\the\numexpr 4*\count 255 +8\relax}$}%
+ ${} = \BEZ{\the\numexpr 4*\count 255 + 5\relax}
+ \times \BEZ{\the\numexpr 4*\count 255 + 4\relax}
+ + \BEZ{\the\numexpr 4*\count 255 \relax}$
+ \endgraf
+ \ifnum \count 255 < \N
+ \advance \count 255 1
+ \repeat
+ \par
+ \edef\U{\BEZ{\the\numexpr 4*\N + 4\relax}}%
+ \edef\V{\BEZ{\the\numexpr 4*\N + 3\relax}}%
+ \edef\D{\BEZ5}%
+ \ifodd\N\relax
+ $\U\times\A - \V\times \B = -\D$%
+ \else
+ $\U\times\A - \V\times\B = \D$%
+ \fi
+ \par
+ \endgroup
+}%
+\XINT@gcd@restorecatcodes@endinput%
+% \end{macrocode}
+% \DeleteShortVerb{\|}
+%</gcd>
+%<*none>
+% \MakePercentComment
+\CharacterTable
+ {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+ Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+ Digits \0\1\2\3\4\5\6\7\8\9
+ Exclamation \! Double quote \" Hash (number) \#
+ Dollar \$ Percent \% Ampersand \&
+ Acute accent \' Left paren \( Right paren \)
+ Asterisk \* Plus \+ Comma \,
+ Minus \- Point \. Solidus \/
+ Colon \: Semicolon \; Less than \<
+ Equals \= Greater than \> Question mark \?
+ Commercial at \@ Left bracket \[ Backslash \\
+ Right bracket \] Circumflex \^ Underscore \_
+ Grave accent \` Left brace \{ Vertical bar \|
+ Right brace \} Tilde \~}
+
+\CheckSum{6418}
+
+\Finale
+%%
+%% End of file `xint.dtx'.
+
diff --git a/Master/texmf-dist/source/latex/xint/xint.ins b/Master/texmf-dist/source/latex/xint/xint.ins
new file mode 100644
index 00000000000..371064a05b9
--- /dev/null
+++ b/Master/texmf-dist/source/latex/xint/xint.ins
@@ -0,0 +1,25 @@
+%%----------------------------------------------------------------
+%% xint: Expandable operations on long numbers
+%% xintgcd: Euclidean algorithm with xint package
+%% Copyright (C) 2013 by Jean-Francois Burnol
+%%----------------------------------------------------------------
+\def\pkgname{xint}
+\def\pkgdate{2013/03/28}
+\def\pkgversion{v1.0}
+\def\pkgdescription{Expandable operations on long numbers (jfB)}
+%%
+%% This is a generated file. Run tex or latex on this file to
+%% extract xint.sty and xintgcd.sty from xint.dtx
+%%
+%% See xint.dtx for the statements of copyright and conditions of
+%% distribution and/or modification of this work.
+%%
+\input docstrip.tex
+\askforoverwritefalse
+\generate{\usepreamble\defaultpreamble
+\file{\pkgname.sty}{\from{\pkgname.dtx}{package}}
+\file{\pkgname gcd.sty}{\from{\pkgname.dtx}{gcd}}}
+\endbatchfile
+\endinput
+%%
+%% End of file `xint.ins'.
diff --git a/Master/texmf-dist/tex/latex/xint/xint.sty b/Master/texmf-dist/tex/latex/xint/xint.sty
new file mode 100644
index 00000000000..6e8aa246253
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xint/xint.sty
@@ -0,0 +1,3209 @@
+%%
+%% This is file `xint.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xint.dtx (with options: `package')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from xint.sty.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file xint.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+%%----------------------------------------------------------------
+%% xint: Expandable operations on long numbers
+%% xintgcd: Euclidean algorithm with xint package
+%% Copyright (C) 2013 by Jean-Francois Burnol
+%%----------------------------------------------------------------
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \expandafter\let\expandafter\x\csname ver@xint.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xint}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \else
+ \y{xint}{I was already loaded, aborting input}%
+ \aftergroup\endinput
+ \fi
+ \fi
+ \fi
+ \def\ChangeCatcodesIfInputNotAborted
+ {%
+ \endgroup
+ \edef\XINT@restorecatcodes@endinput
+ {%
+ \catcode47=\the\catcode47 % /
+ \catcode41=\the\catcode41 % )
+ \catcode40=\the\catcode40 % (
+ \catcode42=\the\catcode42 % *
+ \catcode43=\the\catcode43 % +
+ \catcode62=\the\catcode62 % >
+ \catcode60=\the\catcode60 % <
+ \catcode58=\the\catcode58 % :
+ \catcode46=\the\catcode46 % .
+ \catcode45=\the\catcode45 % -
+ \catcode44=\the\catcode44 % ,
+ \catcode35=\the\catcode35 % #
+ \catcode64=\the\catcode64 % @
+ \catcode125=\the\catcode125 % }
+ \catcode123=\the\catcode123 % {
+ \endlinechar=\the\endlinechar
+ \catcode13=\the\catcode13 % ^^M
+ \catcode32=\the\catcode32 %
+ \catcode61=\the\catcode61 % =
+ \noexpand\endinput
+ }%
+ \def\XINT@setcatcodes
+ {%
+ \catcode61=12 % =
+ \catcode32=10 % space
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=11 % : (made letter for error cs)
+ \catcode60=12 % <
+ \catcode62=12 % >
+ \catcode43=12 % +
+ \catcode42=12 % *
+ \catcode40=12 % (
+ \catcode41=12 % )
+ \catcode47=12 % /
+ }%
+ \XINT@setcatcodes
+ }%
+\ChangeCatcodesIfInputNotAborted
+\begingroup
+ \catcode91=12 % [
+ \catcode93=12 % ]
+ \catcode58=12 % : (does not really matter, was letter)
+ \expandafter\ifx\csname ProvidesPackage\endcsname\relax
+ \def\x#1#2#3[#4]{\endgroup
+ \immediate\write-1{Package: #3 #4}%
+ \xdef#1{#4}%
+ }%
+ \else
+ \def\x#1#2[#3]{\endgroup
+ #2[{#3}]%
+ \ifx#1\@undefined
+ \xdef#1{#3}%
+ \fi
+ \ifx#1\relax
+ \xdef#1{#3}%
+ \fi
+ }%
+ \fi
+\expandafter\x\csname ver@xint.sty\endcsname
+\ProvidesPackage{xint}%
+ [2013/03/28 v1.0 Expandable operations on long numbers (jfB)]%
+\def\xint@gobble #1{}%
+\def\xint@gobble@one #1{}%
+\def\xint@gobble@two #1#2{}%
+\def\xint@gobble@three #1#2#3{}%
+\def\xint@gobble@four #1#2#3#4{}%
+\def\xint@gobble@five #1#2#3#4#5{}%
+\def\xint@gobble@six #1#2#3#4#5#6{}%
+\def\xint@gobble@seven #1#2#3#4#5#6#7{}%
+\def\xint@gobble@eight #1#2#3#4#5#6#7#8{}%
+\def\xint@secondoftwo #1#2{#2}%
+\def\xint@firstoftwo@andstop #1#2{ #1}%
+\def\xint@secondoftwo@andstop #1#2{ #2}%
+\def\xint@exchangetwo@keepbraces #1#2{{#2}{#1}}%
+\def\xint@exchangetwo@keepbraces@andstop #1#2{ {#2}{#1}}%
+\def\xint@xpxp@andstop {\expandafter\expandafter\expandafter\space }%
+\def\xint@r #1\R {}%
+\def\xint@w #1\W {}%
+\def\xint@z #1\Z {}%
+\def\xint@zero #10{}%
+\def\xint@one #11{}%
+\def\xint@minus #1-{}%
+\def\xint@relax #1\relax {}%
+\def\xint@quatrezeros #10000{}%
+\def\xint@bracedundef {\xint@undef }%
+\def\xint@UDzerofork #10\dummy #2#3\xint@UDforkzero {#2}%
+\def\xint@UDzerosfork #100\dummy #2#3\xint@UDforkzeros {#2}%
+\def\xint@UDsignfork #1-\dummy #2#3\xint@UDforksign {#2}%
+\def\xint@UDsignsfork #1--\dummy #2#3\xint@UDforksigns {#2}%
+\def\xint@UDzerominusfork #10-\dummy #2#3\xint@UDforkminuszero {#2}%
+\def\xint@afterfi #1#2\fi {\fi #1}%
+\def\xintRev {\romannumeral0\xintrev }%
+\def\xintrev #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@rev
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@rev #1%
+{%
+ \XINT@rev@fork #1\Z
+}%
+\def\XINT@rev@fork #1#2%
+{%
+ \xint@UDsignfork
+ #1\dummy \XINT@rev@negative
+ -\dummy \XINT@rev@nonnegative
+ \xint@UDforksign
+ #1#2%
+}%
+\def\XINT@rev@negative #1#2\Z
+{%
+ \expandafter
+ \space
+ \expandafter
+ -%
+ \romannumeral0\XINT@rev {#2}%
+}%
+\def\XINT@rev@nonnegative #1\Z
+{%
+ \XINT@rev {#1}%
+}%
+\def\XINT@Rev {\romannumeral0\XINT@rev }%
+\let\xintReverseOrder \XINT@Rev
+\def\XINT@rev #1%
+{%
+ \XINT@rord@main {}#1%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+\def\XINT@rord@main #1#2#3#4#5#6#7#8#9%
+{%
+ \XINT@strip@undef #9\XINT@rord@cleanup\xint@undef
+ \XINT@rord@main {#9#8#7#6#5#4#3#2#1}%
+}%
+\def\XINT@rord@cleanup\xint@undef\XINT@rord@main #1#2\xint@UNDEF
+{%
+ \expandafter\space\XINT@strip@UNDEF #1%
+}%
+\def\XINT@strip@undef #1\xint@undef {}%
+\def\XINT@strip@UNDEF #1\xint@UNDEF {}%
+\def\XINT@RQ #1#2#3#4#5#6#7#8#9%
+{%
+ \xint@r #9\XINT@RQ@end\R
+ \XINT@RQ {#9#8#7#6#5#4#3#2#1}%
+}%
+\def\XINT@RQ@end\R\XINT@RQ #1#2\Z
+{%
+ \XINT@RQ@end@ #1\Z
+}%
+\def\XINT@RQ@end@ #1#2#3#4#5#6#7#8%
+{%
+ \xint@r #8\XINT@RQ@end@viii
+ #7\XINT@RQ@end@vii
+ #6\XINT@RQ@end@vi
+ #5\XINT@RQ@end@v
+ #4\XINT@RQ@end@iv
+ #3\XINT@RQ@end@iii
+ #2\XINT@RQ@end@ii
+ \R\XINT@RQ@end@i
+ \Z #2#3#4#5#6#7#8%
+}%
+\def\XINT@RQ@end@viii #1\Z #2#3#4#5#6#7#8#9\Z { #9}%
+\def\XINT@RQ@end@vii #1\Z #2#3#4#5#6#7#8#9\Z { #8#9000}%
+\def\XINT@RQ@end@vi #1\Z #2#3#4#5#6#7#8#9\Z { #7#8#900}%
+\def\XINT@RQ@end@v #1\Z #2#3#4#5#6#7#8#9\Z { #6#7#8#90}%
+\def\XINT@RQ@end@iv #1\Z #2#3#4#5#6#7#8#9\Z { #5#6#7#8#9}%
+\def\XINT@RQ@end@iii #1\Z #2#3#4#5#6#7#8#9\Z { #4#5#6#7#8#9000}%
+\def\XINT@RQ@end@ii #1\Z #2#3#4#5#6#7#8#9\Z { #3#4#5#6#7#8#900}%
+\def\XINT@RQ@end@i \Z #1#2#3#4#5#6#7#8\Z { #1#2#3#4#5#6#7#80}%
+\def\xint@cleanupzeros@andstop #1#2#3#4%
+{\expandafter
+ \space
+ \the\numexpr #1#2#3#4\relax
+}%
+\def\xint@cleanupzeros@nospace #1#2#3#4%
+{%
+ \the\numexpr #1#2#3#4\relax
+}%
+\def\XINT@Rev@andcleanupzeros #1%
+{%
+ \romannumeral0\expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0\XINT@rord@main {}#1%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+\def\XINT@cuz #1%
+{%
+ \XINT@cuz@loop #1\W\W\W\W\W\W\W\Z%
+}%
+\def\XINT@cuz@loop #1#2#3#4#5#6#7#8%
+{%
+ \xint@w #8\xint@cuz@enda\W
+ \xint@z #8\xint@cuz@endb\Z
+ \XINT@cuz@checka {#1#2#3#4#5#6#7#8}%
+}%
+\def\xint@cuz@enda #1\XINT@cuz@checka #2%
+{%
+ \xint@cuz@endaa #2%
+}%
+\def\xint@cuz@endaa #1#2#3#4#5\Z
+{%
+ \expandafter\space\the\numexpr #1#2#3#4\relax
+}%
+\def\xint@cuz@endb\Z\XINT@cuz@checka #1{ 0}%
+\def\XINT@cuz@checka #1%
+{%
+ \expandafter \XINT@cuz@checkb \the\numexpr #1\relax
+}%
+\def\XINT@cuz@checkb #1%
+{%
+ \xint@zero #1\xint@cuz@backtoloop 0\XINT@cuz@Stop #1%
+}%
+\def\XINT@cuz@Stop #1\W #2\Z{ #1}%
+\def\xint@cuz@backtoloop 0\XINT@cuz@Stop 0{\XINT@cuz@loop }%
+\def\xintNum {\romannumeral0\xintnum }%
+\def\xintnum #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@num
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\XINT@Num {\romannumeral0\XINT@num }%
+\def\XINT@num #1{\XINT@num@loop #1\R\R\R\R\R\R\R\R\Z }%
+\def\XINT@num@loop #1#2#3#4#5#6#7#8%
+{%
+ \xint@r #8\XINT@num@end\R\XINT@num@NumEight #1#2#3#4#5#6#7#8%
+}%
+\def\XINT@num@end\R\XINT@num@NumEight #1\R #2\Z
+{%
+ \expandafter\space\the\numexpr #1+0\relax
+}%
+\def\XINT@num@NumEight #1#2#3#4#5#6#7#8%
+{%
+ \ifnum \numexpr #1#2#3#4#5#6#7#8+0\relax = 0
+ \xint@afterfi {\expandafter\XINT@num@keepsign@a
+ \the\numexpr #1#2#3#4#5#6#7#81\relax}%
+ \else
+ \xint@afterfi {\expandafter\XINT@num@finish
+ \the\numexpr #1#2#3#4#5#6#7#8\relax}%
+ \fi
+}%
+\def\XINT@num@keepsign@a #1%
+{%
+ \xint@one#1\XINT@num@gobacktoloop 1\XINT@num@keepsign@b
+}%
+\def\XINT@num@gobacktoloop 1\XINT@num@keepsign@b {\XINT@num@loop }%
+\def\XINT@num@keepsign@b #1{\XINT@num@loop -}%
+\def\XINT@num@finish #1\R #2\Z { #1}%
+\def\xintLen {\romannumeral0\xintlen }%
+\def\xintlen #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@length@fork #1\R\R\R\R\R\R\R\R\Z
+}%
+\def\XINT@Len #1{\romannumeral0\XINT@length@fork #1\R\R\R\R\R\R\R\R\Z }%
+\def\XINT@length@fork #1%
+{%
+ \expandafter\XINT@length@loop
+ \xint@UDsignfork
+ #1\dummy {{0}}%
+ -\dummy {{0}#1}%
+ \xint@UDforksign
+}%
+\def\XINT@Length #1{\romannumeral0\XINT@length@loop {0}#1\R\R\R\R\R\R\R\R\Z }%
+\def\XINT@length #1{\XINT@length@loop {0}#1\R\R\R\R\R\R\R\R\Z }%
+\let\xintLength\XINT@Length
+\def\XINT@length@loop #1#2#3#4#5#6#7#8#9%
+{%
+ \xint@r #9\XINT@length@end {#2#3#4#5#6#7#8#9}\R
+ \expandafter\XINT@length@loop\expandafter {\the\numexpr #1+8\relax}%
+}%
+\def\XINT@length@end #1\R\expandafter\XINT@length@loop\expandafter #2#3\Z
+{%
+ \XINT@length@end@ #1\W\W\W\W\W\W\W\W\Z {#2}%
+}%
+\def\XINT@length@end@ #1\R #2#3#4#5#6#7#8#9\Z
+{%
+ \xint@w #2\XINT@length@end@i
+ #3\XINT@length@end@ii
+ #4\XINT@length@end@iii
+ #5\XINT@length@end@iv
+ #6\XINT@length@end@v
+ #7\XINT@length@end@vi
+ #8\XINT@length@end@vii
+ \W\XINT@length@end@viii
+}%
+\def\XINT@length@end@viii #1%
+ {\expandafter\space\the\numexpr #1-8\relax}%
+\def\XINT@length@end@vii #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-7\relax}%
+\def\XINT@length@end@vi #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-6\relax}%
+\def\XINT@length@end@v #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-5\relax}%
+\def\XINT@length@end@iv #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-4\relax}%
+\def\XINT@length@end@iii #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-3\relax}%
+\def\XINT@length@end@ii #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-2\relax}%
+\def\XINT@length@end@i #1\XINT@length@end@viii #2%
+ {\expandafter\space\the\numexpr #2-1\relax}%
+\def\xintAssign #1\to
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@assign@a #1{}\to
+}%
+\def\XINT@assign@a #1% attention to the # at the beginning of next line
+#{%
+ \def\xint@temp {#1}%
+ \ifx\empty\xint@temp
+ \expandafter\XINT@assign@b
+ \else
+ \expandafter\XINT@assign@B
+ \fi
+}%
+\def\XINT@assign@b #1#2\to #3%
+{%
+ \edef #3{#1}\def\xint@temp {#2}%
+ \ifx\empty\xint@temp
+ \else
+ \xint@afterfi{\XINT@assign@a #2\to }%
+ \fi
+}%
+\def\XINT@assign@B #1\to #2%
+{%
+ \edef #2{\xint@temp}%
+}%
+\def\xintRelaxArray #1%
+{%
+ \edef\xint@arrayname {\expandafter\xint@gobble\string #1}%
+ \expandafter\let\expandafter\xint@temp
+ \csname\xint@arrayname 0\endcsname
+ \count 255 0
+ \loop
+ \global\expandafter\let
+ \csname\xint@arrayname\the\count255\endcsname\relax
+ \ifnum \count 255 < \xint@temp
+ \advance\count 255 1
+ \repeat
+ \global\expandafter\let\csname\xint@arrayname 00\endcsname\relax
+ \global\let #1\relax
+}%
+\def\xintAssignArray #1\to #2%
+{%
+ \edef\xint@arrayname {\expandafter\xint@gobble\string #2}%
+ \count 255 0
+ \expandafter\expandafter\expandafter
+ \XINT@assignarray@loop #1\xint@undef
+ \csname\xint@arrayname 00\endcsname
+ \csname\xint@arrayname 0\endcsname
+ {\xint@arrayname}%
+ #2%
+}%
+\def\XINT@assignarray@loop #1%
+{%
+ \def\xint@temp {#1}%
+ \ifx\xint@bracedundef\xint@temp
+ \edef\xint@temp{\the\count 255 }%
+ \expandafter\let\csname\xint@arrayname0\endcsname\xint@temp
+ \expandafter\XINT@assignarray@end
+ \else
+ \advance\count 255 1
+ \expandafter\edef
+ \csname\xint@arrayname\the\count 255\endcsname{\xint@temp}%
+ \expandafter\XINT@assignarray@loop
+ \fi
+}%
+\def\XINT@assignarray@end {\expandafter\XINT@assignarray@@end }%
+\def\XINT@assignarray@@end #1%
+{%
+ \expandafter\XINT@assignarray@@@end\expandafter #1%
+}%
+\def\XINT@assignarray@@@end #1#2#3%
+{%
+ \expandafter\XINT@assignarray@@@@end
+ \expandafter #1\expandafter #2\expandafter{#3}%
+}%
+\def\XINT@assignarray@@@@end #1#2#3#4%
+{%
+ \def #4##1%
+ {\romannumeral0%
+ \expandafter\expandafter\expandafter
+ #1%
+ \expandafter\expandafter\expandafter
+ {##1}%
+ }%
+ \def #1##1%
+ {%
+ \ifnum ##1< 0
+ \xint@afterfi {\xintError:ArrayIndexIsNegative
+ \expandafter\space 0}%
+ \else
+ \xint@afterfi {%
+ \ifnum ##1> #2
+ \xint@afterfi {\xintError:ArrayIndexBeyondLimit
+ \expandafter\space 0}%
+ \else
+ \xint@afterfi
+ {\expandafter\expandafter\expandafter
+ \space\csname #3##1\endcsname}%
+ \fi}%
+ \fi
+ }%
+}%
+\let\xintDigitsOf\xintAssignArray
+\def\xintSgn {\romannumeral0\xintsgn }%
+\def\xintsgn #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@sgn #1\Z%
+}%
+\def\XINT@Sgn #1{\romannumeral0\XINT@sgn #1\Z }%
+\def\XINT@sgn #1%
+{%
+ \xint@xpxp@andstop
+ \xint@UDzerominusfork
+ #1-\dummy {\expandafter0}% zero
+ 0#1\dummy {\expandafter-\expandafter1}% n\'egatif
+ 0-\dummy {\expandafter1}% positif
+ \xint@UDforkminuszero
+ \xint@z
+}%
+\def\xintOpp {\romannumeral0\xintopp }%
+\def\xintopp #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@opp #1%
+}%
+\def\XINT@Opp #1{\romannumeral0\XINT@opp #1}%
+\def\XINT@opp #1%
+{%
+ \expandafter\space
+ \xint@UDzerominusfork
+ #1-\dummy 0% zero
+ 0#1\dummy {}% negative
+ 0-\dummy {-#1}% positive
+ \xint@UDforkminuszero
+}%
+\def\xintAbs {\romannumeral0\xintabs }%
+\def\xintabs #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@abs #1%
+}%
+\def\XINT@Abs {\romannumeral0\XINT@abs }%
+\def\XINT@abs #1%
+{%
+ \xint@UDsignfork
+ #1\dummy \XINT@abs@isnegative
+ -\dummy \XINT@abs@isnonnegative
+ \xint@UDforksign
+ #1%
+}%
+\def\XINT@abs@isnegative #1{ }%
+\def\XINT@abs@isnonnegative #1{ #1}%
+\def\xintAdd {\romannumeral0\xintadd }%
+\def\xintadd #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@add
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@add #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@add@fork #2\Z #1\Z
+}%
+\def\XINT@Add #1#2{\romannumeral0\XINT@add@fork #2\Z #1\Z }%
+\def\XINT@add #1#2{\XINT@add@fork #2\Z #1\Z }%
+\def\XINT@add@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@add@secondiszero
+ #3\dummy \XINT@add@firstiszero
+ 0\dummy
+ {\xint@UDsignsfork
+ #1#3\dummy \XINT@add@minusminus % #1 = #3 = -
+ #1-\dummy \XINT@add@minusplus % #1 = -
+ #3-\dummy \XINT@add@plusminus % #3 = -
+ --\dummy \XINT@add@plusplus
+ \xint@UDforksigns}%
+ \xint@UDforkzero
+ {#2}{#4}#1#3%
+}%
+\def\XINT@add@secondiszero #1#2#3#4{ #4#2}%
+\def\XINT@add@firstiszero #1#2#3#4{ #3#1}%
+\def\XINT@add@minusminus #1#2#3#4%
+{%
+ \expandafter\space\expandafter-%
+ \romannumeral0\XINT@add@pre {#2}{#1}%
+}%
+\def\XINT@add@minusplus #1#2#3#4%
+{%
+ \XINT@sub@pre {#4#2}{#1}%
+}%
+\def\XINT@add@plusminus #1#2#3#4%
+{%
+ \XINT@sub@pre {#3#1}{#2}%
+}%
+\def\XINT@add@plusplus #1#2#3#4%
+{%
+ \XINT@add@pre {#4#2}{#3#1}%
+}%
+\def\XINT@add@pre #1%
+{%
+ \expandafter\XINT@add@@pre\expandafter{%
+ \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+ }%
+}%
+\def\XINT@add@@pre #1#2%
+{%
+ \expandafter\XINT@add@A
+ \expandafter0\expandafter{\expandafter}%
+ \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z
+}%
+\def\XINT@add@A #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@add@az
+ \W\XINT@add@AB #1{#3#4#5#6}{#2}%
+}%
+\def\xint@add@az\W\XINT@add@AB #1#2%
+{%
+ \XINT@add@AC@checkcarry #1%
+}%
+\def\XINT@add@AB #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{%
+ \xint@w
+ #5\xint@add@bz
+ \W\XINT@add@ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z
+}%
+\def\XINT@add@ABE #1#2#3#4#5#6%
+{\expandafter
+ \XINT@add@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax.%
+}%
+\def\XINT@add@ABEA #1#2#3.#4%
+{%
+ \XINT@add@A #2{#3#4}%
+}%
+\def\xint@add@bz\W\XINT@add@ABE #1#2#3#4#5#6%
+{\expandafter
+ \XINT@add@CC\the\numexpr #1+10#5#4#3#2\relax.%
+}%
+\def\XINT@add@CC #1#2#3.#4%
+{%
+ \XINT@add@AC@checkcarry #2{#3#4}% on va examiner et \'eliminer #2
+}%
+\def\XINT@add@AC@checkcarry #1%
+{%
+ \xint@zero #1\xint@add@AC@nocarry 0\XINT@add@C
+}%
+\def\xint@add@AC@nocarry 0\XINT@add@C #1#2\W\X\Y\Z
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1%
+}%
+\def\XINT@add@C #1#2#3#4#5%
+{%
+ \xint@w
+ #2\xint@add@cz
+ \W\XINT@add@CD {#5#4#3#2}{#1}%
+}%
+\def\XINT@add@CD #1%
+{\expandafter
+ \XINT@add@CC\the\numexpr 1+10#1\relax.%
+}%
+\def\xint@add@cz\W\XINT@add@CD #1#2{ 1#2}%
+\def\xintSub {\romannumeral0\xintsub }%
+\def\xintsub #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@sub
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@sub #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@sub@fork #2\Z #1\Z
+}%
+\def\XINT@Sub #1#2{\romannumeral0\XINT@sub@fork #2\Z #1\Z }%
+\def\XINT@sub #1#2{\XINT@sub@fork #2\Z #1\Z }%
+\def\XINT@sub@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDsignsfork
+ #1#3\dummy \XINT@sub@minusminus
+ #1-\dummy \XINT@sub@minusplus % attention, #3=0 possible
+ #3-\dummy \XINT@sub@plusminus % attention, #1=0 possible
+ --\dummy {\xint@UDzerofork
+ #1\dummy \XINT@sub@secondiszero
+ #3\dummy \XINT@sub@firstiszero
+ 0\dummy \XINT@sub@plusplus
+ \xint@UDforkzero}%
+ \xint@UDforksigns
+ {#2}{#4}#1#3%
+}%
+\def\XINT@sub@secondiszero #1#2#3#4{ #4#2}%
+\def\XINT@sub@firstiszero #1#2#3#4{ -#3#1}%
+\def\XINT@sub@plusplus #1#2#3#4%
+{%
+ \XINT@sub@pre {#4#2}{#3#1}%
+}%
+\def\XINT@sub@minusminus #1#2#3#4%
+{%
+ \XINT@sub@pre {#1}{#2}%
+}%
+\def\XINT@sub@minusplus #1#2#3#4%
+{%
+ \xint@zero #4\xint@sub@mp0\XINT@add@pre {#4#2}{#1}%
+}%
+\def\xint@sub@mp0\XINT@add@pre #1#2{ #2}%
+\def\XINT@sub@plusminus #1#2#3#4%
+{%
+ \xint@zero #3\xint@sub@pm0\expandafter\space\expandafter-%
+ \romannumeral0\XINT@add@pre {#2}{#3#1}%
+}%
+\def\xint@sub@pm #1\XINT@add@pre #2#3{ -#2}%
+\def\XINT@sub@pre #1%
+{%
+ \expandafter\XINT@sub@@pre\expandafter{%
+ \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+ }%
+}%
+\def\XINT@sub@@pre #1#2%
+{%
+ \expandafter\XINT@sub@A
+ \expandafter1\expandafter{\expandafter}%
+ \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1 \W\X\Y\Z
+}%
+\def\XINT@sub@A #1#2#3\W\X\Y\Z #4#5#6#7%
+{%
+ \xint@w
+ #4\xint@sub@az
+ \W\XINT@sub@B #1{#4#5#6#7}{#2}#3\W\X\Y\Z
+}%
+\def\XINT@sub@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@sub@bz
+ \W\XINT@sub@onestep #1#2{#7#6#5#4}{#3}%
+}%
+\def\XINT@sub@onestep #1#2#3#4#5#6%
+{\expandafter
+ \XINT@sub@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.%
+}%
+\def\XINT@sub@backtoA #1#2#3.#4%
+{%
+ \XINT@sub@A #2{#3#4}%
+}%
+\def\xint@sub@bz
+ \W\XINT@sub@onestep #1#2#3#4#5#6#7%
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@sub@C % une retenue
+ 0\dummy \XINT@sub@D % pas de retenue
+ \xint@UDforkzero
+ {#7}#2#3#4#5%
+}%
+\def\XINT@sub@D #1#2\W\X\Y\Z
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1%
+}%
+\def\XINT@sub@C #1#2#3#4#5%
+{%
+ \xint@w
+ #2\xint@sub@cz
+ \W\XINT@sub@AC@onestep {#5#4#3#2}{#1}%
+}%
+\def\XINT@sub@AC@onestep #1%
+{\expandafter
+ \XINT@sub@backtoC\the\numexpr 11#1-1\relax.%
+}%
+\def\XINT@sub@backtoC #1#2#3.#4%
+{%
+ \XINT@sub@AC@checkcarry #2{#3#4}% la retenue va \^etre examin\'ee
+}%
+\def\XINT@sub@AC@checkcarry #1%
+{%
+ \xint@one #1\xint@sub@AC@nocarry 1\XINT@sub@C
+}%
+\def\xint@sub@AC@nocarry 1\XINT@sub@C #1#2\W\X\Y\Z
+{%
+ \expandafter
+ \XINT@cuz@loop
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1\W\W\W\W\W\W\W\Z
+}%
+\def\xint@sub@cz\W\XINT@sub@AC@onestep #1%
+{%
+ \XINT@cuz
+}%
+\def\xint@sub@az\W\XINT@sub@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@sub@ez
+ \W\XINT@sub@Eenter #1{#3}#4#5#6#7%
+}%
+\def\XINT@sub@Eenter #1#2%
+{%
+ \expandafter
+ \XINT@sub@E\expandafter1\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ \W\X\Y\Z #1%
+}%
+\def\XINT@sub@E #1#2#3#4#5#6%
+{%
+ \xint@w #3\xint@sub@F\W\XINT@sub@Eonestep
+ #1{#6#5#4#3}{#2}%
+}%
+\def\XINT@sub@Eonestep #1#2%
+{\expandafter
+ \XINT@sub@backtoE\the\numexpr 110000-#2+#1-1\relax.%
+}%
+\def\XINT@sub@backtoE #1#2#3.#4%
+{%
+ \XINT@sub@E #2{#3#4}%
+}%
+\def\xint@sub@F\W\XINT@sub@Eonestep #1#2#3#4%
+{%
+ \xint@sub@Fthreewayfork
+ #4#1\dummy {\XINT@sub@Fdec 0}% soustraire 1. Et faire signe -
+ #1#4\dummy {\XINT@sub@Finc 1}% additionner 1. Et faire signe -
+ 10\dummy \XINT@sub@DD % terminer. Mais avec signe -
+ \xint@sub@Fforkthreeway
+ {#3}%
+}%
+\def\xint@sub@Fthreewayfork #110\dummy #2#3\xint@sub@Fforkthreeway {#2}%
+\def\XINT@sub@DD
+{\expandafter\space\expandafter-\romannumeral0\XINT@sub@D }%
+\def\XINT@sub@Fdec #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@sub@Fdec@finish\W\XINT@sub@Fdec@onestep
+ #1{#6#5#4#3}{#2}%
+}%
+\def\XINT@sub@Fdec@onestep #1#2%
+{\expandafter
+ \XINT@sub@backtoFdec\the\numexpr 11#2+#1-1\relax.%
+}%
+\def\XINT@sub@backtoFdec #1#2#3.#4%
+{%
+ \XINT@sub@Fdec #2{#3#4}%
+}%
+\def\xint@sub@Fdec@finish\W\XINT@sub@Fdec@onestep #1#2%
+{%
+ \expandafter\space\expandafter-\romannumeral0\XINT@cuz
+}%
+\def\XINT@sub@Finc #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@sub@Finc@finish\W\XINT@sub@Finc@onestep
+ #1{#6#5#4#3}{#2}%
+}%
+\def\XINT@sub@Finc@onestep #1#2%
+{\expandafter
+ \XINT@sub@backtoFinc\the\numexpr 10#2+#1\relax.%
+}%
+\def\XINT@sub@backtoFinc #1#2#3.#4%
+{%
+ \XINT@sub@Finc #2{#3#4}%
+}%
+\def\xint@sub@Finc@finish\W\XINT@sub@Finc@onestep #1#2#3%
+{%
+ \xint@UDzerofork
+ #1\dummy {\expandafter\space\expandafter-%
+ \xint@cleanupzeros@nospace}%
+ 0\dummy { -1}%
+ \xint@UDforkzero
+ #3%
+}%
+\def\xint@sub@ez\W\XINT@sub@Eenter #1%
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@sub@K % il y a une retenue
+ 0\dummy \XINT@sub@L % pas de retenue
+ \xint@UDforkzero
+}%
+\def\XINT@sub@L #1\W\X\Y\Z
+ {\XINT@cuz@loop #1\W\W\W\W\W\W\W\Z }%
+\def\XINT@sub@K #1%
+{%
+ \expandafter
+ \XINT@sub@KK\expandafter1\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@rord@main {}#1%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+\def\XINT@sub@KK #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@sub@KK@finish\W\XINT@sub@KK@onestep
+ #1{#6#5#4#3}{#2}%
+}%
+\def\XINT@sub@KK@onestep #1#2%
+{\expandafter
+ \XINT@sub@backtoKK\the\numexpr 110000-#2+#1-1\relax.%
+}%
+\def\XINT@sub@backtoKK #1#2#3.#4%
+{%
+ \XINT@sub@KK #2{#3#4}%
+}%
+\def\xint@sub@KK@finish\W\XINT@sub@KK@onestep #1#2#3%
+{%
+ \expandafter\space\expandafter-\romannumeral
+ 0\XINT@cuz@loop #3\W\W\W\W\W\W\W\Z
+}%
+\def\xintCmp {\romannumeral0\xintcmp }%
+\def\xintcmp #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@cmp
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@cmp #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@cmp@fork #2\Z #1\Z
+}%
+\def\XINT@Cmp #1#2{\romannumeral0\XINT@cmp@fork #2\Z #1\Z }%
+\def\XINT@cmp@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDsignsfork
+ #1#3\dummy \XINT@cmp@minusminus
+ #1-\dummy \XINT@cmp@minusplus
+ #3-\dummy \XINT@cmp@plusminus
+ --\dummy {\xint@UDzerosfork
+ #1#3\dummy \XINT@cmp@zerozero
+ #10\dummy \XINT@cmp@zeroplus
+ #30\dummy \XINT@cmp@pluszero
+ 00\dummy \XINT@cmp@plusplus
+ \xint@UDforkzeros}%
+ \xint@UDforksigns
+ {#2}{#4}#1#3%
+}%
+\def\XINT@cmp@minusplus #1#2#3#4{ 1}%
+\def\XINT@cmp@plusminus #1#2#3#4{ -1}%
+\def\XINT@cmp@zerozero #1#2#3#4{ 0}%
+\def\XINT@cmp@zeroplus #1#2#3#4{ 1}%
+\def\XINT@cmp@pluszero #1#2#3#4{ -1}%
+\def\XINT@cmp@plusplus #1#2#3#4%
+{%
+ \XINT@cmp@pre {#4#2}{#3#1}%
+}%
+\def\XINT@cmp@minusminus #1#2#3#4%
+{%
+ \XINT@cmp@pre {#1}{#2}%
+}%
+\def\XINT@cmp@pre #1%
+{%
+ \expandafter\XINT@cmp@@pre\expandafter{%
+ \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+ }%
+}%
+\def\XINT@cmp@@pre #1#2%
+{%
+ \expandafter\XINT@cmp@A
+ \expandafter1\expandafter{\expandafter}%
+ \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z
+}%
+\def\XINT@cmp@A #1#2#3\W\X\Y\Z #4#5#6#7%
+{%
+ \xint@w
+ #4\xint@cmp@az
+ \W\XINT@cmp@B #1{#4#5#6#7}{#2}#3\W\X\Y\Z
+}%
+\def\XINT@cmp@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@cmp@bz
+ \W\XINT@cmp@onestep #1#2{#7#6#5#4}{#3}%
+}%
+\def\XINT@cmp@onestep #1#2#3#4#5#6%
+{\expandafter
+ \XINT@cmp@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.%
+}%
+\def\XINT@cmp@backtoA #1#2#3.#4%
+{%
+ \XINT@cmp@A #2{#3#4}%
+}%
+\def\xint@cmp@bz
+ \W\XINT@cmp@onestep #1\Z { 1}%
+\def\xint@cmp@az\W\XINT@cmp@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@cmp@ez
+ \W\XINT@cmp@Eenter #1{#3}#4#5#6#7%
+}%
+\def\XINT@cmp@Eenter #1\Z { -1}%
+\def\xint@cmp@ez\W\XINT@cmp@Eenter #1%
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@cmp@K % il y a une retenue
+ 0\dummy \XINT@cmp@L % pas de retenue
+ \xint@UDforkzero
+}%
+\def\XINT@cmp@K #1\Z { -1}%
+\def\XINT@cmp@L #1{\XINT@OneIfPositive@main #1}%
+\def\XINT@OneIfPositive #1%
+{%
+ \XINT@OneIfPositive@main #1\W\X\Y\Z%
+}%
+\def\XINT@OneIfPositive@main #1#2#3#4%
+{%
+ \xint@z #4\xint@OneIfPositive@terminated\Z\XINT@OneIfPositive@onestep
+ #1#2#3#4%
+}%
+\def\xint@OneIfPositive@terminated\Z\XINT@OneIfPositive@onestep\W\X\Y\Z { 0}%
+\def\XINT@OneIfPositive@onestep #1#2#3#4%
+{%
+ \expandafter
+ \XINT@OneIfPositive@check
+ \the\numexpr #1#2#3#4\relax
+}%
+\def\XINT@OneIfPositive@check #1%
+{%
+ \xint@zero
+ #1\xint@OneIfPositive@backtomain 0\XINT@OneIfPositive@finish #1%
+}%
+\def\XINT@OneIfPositive@finish #1\W\X\Y\Z{ 1}%
+\def\xint@OneIfPositive@backtomain 0\XINT@OneIfPositive@finish 0%
+ {\XINT@OneIfPositive@main }%
+\def\xintGeq {\romannumeral0\xintgeq }%
+\def\xintgeq #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@geq
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@geq #1#2%
+{\expandafter\expandafter\expandafter
+ \XINT@geq@fork #2\Z #1\Z
+}%
+\def\XINT@Geq #1#2{\romannumeral0\XINT@geq@fork #2\Z #1\Z }%
+\def\XINT@geq@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@geq@secondiszero % |#1#2|=0
+ #3\dummy \XINT@geq@firstiszero % |#1#2|>0
+ 0\dummy {\xint@UDsignsfork
+ #1#3\dummy \XINT@geq@minusminus
+ #1-\dummy \XINT@geq@minusplus
+ #3-\dummy \XINT@geq@plusminus
+ --\dummy \XINT@geq@plusplus
+ \xint@UDforksigns}%
+ \xint@UDforkzero
+ {#2}{#4}#1#3%
+}%
+\def\XINT@geq@secondiszero #1#2#3#4{ 1}%
+\def\XINT@geq@firstiszero #1#2#3#4{ 0}%
+\def\XINT@geq@plusplus #1#2#3#4%
+ {\XINT@geq@pre {#4#2}{#3#1}}%
+\def\XINT@geq@minusminus #1#2#3#4%
+ {\XINT@geq@pre {#2}{#1}}%
+\def\XINT@geq@minusplus #1#2#3#4%
+ {\XINT@geq@pre {#4#2}{#1}}%
+\def\XINT@geq@plusminus #1#2#3#4%
+ {\XINT@geq@pre {#2}{#3#1}}%
+\def\XINT@geq@pre #1%
+{%
+ \expandafter\XINT@geq@@pre\expandafter{%
+ \romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+ }%
+}%
+\def\XINT@geq@@pre #1#2%
+{%
+ \expandafter\XINT@geq@A
+ \expandafter1\expandafter{\expandafter}%
+ \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1 \W\X\Y\Z
+}%
+\def\XINT@geq@A #1#2#3\W\X\Y\Z #4#5#6#7%
+{%
+ \xint@w
+ #4\xint@geq@az
+ \W\XINT@geq@B #1{#4#5#6#7}{#2}#3\W\X\Y\Z
+}%
+\def\XINT@geq@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@geq@bz
+ \W\XINT@geq@onestep #1#2{#7#6#5#4}{#3}%
+}%
+\def\XINT@geq@onestep #1#2#3#4#5#6%
+{\expandafter
+ \XINT@geq@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.%
+}%
+\def\XINT@geq@backtoA #1#2#3.#4%
+{%
+ \XINT@geq@A #2{#3#4}%
+}%
+\def\xint@geq@bz\W\XINT@geq@onestep #1\W\X\Y\Z { 1}%
+\def\xint@geq@az\W\XINT@geq@B #1#2#3#4#5#6#7%
+{%
+ \xint@w
+ #4\xint@geq@ez
+ \W\XINT@geq@Eenter #1%
+}%
+\def\XINT@geq@Eenter #1\W\X\Y\Z { 0}%
+\def\xint@geq@ez\W\XINT@geq@Eenter #1%
+{%
+ \xint@UDzerofork
+ #1\dummy { 0} % il y a une retenue
+ 0\dummy { 1} % pas de retenue
+ \xint@UDforkzero
+}%
+\def\xintMax {\romannumeral0\xintmax }%
+\def\xintmax #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@max
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@max #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@max@fork #2\Z #1\Z
+}%
+\def\XINT@Max #1#2{\romannumeral0\XINT@max@fork #2\Z #1\Z }%
+\def\XINT@max@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDsignsfork
+ #1#3\dummy \XINT@max@minusminus % A < 0, B < 0
+ #1-\dummy \XINT@max@minusplus % B < 0, A >= 0
+ #3-\dummy \XINT@max@plusminus % A < 0, B >= 0
+ --\dummy {\xint@UDzerosfork
+ #1#3\dummy \XINT@max@zerozero % A = B = 0
+ #10\dummy \XINT@max@zeroplus % B = 0, A > 0
+ #30\dummy \XINT@max@pluszero % A = 0, B > 0
+ 00\dummy \XINT@max@plusplus % A, B > 0
+ \xint@UDforkzeros}%
+ \xint@UDforksigns
+ {#2}{#4}#1#3%
+}%
+\def\XINT@max@zerozero #1#2#3#4{ 0}%
+\def\XINT@max@zeroplus #1#2#3#4{ #4#2}%
+\def\XINT@max@pluszero #1#2#3#4{ #3#1}%
+\def\XINT@max@minusplus #1#2#3#4{ #4#2}%
+\def\XINT@max@plusminus #1#2#3#4{ #3#1}%
+\def\XINT@max@plusplus #1#2#3#4%
+{%
+ \ifodd\XINT@Geq {#4#2}{#3#1}
+ \xint@afterfi { #4#2}%
+ \else
+ \xint@afterfi { #3#1}%
+ \fi
+}%
+\def\XINT@max@minusminus #1#2#3#4%
+{%
+ \ifodd\XINT@Geq {#1}{#2}
+ \xint@afterfi { -#2}%
+ \else
+ \xint@afterfi { -#1}%
+ \fi
+}%
+\def\xintMin {\romannumeral0\xintmin }%
+\def\xintmin #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@min
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@min #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@min@fork #2\Z #1\Z
+}%
+\def\XINT@Min #1#2{\romannumeral0\XINT@min@fork #2\Z #1\Z }%
+\def\XINT@min@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDsignsfork
+ #1#3\dummy \XINT@min@minusminus % A < 0, B < 0
+ #1-\dummy \XINT@min@minusplus % B < 0, A >= 0
+ #3-\dummy \XINT@min@plusminus % A < 0, B >= 0
+ --\dummy {\xint@UDzerosfork
+ #1#3\dummy \XINT@min@zerozero % A = B = 0
+ #10\dummy \XINT@min@zeroplus % B = 0, A > 0
+ #30\dummy \XINT@min@pluszero % A = 0, B > 0
+ 00\dummy \XINT@min@plusplus % A, B > 0
+ \xint@UDforkzeros}%
+ \xint@UDforksigns
+ {#2}{#4}#1#3%
+}%
+\def\XINT@min@zerozero #1#2#3#4{ 0}%
+\def\XINT@min@zeroplus #1#2#3#4{ 0}%
+\def\XINT@min@pluszero #1#2#3#4{ 0}%
+\def\XINT@min@minusplus #1#2#3#4{ #3#1}%
+\def\XINT@min@plusminus #1#2#3#4{ #4#2}%
+\def\XINT@min@plusplus #1#2#3#4%
+{%
+ \ifodd\XINT@Geq {#4#2}{#3#1}
+ \xint@afterfi { #3#1}%
+ \else
+ \xint@afterfi { #4#2}%
+ \fi
+}%
+\def\XINT@min@minusminus #1#2#3#4%
+{%
+ \ifodd\XINT@Geq {#1}{#2}
+ \xint@afterfi { -#1}%
+ \else
+ \xint@afterfi { -#2}%
+ \fi
+}%
+\def\XINT@psum #1%
+{%
+ \romannumeral0\XINT@psum@checkifemptysum #1\Z
+}%
+\def\XINT@psum@checkifemptysum #1%
+{%
+ \xint@relax #1\XINT@psum@returnzero\relax \XINT@psum@RQfirst #1%
+}%
+\def\XINT@psum@returnzero #1\Z { 0}%
+\def\XINT@psum@RQfirst #1\Z
+{%
+ \expandafter\XINT@psum@loop\expandafter
+ {\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z}% avant: #1\Z
+}%
+\def\XINT@psum@loop #1#2%
+{%
+ \xint@relax #2\XINT@psum@end\relax
+ \expandafter
+ \XINT@psum@loop\expandafter
+ {\romannumeral0\expandafter\XINT@sum@A
+ \expandafter0\expandafter{\expandafter}%
+ \romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z }%
+}%
+\def\XINT@psum@end\relax\expandafter
+ \XINT@psum@loop\expandafter #1%
+ {\XINT@psum@end@ #1}%
+\def\XINT@psum@end@ #1\W\X\Y\Z #2\W\X\Y\Z
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop\romannumeral0\XINT@rev {#2}%
+}%
+\def\xintSumExpr {\romannumeral0\xintsumexpr }%
+\def\xintSum {\romannumeral0\xintsum }%
+\def\xintsum #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xintsumexpr #1\relax
+}%
+\def\xintsumexpr #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@sum@checkifempty #1\Z {\XINT@psum }{\XINT@psum }%
+}%
+\def\XINT@sum@checkifempty #1%
+{%
+ \xint@relax #1\XINT@sum@returnzero\relax
+ \XINT@sum@checksign #1%
+}%
+\def\XINT@sum@returnzero #1\Z #2#3{ 0}%
+\def\XINT@sum@checksign #1%
+{%
+ \xint@zero #1\XINT@sum@skipzeroinput0%
+ \xint@UDsignfork
+ #1\dummy \XINT@sum@pushneg
+ -\dummy \XINT@sum@pushpos
+ \xint@UDforksign
+ #1%
+}%
+\def\XINT@sum@skipzeroinput #1\xint@UDforksign #2\Z #3#4%
+{%
+ \XINT@sum@xpxpnext {#3}{#4}%
+}%
+\def\XINT@sum@pushpos #1#2\Z #3#4%
+{%
+ \XINT@sum@xpxpnext {#3{#1#2}}{#4}%
+}%
+\def\XINT@sum@pushneg #1#2\Z #3#4%
+{%
+ \XINT@sum@xpxpnext {#3}{#4{#2}}%
+}%
+\def\XINT@sum@xpxpnext #1#2#3%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@sum@checkiffinished #3\Z {#1}{#2}%
+}%
+\def\XINT@sum@checkiffinished #1%
+{%
+ \xint@relax #1\XINT@sum@end\relax
+ \XINT@sum@checksign #1%
+}%
+\def\XINT@sum@end\relax\XINT@sum@checksign\relax #1\Z #2#3%
+ {\xintsub{#2\relax}{#3\relax}}%
+\def\XINT@sum@A #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@sum@az
+ \W\XINT@sum@B #1{#3#4#5#6}{#2}%
+}%
+\def\xint@sum@az\W\XINT@sum@B #1#2%
+{%
+ \XINT@sum@AC@checkcarry #1%
+}%
+\def\XINT@sum@B #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{%
+ \xint@w
+ #5\xint@sum@bz
+ \W\XINT@sum@E #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z
+}%
+\def\XINT@sum@E #1#2#3#4#5#6%
+{\expandafter
+ \XINT@sum@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax
+}%
+\def\XINT@sum@ABEA #1#2#3#4#5#6#7%
+{%
+ \XINT@sum@A #2{#7#6#5#4#3}%
+}%
+\def\xint@sum@bz\W\XINT@sum@E #1#2#3#4#5#6%
+{\expandafter
+ \XINT@sum@CC\the\numexpr #1+10#5#4#3#2\relax
+}%
+\def\XINT@sum@CC #1#2#3#4#5#6#7%
+{%
+ \XINT@sum@AC@checkcarry #2{#7#6#5#4#3}%
+}%
+\def\XINT@sum@AC@checkcarry #1%
+{%
+ \xint@zero #1\xint@sum@AC@nocarry 0\XINT@sum@C
+}%
+\def\xint@sum@AC@nocarry 0\XINT@sum@C #1#2\W\X\Y\Z { #1#2}%
+\def\XINT@sum@C #1#2#3#4#5%
+{%
+ \xint@w
+ #2\xint@sum@cz
+ \W\XINT@sum@D {#5#4#3#2}{#1}%
+}%
+\def\XINT@sum@D #1%
+{\expandafter
+ \XINT@sum@CC\the\numexpr 1+10#1\relax
+}%
+\def\xint@sum@cz\W\XINT@sum@D #1#2{ #21000}%
+\def\xintMul {\romannumeral0\xintmul }%
+\def\xintmul #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@mul
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@mul #1#2%
+{\expandafter\expandafter\expandafter
+ \XINT@mul@fork #2\Z #1\Z
+}%
+\def\XINT@Mul #1#2{\romannumeral0\XINT@mul@fork #2\Z #1\Z }%
+\def\XINT@mul@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@mul@zero
+ #3\dummy \XINT@mul@zero
+ 0\dummy
+ {\xint@UDsignsfork
+ #1#3\dummy \XINT@mul@minusminus % #1 = #3 = -
+ #1-\dummy \XINT@mul@minusplus % #1 = -
+ #3-\dummy \XINT@mul@plusminus % #3 = -
+ --\dummy \XINT@mul@plusplus
+ \xint@UDforksigns}%
+ \xint@UDforkzero
+ {#2}{#4}#1#3%
+}%
+\def\XINT@mul@zero #1#2#3#4{ 0}%
+\def\XINT@mul@minusminus #1#2#3#4%
+{%
+ \expandafter
+ \XINT@mul@enter\romannumeral0%
+ \XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z
+}%
+\def\XINT@mul@minusplus #1#2#3#4%
+{%
+ \expandafter\space\expandafter-%
+ \romannumeral0\expandafter
+ \XINT@mul@enter\romannumeral0%
+ \XINT@RQ {}#4#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z
+}%
+\def\XINT@mul@plusminus #1#2#3#4%
+{%
+ \expandafter\space\expandafter-%
+ \romannumeral0\expandafter
+ \XINT@mul@enter\romannumeral0%
+ \XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #3#1\W\X\Y\Z
+}%
+\def\XINT@mul@plusplus #1#2#3#4%
+{%
+ \expandafter
+ \XINT@mul@enter\romannumeral0%
+ \XINT@RQ {}#4#2\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #3#1\W\X\Y\Z
+}%
+\def\XINT@mul@add@A #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@mul@add@az
+ \W\XINT@mul@add@AB #1{#3#4#5#6}{#2}%
+}%
+\def\xint@mul@add@az\W\XINT@mul@add@AB #1#2%
+{%
+ \XINT@mul@add@AC@checkcarry #1%
+}%
+\def\XINT@mul@add@AB #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{%
+ \XINT@mul@add@ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z
+}%
+\def\XINT@mul@add@ABE #1#2#3#4#5#6%
+{\expandafter
+ \XINT@mul@add@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax.%
+}%
+\def\XINT@mul@add@ABEA #1#2#3.#4%
+{%
+ \XINT@mul@add@A #2{#3#4}%
+}%
+\def\XINT@mul@add@AC@checkcarry #1%
+{%
+ \xint@zero #1\xint@mul@add@AC@nocarry 0\XINT@mul@add@C
+}%
+\def\xint@mul@add@AC@nocarry 0\XINT@mul@add@C #1#2\W\X\Y\Z
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1%
+}%
+\def\XINT@mul@add@C #1#2#3#4#5%
+{%
+ \xint@w
+ #5\xint@mul@add@cw
+ #4\xint@mul@add@cx
+ #3\xint@mul@add@cy
+ #2\xint@mul@add@cz
+ \W\XINT@mul@add@CD {#5#4#3#2}{#1}%
+}%
+\def\XINT@mul@add@CD #1%
+{\expandafter
+ \XINT@mul@add@CC\the\numexpr 1+10#1\relax.%
+}%
+\def\XINT@mul@add@CC #1#2#3.#4%
+{%
+ \XINT@mul@add@AC@checkcarry #2{#3#4}%
+}%
+\def\xint@mul@add@cw
+ #1\xint@mul@add@cx
+ #2\xint@mul@add@cy
+ #3\xint@mul@add@cz
+ \W\XINT@mul@add@CD
+{\expandafter
+ \XINT@mul@add@CDw\the\numexpr 1+#1#2#3\relax.%
+}%
+\def\XINT@mul@add@CDw #1.#2#3\X\Y\Z
+{%
+ \XINT@mul@add@end #1#3%
+}%
+\def\xint@mul@add@cx
+ #1\xint@mul@add@cy
+ #2\xint@mul@add@cz
+ \W\XINT@mul@add@CD
+{\expandafter
+ \XINT@mul@add@CDx\the\numexpr 1+#1#2\relax.%
+}%
+\def\XINT@mul@add@CDx #1.#2#3\Y\Z
+{%
+ \XINT@mul@add@end #1#3%
+}%
+\def\xint@mul@add@cy
+ #1\xint@mul@add@cz
+ \W\XINT@mul@add@CD
+{\expandafter
+ \XINT@mul@add@CDy\the\numexpr 1+#1\relax.%
+}%
+\def\XINT@mul@add@CDy #1.#2#3\Z
+{%
+ \XINT@mul@add@end #1#3%
+}%
+\def\xint@mul@add@cz\W\XINT@mul@add@CD #1#2#3{\XINT@mul@add@end #1#3}%
+\def\XINT@mul@add@end #1#2#3#4#5%
+{\expandafter\space
+ \the\numexpr #1#2#3#4#5\relax
+}%
+\def\XINT@mul@Ar #1#2#3#4#5#6%
+{%
+ \xint@z #6\xint@mul@br\Z\XINT@mul@Br #1{#6#5#4#3}{#2}%
+}%
+\def\xint@mul@br\Z\XINT@mul@Br #1#2%
+{%
+ \XINT@sum@AC@checkcarry #1%
+}%
+\def\XINT@mul@Br #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{\expandafter
+ \XINT@mul@ABEAr\the\numexpr #1+10#2+#8#7#6#5\relax.{#3}#4\W\X\Y\Z
+}%
+\def\XINT@mul@ABEAr #1#2#3#4#5#6.#7%
+{%
+ \XINT@mul@Ar #2{#7#6#5#4#3}%
+}%
+\def\XINT@mul@Mr #1%
+{%
+ \expandafter
+ \XINT@mul@Mr@checkifzeroorone
+ \expandafter{\the\numexpr #1\relax}%
+}%
+\def\XINT@mul@Mr@checkifzeroorone #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@mul@Mr@zero
+ \or
+ \expandafter\XINT@mul@Mr@one
+ \else
+ \expandafter\XINT@mul@Nr
+ \fi
+ {0000}{}{#1}%
+}%
+\def\XINT@mul@Mr@zero #1\Z\Z\Z\Z { 0000}%
+\def\XINT@mul@Mr@one #1#2#3#4\Z\Z\Z\Z { #4}%
+\def\XINT@mul@Nr #1#2#3#4#5#6#7%
+{%
+ \xint@z #4\xint@mul@pr\Z\XINT@mul@Pr {#1}{#3}{#7#6#5#4}{#2}{#3}%
+}%
+\def\XINT@mul@Pr #1#2#3%
+{\expandafter
+ \XINT@mul@Lr\the\numexpr 10000#1+#2*#3\relax
+}%
+\def\XINT@mul@Lr 1#1#2#3#4#5#6#7#8#9%
+{%
+ \XINT@mul@Nr {#1#2#3#4}{#9#8#7#6#5}%
+}%
+\def\xint@mul@pr\Z\XINT@mul@Pr #1#2#3#4#5%
+{%
+ \xint@quatrezeros #1\XINT@mul@Mr@end@nocarry 0000\XINT@mul@Mr@end@carry
+ #1{#4}%
+}%
+\def\XINT@mul@Mr@end@nocarry 0000\XINT@mul@Mr@end@carry 0000#1{ #1}%
+\def\XINT@mul@Mr@end@carry #1#2#3#4#5{ #5#4#3#2#1}%
+\def\XINT@mul@M #1%
+{\expandafter
+ \XINT@mul@M@checkifzeroorone
+ \expandafter{\the\numexpr #1\relax}%
+}%
+\def\XINT@mul@M@checkifzeroorone #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@mul@M@zero
+ \or
+ \expandafter\XINT@mul@M@one
+ \else
+ \expandafter\XINT@mul@N
+ \fi
+ {0000}{}{#1}%
+}%
+\def\XINT@mul@M@zero #1\Z\Z\Z\Z { 0}%
+\def\XINT@mul@M@one #1#2#3#4\Z\Z\Z\Z {%
+ \expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0\XINT@rev{#4}%
+}%
+\def\XINT@mul@N #1#2#3#4#5#6#7%
+{%
+ \xint@z #4\xint@mul@p\Z\XINT@mul@P {#1}{#3}{#7#6#5#4}{#2}{#3}%
+}%
+\def\XINT@mul@P #1#2#3%
+{\expandafter
+ \XINT@mul@L\the\numexpr 10000#1+#2*#3\relax
+}%
+\def\XINT@mul@L 1#1#2#3#4#5#6#7#8#9%
+{%
+ \XINT@mul@N {#1#2#3#4}{#5#6#7#8#9}%
+}%
+\def\xint@mul@p\Z\XINT@mul@P #1#2#3#4#5%
+{%
+ \XINT@mul@M@end #1#4%
+}%
+\def\XINT@mul@M@end #1#2#3#4#5#6#7#8%
+{\expandafter\space
+ \the\numexpr #1#2#3#4#5#6#7#8\relax
+}%
+\def\XINT@mul@enter #1\W\X\Y\Z #2#3#4#5%
+{%
+ \xint@w
+ #5\xint@mul@enterw
+ #4\xint@mul@enterx
+ #3\xint@mul@entery
+ #2\xint@mul@enterz
+ \W\XINT@mul@start {#2#3#4#5}#1\W\X\Y\Z
+}%
+\def\xint@mul@enterw
+ #1\xint@mul@enterx
+ #2\xint@mul@entery
+ #3\xint@mul@enterz
+ \W\XINT@mul@start #4#5\W\X\Y\Z \X\Y\Z
+{%
+ \XINT@mul@M {#3#2#1}#5\Z\Z\Z\Z
+}%
+\def\xint@mul@enterx
+ #1\xint@mul@entery
+ #2\xint@mul@enterz
+ \W\XINT@mul@start #3#4\W\X\Y\Z \Y\Z
+{%
+ \XINT@mul@M {#2#1}#4\Z\Z\Z\Z
+}%
+\def\xint@mul@entery
+ #1\xint@mul@enterz
+ \W\XINT@mul@start #2#3\W\X\Y\Z \Z
+{%
+ \XINT@mul@M {#1}#3\Z\Z\Z\Z
+}%
+\def\XINT@mul@start #1#2\W\X\Y\Z
+{\expandafter
+ \XINT@mul@main \expandafter
+ {\romannumeral0\XINT@mul@Mr {#1}#2\Z\Z\Z\Z}#2\W\X\Y\Z
+}%
+\def\XINT@mul@main #1#2\W\X\Y\Z #3#4#5#6%
+{%
+ \xint@w
+ #6\xint@mul@mainw
+ #5\xint@mul@mainx
+ #4\xint@mul@mainy
+ #3\xint@mul@mainz
+ \W\XINT@mul@compute {#1}{#3#4#5#6}#2\W\X\Y\Z
+}%
+\def\XINT@mul@compute #1#2#3\W\X\Y\Z
+{\expandafter
+ \XINT@mul@main \expandafter
+ {\romannumeral0\expandafter
+ \XINT@mul@Ar \expandafter0\expandafter{\expandafter}%
+ \romannumeral0\XINT@mul@Mr {#2}#3\Z\Z\Z\Z \W\X\Y\Z 0000#1\W\X\Y\Z
+ }#3\W\X\Y\Z
+}%
+\def\xint@mul@mainw
+ #1\xint@mul@mainx
+ #2\xint@mul@mainy
+ #3\xint@mul@mainz
+ \W\XINT@mul@compute #4#5#6\W\X\Y\Z \X\Y\Z
+{%
+ \expandafter
+ \XINT@mul@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#3#2#1}#6\Z\Z\Z\Z
+ \W\X\Y\Z 000#4\W\X\Y\Z
+}%
+\def\xint@mul@mainx
+ #1\xint@mul@mainy
+ #2\xint@mul@mainz
+ \W\XINT@mul@compute #3#4#5\W\X\Y\Z \Y\Z
+{%
+ \expandafter
+ \XINT@mul@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#2#1}#5\Z\Z\Z\Z
+ \W\X\Y\Z 00#3\W\X\Y\Z
+}%
+\def\xint@mul@mainy
+ #1\xint@mul@mainz
+ \W\XINT@mul@compute #2#3#4\W\X\Y\Z \Z
+{%
+ \expandafter
+ \XINT@mul@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#1}#4\Z\Z\Z\Z
+ \W\X\Y\Z 0#2\W\X\Y\Z
+}%
+\def\xint@mul@mainz\W\XINT@mul@compute #1#2#3\W\X\Y\Z
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop\romannumeral0\XINT@rev{#1}%
+}%
+\def\xintSqr {\romannumeral0\xintsqr }%
+\def\xintsqr #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@sqr
+ \expandafter\expandafter\expandafter
+ {\xintAbs{#1}}% fait l'expansion de #1 et se d\'ebarrasse du signe
+}%
+\def\XINT@sqr #1%
+{\expandafter
+ \XINT@mul@enter
+ \romannumeral0%
+ \XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z
+ \W\X\Y\Z #1\W\X\Y\Z
+}%
+\def\XINT@posprod #1%
+{%
+ \XINT@pprod@checkifempty #1\Z
+}%
+\def\XINT@pprod@checkifempty #1%
+{%
+ \xint@relax #1\XINT@pprod@emptyproduct\relax
+ \XINT@pprod@RQfirst #1%
+}%
+\def\XINT@pprod@emptyproduct #1\Z { 1}%
+\def\XINT@pprod@RQfirst #1\Z
+{%
+ \expandafter\XINT@pprod@getnext\expandafter
+ {\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z}%
+}%
+\def\XINT@pprod@getnext #1#2%
+{%
+ \XINT@pprod@checkiffinished #2\Z {#1}%
+}%
+\def\XINT@pprod@checkiffinished #1%
+{%
+ \xint@relax #1\XINT@pprod@end\relax
+ \XINT@pprod@compute #1%
+}%
+\def\XINT@pprod@compute #1\Z #2%
+{%
+ \expandafter
+ \XINT@pprod@getnext
+ \expandafter
+ {\romannumeral0\XINT@prod@mul@enter #2\W\X\Y\Z #1\W\X\Y\Z}%
+}%
+\def\XINT@pprod@end\relax\XINT@pprod@compute #1\Z #2%
+{%
+ \expandafter
+ \xint@cleanupzeros@andstop
+ \romannumeral0\XINT@rev {#2}%
+}%
+\def\xintProductExpr {\romannumeral0\xintproductexpr }%
+\def\xintPrd {\romannumeral0\xintprd }%
+\def\xintprd #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xintproductexpr #1\relax
+}%
+\def\xintproductexpr #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@prod@checkifempty #1\Z
+}%
+\def\XINT@prod@checkifempty #1%
+{%
+ \xint@relax #1\XINT@prod@emptyproduct\relax
+ \XINT@prod@checkfirstsign #1%
+}%
+\def\XINT@prod@emptyproduct #1\Z { 1}%
+\def\XINT@prod@checkfirstsign #1%
+{%
+ \xint@zero #1\XINT@prod@returnzero0%
+ \xint@UDsignfork
+ #1\dummy \XINT@prod@firstisneg
+ -\dummy \XINT@prod@firstispos
+ \xint@UDforksign
+ #1%
+}%
+\def\XINT@prod@returnzero #1\relax { 0}%
+\def\XINT@prod@firstisneg #1#2\Z
+{%
+ \expandafter\XINT@prod@xpxpnext\expandafter
+ 0\expandafter{\romannumeral0\XINT@RQ {}#2\R\R\R\R\R\R\R\R\Z}%
+}%
+\def\XINT@prod@firstispos #1\Z
+{%
+ \expandafter\XINT@prod@xpxpnext\expandafter
+ 1\expandafter{\romannumeral0\XINT@RQ {}#1\R\R\R\R\R\R\R\R\Z }%
+}%
+\def\XINT@prod@xpxpnext #1#2#3%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@prod@checkiffinished #3\Z {#2}#1%
+}%
+\def\XINT@prod@checkiffinished #1%
+{%
+ \xint@relax #1\XINT@prod@end\relax
+ \XINT@prod@checksign #1%
+}%
+\def\XINT@prod@checksign #1%
+{%
+ \xint@zero #1\XINT@prod@returnzero0%
+ \xint@UDsignfork
+ #1\dummy \XINT@prod@neg
+ -\dummy \XINT@prod@pos
+ \xint@UDforksign
+ #1%
+}%
+\def\XINT@prod@pos #1\Z #2#3%
+{%
+ \expandafter
+ \XINT@prod@xpxpnext
+ \expandafter
+ #3%
+ \expandafter
+ {\romannumeral0\XINT@prod@mul@enter #2\W\X\Y\Z #1\W\X\Y\Z }%
+}%
+\def\XINT@prod@neg #1#2\Z #3#4%
+{%
+ \expandafter
+ \XINT@prod@xpxpnext
+ \expandafter
+ {\the\numexpr 1-#4\expandafter}%
+ \expandafter
+ {\romannumeral0\XINT@prod@mul@enter #3\W\X\Y\Z #2\W\X\Y\Z }%
+}%
+\def\XINT@prod@end\relax\XINT@prod@checksign #1\Z #2#3%
+{%
+ \expandafter
+ \xint@prod@cleanupzeros
+ \romannumeral0\XINT@rev {#2#3}%
+}%
+\def\xint@prod@cleanupzeros #1#2#3#4#5%
+{%
+ \expandafter\space\the\numexpr (2*#1-1)*#2#3#4#5\relax
+}%
+\def\XINT@prod@add@A #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@prod@add@az
+ \W\XINT@prod@add@AB #1{#3#4#5#6}{#2}%
+}%
+\def\xint@prod@add@az\W\XINT@prod@add@AB #1#2%
+{%
+ \XINT@prod@add@AC@checkcarry #1%
+}%
+\def\XINT@prod@add@AC@checkcarry #1%
+{%
+ \xint@zero #1\xint@prod@add@AC@nocarry 0\XINT@prod@add@C
+}%
+\def\xint@prod@add@AC@nocarry 0\XINT@prod@add@C
+{%
+ \XINT@prod@add@F
+}%
+\def\XINT@prod@add@AB #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{%
+ \XINT@prod@add@ABE #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z
+}%
+\def\XINT@prod@add@ABE #1#2#3#4#5#6%
+{\expandafter
+ \XINT@prod@add@ABEA\the\numexpr #1+10#5#4#3#2+#6\relax
+}%
+\def\XINT@prod@add@ABEA #1#2#3#4#5#6#7%
+{%
+ \XINT@prod@add@A #2{#7#6#5#4#3}%<-- attention on met donc \`a droite
+}%
+\def\XINT@prod@add@C #1#2#3#4#5%
+{%
+ \xint@w
+ #5\xint@prod@add@cw
+ #4\xint@prod@add@cx
+ #3\xint@prod@add@cy
+ #2\xint@prod@add@cz
+ \W\XINT@prod@add@CD {#5#4#3#2}{#1}%
+}%
+\def\XINT@prod@add@CD #1%
+{\expandafter
+ \XINT@prod@add@CC\the\numexpr 1+10#1\relax
+}%
+\def\XINT@prod@add@CC #1#2#3#4#5#6#7%
+{%
+ \XINT@prod@add@AC@checkcarry #2{#7#6#5#4#3}%
+}%
+\def\xint@prod@add@cw
+ #1\xint@prod@add@cx
+ #2\xint@prod@add@cy
+ #3\xint@prod@add@cz
+ \W\XINT@prod@add@CD
+{\expandafter
+ \XINT@prod@add@CDw\the\numexpr 1+10#1#2#3\relax
+}%
+\def\XINT@prod@add@CDw #1#2#3#4#5#6%
+{%
+ \xint@quatrezeros #2#3#4#5\XINT@prod@add@endDw@zeros
+ 0000\XINT@prod@add@endDw #2#3#4#5%
+}%
+\def\XINT@prod@add@endDw@zeros 0000\XINT@prod@add@endDw 0000#1\X\Y\Z{ #1}%
+\def\XINT@prod@add@endDw #1#2#3#4#5\X\Y\Z{ #5#4#3#2#1}%
+\def\xint@prod@add@cx
+ #1\xint@prod@add@cy
+ #2\xint@prod@add@cz
+ \W\XINT@prod@add@CD
+{\expandafter
+ \XINT@prod@add@CDx\the\numexpr 1+100#1#2\relax
+}%
+\def\XINT@prod@add@CDx #1#2#3#4#5#6%
+{%
+ \xint@quatrezeros #2#3#4#5\XINT@prod@add@endDx@zeros
+ 0000\XINT@prod@add@endDx #2#3#4#5%
+}%
+\def\XINT@prod@add@endDx@zeros 0000\XINT@prod@add@endDx 0000#1\Y\Z{ #1}%
+\def\XINT@prod@add@endDx #1#2#3#4#5\Y\Z{ #5#4#3#2#1}%
+\def\xint@prod@add@cy
+ #1\xint@prod@add@cz
+ \W\XINT@prod@add@CD
+{\expandafter
+ \XINT@prod@add@CDy\the\numexpr 1+1000#1\relax
+}%
+\def\XINT@prod@add@CDy #1#2#3#4#5#6%
+{%
+ \xint@quatrezeros #2#3#4#5\XINT@prod@add@endDy@zeros
+ 0000\XINT@prod@add@endDy #2#3#4#5%
+}%
+\def\XINT@prod@add@endDy@zeros 0000\XINT@prod@add@endDy 0000#1\Z{ #1}%
+\def\XINT@prod@add@endDy #1#2#3#4#5\Z{ #5#4#3#2#1}%
+\def\xint@prod@add@cz\W\XINT@prod@add@CD #1#2{ #21000}%
+\def\XINT@prod@add@F #1#2#3#4#5%
+{%
+ \xint@w
+ #5\xint@prod@add@Gw
+ #4\xint@prod@add@Gx
+ #3\xint@prod@add@Gy
+ #2\xint@prod@add@Gz
+ \W\XINT@prod@add@G {#2#3#4#5}{#1}%
+}%
+\def\XINT@prod@add@G #1#2%
+{%
+ \XINT@prod@add@F {#2#1}%
+}%
+\def\xint@prod@add@Gw
+ #1\xint@prod@add@Gx
+ #2\xint@prod@add@Gy
+ #3\xint@prod@add@Gz
+ \W\XINT@prod@add@G #4%
+{%
+ \xint@quatrezeros #3#2#10\XINT@prod@add@endGw@zeros
+ 0000\XINT@prod@add@endGw #3#2#10%
+}%
+\def\XINT@prod@add@endGw@zeros 0000\XINT@prod@add@endGw 0000#1\X\Y\Z{ #1}%
+\def\XINT@prod@add@endGw #1#2#3#4#5\X\Y\Z{ #5#1#2#3#4}%
+\def\xint@prod@add@Gx
+ #1\xint@prod@add@Gy
+ #2\xint@prod@add@Gz
+ \W\XINT@prod@add@G #3%
+{%
+ \xint@quatrezeros #2#100\XINT@prod@add@endGx@zeros
+ 0000\XINT@prod@add@endGx #2#100%
+}%
+\def\XINT@prod@add@endGx@zeros 0000\XINT@prod@add@endGx 0000#1\Y\Z{ #1}%
+\def\XINT@prod@add@endGx #1#2#3#4#5\Y\Z{ #5#1#2#3#4}%
+\def\xint@prod@add@Gy
+ #1\xint@prod@add@Gz
+ \W\XINT@prod@add@G #2%
+{%
+ \xint@quatrezeros #1000\XINT@prod@add@endGy@zeros
+ 0000\XINT@prod@add@endGy #1000%
+}%
+\def\XINT@prod@add@endGy@zeros 0000\XINT@prod@add@endGy 0000#1\Z{ #1}%
+\def\XINT@prod@add@endGy #1#2#3#4#5\Z{ #5#1#2#3#4}%
+\def\xint@prod@add@Gz\W\XINT@prod@add@G #1#2{ #2}%
+\def\XINT@prod@mul@enter #1\W\X\Y\Z #2#3#4#5%
+{%
+ \xint@w
+ #5\xint@prod@mul@enterw
+ #4\xint@prod@mul@enterx
+ #3\xint@prod@mul@entery
+ #2\xint@prod@mul@enterz
+ \W\XINT@prod@mul@start {#2#3#4#5}#1\W\X\Y\Z
+}%
+\def\xint@prod@mul@enterw
+ #1\xint@prod@mul@enterx
+ #2\xint@prod@mul@entery
+ #3\xint@prod@mul@enterz
+ \W\XINT@prod@mul@start #4#5\W\X\Y\Z \X\Y\Z
+{%
+ \XINT@mul@Mr {#3#2#1}#5\Z\Z\Z\Z
+}%
+\def\xint@prod@mul@enterx
+ #1\xint@prod@mul@entery
+ #2\xint@prod@mul@enterz
+ \W\XINT@prod@mul@start #3#4\W\X\Y\Z \Y\Z
+{%
+ \XINT@mul@Mr {#2#1}#4\Z\Z\Z\Z
+}%
+\def\xint@prod@mul@entery
+ #1\xint@prod@mul@enterz
+ \W\XINT@prod@mul@start #2#3\W\X\Y\Z \Z
+{%
+ \XINT@mul@Mr {#1}#3\Z\Z\Z\Z
+}%
+\def\XINT@prod@mul@start #1#2\W\X\Y\Z
+{\expandafter
+ \XINT@prod@mul@main \expandafter
+ {\romannumeral0%
+ \XINT@mul@Mr {#1}#2\Z\Z\Z\Z
+ }#2\W\X\Y\Z
+}%
+\def\XINT@prod@mul@main #1#2\W\X\Y\Z #3#4#5#6%
+{%
+ \xint@w
+ #6\xint@prod@mul@mainw
+ #5\xint@prod@mul@mainx
+ #4\xint@prod@mul@mainy
+ #3\xint@prod@mul@mainz
+ \W\XINT@prod@mul@compute {#1}{#3#4#5#6}#2\W\X\Y\Z
+}%
+\def\XINT@prod@mul@compute #1#2#3\W\X\Y\Z
+{\expandafter
+ \XINT@prod@mul@main \expandafter
+ {\romannumeral0\expandafter
+ \XINT@mul@Ar \expandafter0\expandafter{\expandafter}%
+ \romannumeral0\XINT@mul@Mr {#2}#3\Z\Z\Z\Z \W\X\Y\Z 0000#1\W\X\Y\Z
+ }#3\W\X\Y\Z
+}%
+\def\xint@prod@mul@mainw
+ #1\xint@prod@mul@mainx
+ #2\xint@prod@mul@mainy
+ #3\xint@prod@mul@mainz
+ \W\XINT@prod@mul@compute #4#5#6\W\X\Y\Z \X\Y\Z
+{%
+ \expandafter
+ \XINT@prod@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#3#2#1}#6\Z\Z\Z\Z
+ \W\X\Y\Z 000#4\W\X\Y\Z
+}%
+\def\xint@prod@mul@mainx
+ #1\xint@prod@mul@mainy
+ #2\xint@prod@mul@mainz
+ \W\XINT@prod@mul@compute #3#4#5\W\X\Y\Z \Y\Z
+{%
+ \expandafter
+ \XINT@prod@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#2#1}#5\Z\Z\Z\Z
+ \W\X\Y\Z 00#3\W\X\Y\Z
+}%
+\def\xint@prod@mul@mainy
+ #1\xint@prod@mul@mainz
+ \W\XINT@prod@mul@compute #2#3#4\W\X\Y\Z \Z
+{%
+ \expandafter
+ \XINT@prod@add@A \expandafter0\expandafter{\expandafter}%
+ \romannumeral0%
+ \XINT@mul@Mr {#1}#4\Z\Z\Z\Z
+ \W\X\Y\Z 0#2\W\X\Y\Z
+}%
+\def\xint@prod@mul@mainz\W\XINT@prod@mul@compute #1#2#3\W\X\Y\Z
+{ #1}%
+\def\xintFac {\romannumeral0\xintfac }%
+\def\xintfac #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@fac@fork
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\XINT@Fac {\romannumeral0\XINT@fac@fork }%
+\def\XINT@fac@fork #1%
+{%
+ \ifcase\xintSgn {#1}
+ \xint@afterfi{\expandafter\space\expandafter 1\xint@gobble }%
+ \or
+ \expandafter\XINT@fac@checklength
+ \else
+ \xint@afterfi{\xintError:FactorialOfNegativeNumber
+ \expandafter\space\expandafter 1\xint@gobble }%
+ \fi
+ {#1}%
+}%
+\def\XINT@fac@checklength #1%
+{%
+ \ifnum\xintLen {#1} > 9
+ \xint@afterfi{\xintError:FactorialOfTooBigNumber
+ \expandafter\space\expandafter 1\xint@gobble@three }%
+ \else
+ \expandafter\XINT@fac@loop
+ \fi
+ {1}{#1}{}%
+}%
+\def\XINT@fac@loop #1#2#3%
+{%
+ \ifnum #1<#2
+ \expandafter
+ \XINT@fac@loop
+ \expandafter
+ {\the\numexpr #1+1\expandafter }%
+ \else
+ \expandafter\XINT@fac@docomputation
+ \fi
+ {#2}{#3{#1}}%
+}%
+\def\XINT@fac@docomputation #1#2%
+{%
+ \XINT@posprod #2\relax
+}%
+\def\xintPow {\romannumeral0\xintpow }%
+\def\xintpow #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@pow
+ #1\Z%
+}%
+\def\xint@pow #1#2\Z
+{%
+ \xint@UDsignfork
+ #1\dummy \XINT@pow@Aneg
+ -\dummy \XINT@pow@Anonneg
+ \xint@UDforksign
+ #1{#2}%
+}%
+\def\XINT@pow@Aneg #1#2#3%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@pow@Aneg@
+ \expandafter\expandafter\expandafter
+ {#3}{#2}%
+}%
+\def\XINT@pow@Aneg@ #1%
+{%
+ \ifcase\XINT@Odd{#1}
+ \or \expandafter\XINT@pow@Aneg@Bodd
+ \fi
+ \XINT@pow@Anonneg@ {#1}%
+}%
+\def\XINT@pow@Aneg@Bodd #1%
+{%
+ \expandafter\XINT@opp\romannumeral0\XINT@pow@Anonneg@
+}%
+\def\XINT@pow@Anonneg #1#2#3%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@pow@Anonneg@
+ \expandafter\expandafter\expandafter
+ {#3}{#1#2}%
+}%
+\def\XINT@pow@Anonneg@ #1#2%
+{%
+ \ifcase\XINT@Cmp {#2}{1}
+ \expandafter\XINT@pow@AisOne
+ \or
+ \expandafter\XINT@pow@AatleastTwo
+ \else
+ \expandafter\XINT@pow@AisZero
+ \fi
+ {#1}{#2}%
+}%
+\def\XINT@pow@AisOne #1#2{ 1}%
+\def\XINT@pow@AisZero #1#2%
+{%
+ \ifcase\XINT@Sgn {#1}
+ \xint@afterfi { 1}%
+ \or
+ \xint@afterfi { 0}%
+ \else
+ \xint@afterfi {\xintError:DivisionByZero\space 0}%
+ \fi
+}%
+\def\XINT@pow@AatleastTwo #1%
+{%
+ \ifcase\XINT@Sgn {#1}
+ \expandafter\XINT@pow@BisZero
+ \or
+ \expandafter\XINT@pow@checkBlength
+ \else
+ \expandafter\XINT@pow@BisNegative
+ \fi
+ {#1}%
+}%
+\def\XINT@pow@BisNegative #1#2{\xintError:FractionRoundedToZero\space 0}%
+\def\XINT@pow@BisZero #1#2{ 1}%
+\def\XINT@pow@checkBlength #1#2%
+{%
+ \ifnum\xintLen{#1} >9
+ \expandafter\XINT@pow@BtooBig
+ \else
+ \expandafter\XINT@pow@loop
+ \fi
+ {#1}{#2}\XINT@posprod
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+\def\XINT@pow@BtooBig #1\xint@UNDEF #2\xint@UNDEF
+ {\xintError:ExponentTooBig\space 0}%
+\def\XINT@pow@loop #1#2%
+{%
+ \ifnum #1 = 1
+ \expandafter\XINT@pow@loop@end
+ \else
+ \xint@afterfi{\expandafter\XINT@pow@loop@a
+ \expandafter{\the\numexpr 2*(#1/2)-#1\expandafter }%
+ % b mod 2
+ \expandafter{\the\numexpr #1-#1/2\expandafter }%
+ % [b/2]
+ \expandafter{\romannumeral0\xintsqr{#2}}}%
+ \fi
+ {{#2}}%
+}%
+\def\XINT@pow@loop@end {\romannumeral0\XINT@rord@main {}\relax }%
+\def\XINT@pow@loop@a #1%
+{%
+ \ifnum #1 = 1
+ \expandafter\XINT@pow@loop
+ \else
+ \expandafter\XINT@pow@loop@throwaway
+ \fi
+}%
+\def\XINT@pow@loop@throwaway #1#2#3%
+{%
+ \XINT@pow@loop {#1}{#2}%
+}%
+\def\xintQuo {\romannumeral0\xintquo }%
+\def\xintRem {\romannumeral0\xintrem }%
+\def\xintquo {%
+ \expandafter
+ \xint@firstoftwo@andstop
+ \romannumeral0\xintdivision }%
+\def\xintrem {%
+ \expandafter
+ \xint@secondoftwo@andstop
+ \romannumeral0\xintdivision }%
+\def\xintDivision {\romannumeral0\xintdivision }%
+\def\xintdivision #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@division
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@division #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@div@fork #2\Z #1\Z
+}%
+\def\XINT@Division #1#2{\romannumeral0\XINT@div@fork #2\Z #1\Z }%
+\def\XINT@div@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@div@BisZero
+ #3\dummy \XINT@div@AisZero
+ 0\dummy
+ {\xint@UDsignfork
+ #1\dummy \XINT@div@BisNegative % B < 0
+ #3\dummy \XINT@div@AisNegative % A < 0, B > 0
+ -\dummy \XINT@div@plusplus % B > 0, A > 0
+ \xint@UDforksign }%
+ \xint@UDforkzero
+ {#2}{#4}#1#3% #1#2=B, #3#4=A
+}%
+\def\XINT@div@BisZero #1#2#3#4%
+ {\xintError:DivisionByZero\space {0}{0}}%
+\def\XINT@div@AisZero #1#2#3#4{ {0}{0}}%
+\def\XINT@div@plusplus #1#2#3#4%
+{%
+ \XINT@div@prepare {#3#1}{#4#2}%
+}%
+\def\XINT@div@BisNegative #1#2#3#4%
+{%
+ \expandafter\XINT@div@BisNegative@post
+ \romannumeral0\XINT@div@fork #1\Z #4#2\Z
+}%
+\def\XINT@div@BisNegative@post #1#2%
+{%
+ \expandafter\space\expandafter
+ {\romannumeral0\XINT@opp #1}{#2}%
+}%
+\def\XINT@div@AisNegative #1#2#3#4%
+{%
+ \expandafter\XINT@div@AisNegative@post
+ \romannumeral0\XINT@div@prepare {#3#1}{#2}{#3#1}%
+}%
+\def\XINT@div@AisNegative@post #1#2%
+{%
+ \ifcase\xintSgn {#2}
+ \expandafter \XINT@div@AisNegative@zerorem
+ \or
+ \expandafter \XINT@div@AisNegative@posrem
+ \fi
+ {#1}{#2}%
+}%
+\def\XINT@div@AisNegative@zerorem #1#2#3%
+{%
+ \expandafter\space\expandafter
+ {\romannumeral0\XINT@opp #1}{0}%
+}%
+\def\XINT@div@AisNegative@posrem #1%
+{%
+ \expandafter
+ \XINT@div@AisNegative@posrem@b
+ \expandafter
+ {\romannumeral0\xintopp {\XINT@Add{#1}{1}}}%
+}%
+\def\XINT@div@AisNegative@posrem@b #1#2#3%
+{%
+ \expandafter
+ \xint@exchangetwo@keepbraces@andstop
+ \expandafter
+ {\romannumeral0\XINT@sub {#3}{#2}}{#1}%
+}%
+\def\XINT@div@prepare #1%
+{%
+ \expandafter
+ \XINT@div@prepareB@a
+ \expandafter
+ {\romannumeral0\XINT@length {#1}}{#1}% B > 0 ici
+}%
+\def\XINT@div@prepareB@a #1%
+{%
+ \expandafter\XINT@div@prepareB@b\expandafter
+ {\the\numexpr 4*((#1+1)/4)\relax}{#1}%
+}%
+\def\XINT@div@prepareB@b #1#2%
+{%
+ \expandafter\XINT@div@prepareB@c \expandafter
+ {\the\numexpr #1-#2\relax}{#1}%
+}%
+\def\XINT@div@prepareB@c #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@div@prepareB@di
+ \or \expandafter\XINT@div@prepareB@dii
+ \or \expandafter\XINT@div@prepareB@diii
+ \else \expandafter\XINT@div@prepareB@div
+ \fi
+}%
+\def\XINT@div@prepareB@di {\XINT@div@prepareB@e {}{0}}%
+\def\XINT@div@prepareB@dii {\XINT@div@prepareB@e {0}{1}}%
+\def\XINT@div@prepareB@diii {\XINT@div@prepareB@e {00}{2}}%
+\def\XINT@div@prepareB@div {\XINT@div@prepareB@e {000}{3}}%
+\def\XINT@div@prepareB@e #1#2#3#4%
+{%
+ \XINT@div@prepareB@f #4#1\Z {#3}{#2}{#1}%
+}%
+\def\XINT@div@prepareB@f #1#2#3#4#5\Z
+{%
+ \expandafter
+ \XINT@div@prepareB@g
+ \expandafter
+ {\romannumeral0\XINT@rev {#1#2#3#4#5}}{#1#2#3#4}%
+}%
+\def\XINT@div@prepareB@g #1#2#3#4#5#6%
+{%
+ \XINT@div@prepareA@a {#6#5}{#2}{#3}{#1}{#4}%
+}%
+\def\XINT@div@prepareA@a #1%
+{%
+ \expandafter
+ \XINT@div@prepareA@b
+ \expandafter
+ {\romannumeral0\XINT@length {#1}}{#1}% A >0 ici
+}%
+\def\XINT@div@prepareA@b #1%
+{%
+ \expandafter\XINT@div@prepareA@c\expandafter
+ {\the\numexpr 4*((#1+1)/4)\relax}{#1}%
+}%
+\def\XINT@div@prepareA@c #1#2%
+{%
+ \expandafter\XINT@div@prepareA@d \expandafter
+ {\the\numexpr #1-#2\relax}{#1}%
+}%
+\def\XINT@div@prepareA@d #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@div@prepareA@di
+ \or \expandafter\XINT@div@prepareA@dii
+ \or \expandafter\XINT@div@prepareA@diii
+ \else \expandafter\XINT@div@prepareA@div
+ \fi
+}%
+\def\XINT@div@prepareA@di {\XINT@div@prepareA@e {}}%
+\def\XINT@div@prepareA@dii {\XINT@div@prepareA@e {0}}%
+\def\XINT@div@prepareA@diii {\XINT@div@prepareA@e {00}}%
+\def\XINT@div@prepareA@div {\XINT@div@prepareA@e {000}}%
+\def\XINT@div@prepareA@e #1#2#3%
+{%
+ \XINT@div@startswitch {#1#3}{#2}%
+}%
+\def\XINT@div@startswitch #1#2#3#4%
+{%
+ \ifnum #2 > #4
+ \expandafter\XINT@div@body@a
+ \else
+ \ifnum #2 = #4
+ \expandafter\expandafter\expandafter
+ \XINT@div@final@a
+ \else
+ \expandafter\expandafter\expandafter
+ \XINT@div@finished@a
+ \fi\fi {#1}{#4}{#3}{0000}{#2}%
+}%
+\def\XINT@div@finished@a #1#2#3%
+{%
+ \expandafter
+ \XINT@div@finished@b
+ \expandafter
+ {\romannumeral0\XINT@cuz {#1}}%
+}%
+\def\XINT@div@finished@b #1#2#3#4#5%
+{%
+ \ifcase \XINT@Sgn {#1}
+ \xint@afterfi {\XINT@div@finished@c {0}}%
+ \or
+ \xint@afterfi {\expandafter\XINT@div@finished@c
+ \expandafter
+ {\romannumeral0\XINT@dsh@preparegobble {#1}{#5}}}%
+ \fi
+ {#2}%
+}%
+\def\XINT@div@finished@c #1#2%
+{%
+ \expandafter
+ \space
+ \expandafter
+ {\romannumeral0\expandafter\xint@cleanupzeros@andstop
+ \romannumeral0\XINT@rev {#2}}{#1}%
+}%
+\def\XINT@div@final@a #1%
+{%
+ \XINT@div@final@b #1\Z
+}%
+\def\XINT@div@final@b #1#2#3#4#5\Z
+{%
+ \xint@quatrezeros #1#2#3#4\xint@div@final@c0000%
+ \XINT@div@final@c {#1#2#3#4}{#1#2#3#4#5}%
+}%
+\def\xint@div@final@c0000\XINT@div@final@c #1%
+ {\XINT@div@finished@a }%
+\def\XINT@div@final@c #1#2#3#4%
+{%
+ \expandafter
+ \XINT@div@final@d
+ \expandafter
+ {\the\numexpr #1/#4\relax}{#2}%
+}%
+\def\XINT@div@final@d #1#2#3#4#5%
+{%
+ \expandafter
+ \XINT@div@final@e
+ \expandafter
+ {\romannumeral0\xintsub {\xint@cleanupzeros@nospace #2}%
+ {\romannumeral0\XINT@mul@M {#1}#5\Z\Z\Z\Z }}%
+ {#1}{#2}{#3}{#4}{#5}%
+}%
+\def\XINT@div@final@e #1#2%
+{%
+ \ifnum\xintSgn{#1} < 0
+ \expandafter\XINT@div@final@d % en arri\`ere toute
+ \expandafter{\the\numexpr #2-1\expandafter
+ \expandafter\expandafter }%
+ \expandafter\xint@gobble@two
+ \else
+ \expandafter\XINT@div@final@f
+ \fi
+ {#1}{#2}%
+}%
+\def\XINT@div@final@f #1#2#3#4#5#6#7%
+{%
+ \ifcase \XINT@Sgn {#1}
+ \xint@afterfi {\XINT@div@final@end {0}}%
+ \or
+ \xint@afterfi {\expandafter\XINT@div@final@end
+ \expandafter
+ {\romannumeral0\XINT@dsh@preparegobble {#1}{#7}}}%
+ \fi
+ {\romannumeral0\xintadd {\XINT@Rev@andcleanupzeros{#4}}{#2}}%
+}%
+\def\XINT@div@final@end #1#2%
+{%
+ \expandafter\space\expandafter
+ {#2}{#1}%
+}%
+\def\XINT@div@body@a #1%
+{%
+ \XINT@div@body@b #1\Z
+}%
+\def\XINT@div@body@b #1#2#3#4#5#6#7#8#9\Z
+{%
+ \XINT@div@body@c
+ {#1#2#3#4#5#6#7#8#9}%
+ {#1#2#3#4#5#6#7#8}%
+}%
+\def\XINT@div@body@c #1#2#3%
+{%
+ \XINT@div@body@d {#3}{}#1\Z {#2}{#3}%
+}%
+\def\XINT@div@body@d #1#2#3#4#5#6%
+{%
+ \ifnum #1 > 0
+ \expandafter
+ \XINT@div@body@d
+ \expandafter
+ {\the\numexpr #1-4\expandafter }%
+ \else
+ \expandafter
+ \XINT@div@body@e
+ \fi
+ {#6#5#4#3#2}%
+}%
+\def\XINT@div@body@e #1#2\Z #3%
+{%
+ \XINT@div@body@f {#3}{#1}{#2}%
+}%
+\def\XINT@div@body@f #1#2#3#4#5#6#7#8%
+{%
+ \expandafter\XINT@div@body@g
+ \expandafter
+ {\the\numexpr (#1+(#5+1)/2)/(#5+1)-1\relax }%
+ {#2}{#8}{#4}{#5}{#3}{#6}{#7}{#8}%
+}%
+\def\XINT@div@body@g #1#2#3%
+{%
+ \expandafter
+ \XINT@div@body@h
+ \romannumeral0\XINT@div@sub@xpxp
+ {\romannumeral0\XINT@prod@mul@enter #3\W\X\Y\Z #1\W\X\Y\Z }%
+ {#2}\Z
+ {#3}{#1}%
+}%
+\def\XINT@div@body@h #1#2#3#4#5#6#7#8#9\Z
+{%
+ \ifnum #1#2#3#4>0
+ \xint@afterfi{\XINT@div@body@i {#1#2#3#4#5#6#7#8}}%
+ \else
+ \expandafter\XINT@div@body@k
+ \fi
+ {#1#2#3#4#5#6#7#8#9}%
+}%
+\def\XINT@div@body@i #1#2#3#4#5#6%
+{%
+ \expandafter\XINT@div@body@j
+ \expandafter{\the\numexpr (#1+(#6+1)/2)/(#6+1)-1\relax }%
+ {#2}{#3}{#4}{#5}{#6}%
+}%
+\def\XINT@div@body@j #1#2#3#4%
+{%
+ \expandafter
+ \XINT@div@body@l
+ \expandafter{\romannumeral0\XINT@div@sub@xpxp
+ {\romannumeral0\XINT@prod@mul@enter #3\W\X\Y\Z #1\W\X\Y\Z }%
+ {\XINT@Rev{#2}}}%
+ {#4+#1}%
+}%
+\def\XINT@div@body@k #1#2%
+{%
+ \XINT@div@body@l {#1}%
+}%
+\def\XINT@div@body@l #1#2#3#4#5#6#7%
+{%
+ \expandafter
+ \XINT@div@body@m
+ \the\numexpr 100000000+#2\relax
+ {#6}{#3}{#7}{#1#5}{#4}%
+}%
+\def\XINT@div@body@m #1#2#3#4#5#6#7#8#9%
+{%
+ \ifnum #2#3#4#5>0
+ \xint@afterfi {\XINT@div@body@n {#9#8#7#6#5#4#3#2}}%
+ \else
+ \xint@afterfi {\XINT@div@body@n {#9#8#7#6}}%
+ \fi
+}%
+\def\XINT@div@body@n #1#2%
+{%
+ \expandafter\XINT@div@body@o\expandafter
+ {\romannumeral0\XINT@sum@A 0{}#1\W\X\Y\Z #2\W\X\Y\Z }%
+}%
+\def\XINT@div@body@o #1#2#3#4%
+{%
+ \XINT@div@body@p {#3}{#2}{}#4\Z {#1}%
+}%
+\def\XINT@div@body@p #1#2#3#4#5#6#7%
+{%
+ \ifnum #1 > #2
+ \xint@afterfi
+ {\ifnum #4#5#6#7 > 0
+ \expandafter\XINT@div@body@q
+ \else
+ \expandafter\XINT@div@body@repeatp
+ \fi }%
+ \else
+ \expandafter\XINT@div@gotofinal@a
+ \fi
+ {#1}{#2}{#3}#4#5#6#7%
+}%
+\def\XINT@div@body@repeatp #1#2#3#4#5#6#7%
+{%
+ \expandafter
+ \XINT@div@body@p
+ \expandafter
+ {\the\numexpr #1-4\relax}{#2}{0000#3}%
+}%
+\def\XINT@div@body@q #1#2#3#4\Z #5#6%
+{%
+ \XINT@div@body@a {#4}{#2}{#6}{#3#5}{#1}%
+}%
+\def\XINT@div@gotofinal@a #1#2#3#4\Z %
+{%
+ \XINT@div@gotofinal@b #3\Z {#4}{#1}%
+}%
+\def\XINT@div@gotofinal@b 0000#1\Z #2#3#4#5%
+{%
+ \XINT@div@final@a {#2}{#3}{#5}{#1#4}{#3}%
+}%
+\def\XINT@div@sub@xpxp #1%
+{%
+ \expandafter
+ \XINT@div@sub@xpxp@
+ \expandafter
+ {#1}%
+}%
+\def\XINT@div@sub@xpxp@ #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@div@sub@xpxp@@
+ #2\W\X\Y\Z #1\W\X\Y\Z
+}%
+\def\XINT@div@sub@xpxp@@
+{%
+ \XINT@div@sub@A 1{}%
+}%
+\def\XINT@div@sub@A #1#2#3#4#5#6%
+{%
+ \xint@w
+ #3\xint@div@sub@az
+ \W\XINT@div@sub@B #1{#3#4#5#6}{#2}%
+}%
+\def\XINT@div@sub@B #1#2#3#4\W\X\Y\Z #5#6#7#8%
+{%
+ \xint@w
+ #5\xint@div@sub@bz
+ \W\XINT@div@sub@onestep #1#2{#8#7#6#5}{#3}#4\W\X\Y\Z
+}%
+\def\XINT@div@sub@onestep #1#2#3#4#5#6%
+{\expandafter
+ \XINT@div@sub@backtoA\the\numexpr 11#5#4#3#2-#6+#1-1\relax.%
+}%
+\def\XINT@div@sub@backtoA #1#2#3.#4%
+{%
+ \XINT@div@sub@A #2{#3#4}%
+}%
+\def\xint@div@sub@bz
+ \W\XINT@div@sub@onestep #1#2#3#4#5#6#7%
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@div@sub@C %
+ 0\dummy \XINT@div@sub@D % pas de retenue
+ \xint@UDforkzero
+ {#7}#2#3#4#5%
+}%
+\def\XINT@div@sub@D #1#2\W\X\Y\Z
+{%
+ \expandafter\space
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1%
+}%
+\def\XINT@div@sub@C #1#2#3#4#5%
+{%
+ \xint@w
+ #2\xint@div@sub@cz
+ \W\XINT@div@sub@AC@onestep {#5#4#3#2}{#1}%
+}%
+\def\XINT@div@sub@AC@onestep #1%
+{\expandafter
+ \XINT@div@sub@backtoC\the\numexpr 11#1-1\relax.%
+}%
+\def\XINT@div@sub@backtoC #1#2#3.#4%
+{%
+ \XINT@div@sub@AC@checkcarry #2{#3#4}% la retenue va \^etre examin\'ee
+}%
+\def\XINT@div@sub@AC@checkcarry #1%
+{%
+ \xint@one #1\xint@div@sub@AC@nocarry 1\XINT@div@sub@C
+}%
+\def\xint@div@sub@AC@nocarry 1\XINT@div@sub@C #1#2\W\X\Y\Z
+{%
+ \expandafter\space
+ \romannumeral0%
+ \XINT@rord@main {}#2%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+ #1%
+}%
+\def\xint@div@sub@cz\W\XINT@div@sub@AC@onestep #1#2{ #2}%
+\def\xint@div@sub@az\W\XINT@div@sub@B #1#2#3#4\Z { #3}%
+\def\xintFDg {\romannumeral0\xintfdg }%
+\def\xintfdg #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@fdg #1\W\Z
+}%
+\def\XINT@FDg #1{\romannumeral0\XINT@fdg #1\W\Z }%
+\def\XINT@fdg #1#2%
+{%
+ \xint@xpxp@andstop
+ \xint@UDzerominusfork
+ #1-\dummy {\expandafter 0}% zero
+ 0#1\dummy {\expandafter #2}% negative
+ 0-\dummy {\expandafter #1}% positive
+ \xint@UDforkminuszero
+ \xint@z
+}%
+\def\xintLDg {\romannumeral0\xintldg }%
+\def\xintldg #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@ldg
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\XINT@LDg #1{\romannumeral0\XINT@ldg {#1}}%
+\def\XINT@ldg #1%
+{%
+ \expandafter
+ \XINT@ldg@
+ \romannumeral0\XINT@rev {#1}\Z
+}%
+\def\XINT@ldg@ #1%
+{%
+ \expandafter\space\expandafter #1\xint@z
+}%
+\def\xintOdd {\romannumeral0\xintodd }%
+\def\xintodd #1%
+{%
+ \ifodd\xintLDg{#1}
+ \xint@afterfi{ 1}%
+ \else
+ \xint@afterfi{ 0}%
+ \fi
+}%
+\def\XINT@Odd #1%
+{\romannumeral0%
+ \ifodd\XINT@LDg{#1}
+ \xint@afterfi{ 1}%
+ \else
+ \xint@afterfi{ 0}%
+ \fi
+}%
+\def\xintDSL {\romannumeral0\xintdsl }%
+\def\xintdsl #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@dsl #1\Z
+}%
+\def\XINT@DSL #1{\romannumeral0\XINT@dsl #1\Z }%
+\def\XINT@dsl #1%
+{%
+ \xint@zero #1\xint@dsl@zero 0\XINT@dsl@ #1%
+}%
+\def\xint@dsl@zero 0\XINT@dsl@ 0#1\Z { 0}%
+\def\XINT@dsl@ #1\Z { #10}%
+\def\xintDSR {\romannumeral0\xintdsr }%
+\def\xintdsr #1%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@dsr@a
+ \expandafter\expandafter\expandafter
+ {#1}\W\Z
+}%
+\def\XINT@DSR #1{\romannumeral0\XINT@dsr@a {#1}\W\Z }%
+\def\XINT@dsr@a
+{%
+ \expandafter
+ \XINT@dsr@b
+ \romannumeral0\XINT@rev
+}%
+\def\XINT@dsr@b #1#2#3\Z
+{%
+ \xint@w #2\xint@dsr@onedigit\W
+ \xint@minus #2\xint@dsr@onedigit-%
+ \expandafter
+ \XINT@dsr@removew
+ \romannumeral0\XINT@rev {#2#3}%
+}%
+\def\xint@dsr@onedigit #1\XINT@rev #2{ 0}%
+\def\XINT@dsr@removew #1\W { }%
+\def\xintDSH {\romannumeral0\xintdsh }%
+\def\xintdsh #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@dsh
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@dsh #1#2%
+{%
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter
+ \XINT@dsh@checkxsize
+ \expandafter\expandafter\expandafter
+ \xint@exchangetwo@keepbraces
+ \expandafter\expandafter\expandafter
+ {#2}{#1}%
+}%
+\def\XINT@DSH {\romannumeral0\XINT@dsh@checkxsize }%
+\def\XINT@dsh@checkxsize #1%
+{%
+ \ifnum\XINT@Len {#1} > 9
+ \expandafter\XINT@dsh@bigx
+ \else
+ \expandafter\XINT@dsh
+ \fi
+ {#1}%
+}%
+\def\XINT@dsh@bigx #1#2%
+{%
+ \ifcase\XINT@Sgn {#1}
+ \or \xint@afterfi { 0}%
+ \else \xint@afterfi
+ {%
+ \ifodd\XINT@Sgn {#2}
+ \xint@afterfi{\xintError:TooBigDecimalShift
+ \space0}%
+ \else \xint@afterfi { 0}%
+ \fi
+ }%
+ \fi
+}%
+\def\XINT@dsh #1#2{\XINT@dsh@checkAsign #2\Z {#1}}%
+\def\XINT@dsh@checkAsign #1%
+{%
+ \xint@UDzerominusfork
+ #1-\dummy \XINT@dsh@AisZero
+ 0#1\dummy \XINT@dsh@AisNeg
+ 0-\dummy {\XINT@dsh@directionfork #1}%
+ \xint@UDforkminuszero
+}%
+\def\XINT@dsh@AisZero #1\Z #2{ 0}%
+\def\XINT@dsh@AisNeg {\expandafter\XINT@dsh@neg@checkifreturnedzero
+ \romannumeral0\XINT@dsh@directionfork }%
+\def\XINT@dsh@neg@checkifreturnedzero #1%
+{%
+ \expandafter\space
+ \xint@UDzerofork
+ #1\dummy {0}%
+ 0\dummy {-#1}%
+ \xint@UDforkzero
+}%
+\def\XINT@dsh@directionfork #1\Z #2%
+{%
+ \XINT@dsh@checkxsign #2\Z {#1}%
+}%
+\def\XINT@dsh@checkxsign #1%
+{%
+ \xint@UDzerominusfork
+ #1-\dummy \XINT@dsh@donothing
+ 0#1\dummy \XINT@dsh@shiftleft
+ 0-\dummy {\XINT@dsh@shiftright #1}%
+ \xint@UDforkminuszero
+}%
+\def\XINT@dsh@donothing #1\Z #2{ #2}%
+\def\XINT@dsh@shiftright #1\Z #2%
+{%
+ \ifnum \XINT@Length {#2} > #1
+ \expandafter\XINT@dsh@preparegobble
+ \else
+ \expandafter\XINT@dsh@returnzero
+ \fi
+ {#2}{#1}%
+}%
+\def\XINT@dsh@returnzero #1#2{ 0}%
+\def\XINT@dsh@preparegobble #1%
+{%
+ \expandafter
+ \XINT@dsh@preparegobble@
+ \expandafter
+ {\romannumeral0\XINT@rev{#1}}%
+}%
+\def\XINT@dsh@preparegobble@ #1#2{\XINT@dsh@gobbleloop {#2}#1\Z }%
+\def\XINT@dsh@gobbleloop #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@dsh@endgobble
+ \or
+ \expandafter\XINT@dsh@gobble@one@andend
+ \or
+ \expandafter\XINT@dsh@gobble@two@andend
+ \or
+ \expandafter\XINT@dsh@gobble@three@andend
+ \or
+ \expandafter\XINT@dsh@gobble@four@andend
+ \or
+ \expandafter\XINT@dsh@gobble@five@andend
+ \or
+ \expandafter\XINT@dsh@gobble@six@andend
+ \or
+ \expandafter\XINT@dsh@gobble@seven@andend
+ \else
+ \expandafter \XINT@dsh@gobbleloop
+ \expandafter
+ {\the\numexpr
+ #1-8\expandafter\expandafter\expandafter }%
+ \expandafter
+ \xint@gobble@eight
+ \fi
+}%
+\def\XINT@dsh@gobble@one@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@one }%
+\def\XINT@dsh@gobble@two@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@two }%
+\def\XINT@dsh@gobble@three@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@three }%
+\def\XINT@dsh@gobble@four@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@four }%
+\def\XINT@dsh@gobble@five@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@five }%
+\def\XINT@dsh@gobble@six@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@six }%
+\def\XINT@dsh@gobble@seven@andend
+ {\expandafter\XINT@dsh@endgobble\xint@gobble@seven }%
+\def\XINT@dsh@endgobble #1\Z
+{%
+ \XINT@rev{#1}%
+}%
+\def\XINT@dsh@shiftleft #1\Z
+{%
+ \XINT@dsh@zeroloop {#1}\Z
+}%
+\def\XINT@dsh@zeroloop #1%
+{%
+ \ifcase #1
+ \expandafter \XINT@dsh@exit
+ \or
+ \expandafter \XINT@dsh@exiti
+ \or
+ \expandafter \XINT@dsh@exitii
+ \or
+ \expandafter \XINT@dsh@exitiii
+ \or
+ \expandafter \XINT@dsh@exitiv
+ \or
+ \expandafter \XINT@dsh@exitv
+ \or
+ \expandafter \XINT@dsh@exitvi
+ \or
+ \expandafter \XINT@dsh@exitvii
+ \else
+ \expandafter \XINT@dsh@zeroloop
+ \expandafter
+ {\the\numexpr
+ #1-8\expandafter\expandafter\expandafter }%
+ \expandafter
+ \XINT@dsh@addeightzeros
+ \fi
+}%
+\def\XINT@dsh@addeightzeros {00000000}%
+\def\XINT@dsh@exit #1\Z
+ {\XINT@dsh@addzeros {#1}}%
+\def\XINT@dsh@exiti #1\Z
+ {\XINT@dsh@addzeros {0#1}}%
+\def\XINT@dsh@exitii #1\Z
+ {\XINT@dsh@addzeros {00#1}}%
+\def\XINT@dsh@exitiii #1\Z
+ {\XINT@dsh@addzeros {000#1}}%
+\def\XINT@dsh@exitiv #1\Z
+ {\XINT@dsh@addzeros {0000#1}}%
+\def\XINT@dsh@exitv #1\Z
+ {\XINT@dsh@addzeros {00000#1}}%
+\def\XINT@dsh@exitvi #1\Z
+ {\XINT@dsh@addzeros {000000#1}}%
+\def\XINT@dsh@exitvii #1\Z
+ {\XINT@dsh@addzeros {0000000#1}}%
+\def\XINT@dsh@addzeros #1#2{ #2#1}%
+\def\xintDecSplitL {\romannumeral0\xintdecsplitl }%
+\def\xintDecSplitR {\romannumeral0\xintdecsplitr }%
+\def\xintdecsplitl
+{%
+ \expandafter
+ \xint@firstoftwo@andstop
+ \romannumeral0\xintdecsplit
+}%
+\def\xintdecsplitr
+{%
+ \expandafter
+ \xint@secondoftwo@andstop
+ \romannumeral0\xintdecsplit
+}%
+\def\xintDecSplit {\romannumeral0\xintdecsplit }%
+\def\xintdecsplit #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@split
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@split #1#2%
+{%
+ \expandafter
+ \XINT@split@checkifAzero
+ \expandafter
+ {\romannumeral0\xintabs {#2}}{#1}% fait expansion de A
+}%
+\def\XINT@split@checkifAzero #1#2%
+{%
+ \ifcase \XINT@Sgn {#1}
+ \expandafter\XINT@split@AisZero
+ \fi
+ \XINT@split@checkxsize {#2}{#1}%
+}%
+\def\XINT@split@AisZero\XINT@split@checkxsize #1#2{ {0}{0}}%
+\def\XINT@split@checkxsize #1%
+{%
+ \ifnum\XINT@Len {#1} > 9
+ \expandafter\XINT@split@bigx
+ \else
+ \expandafter\XINT@split@xfork
+ \fi
+ #1\Z
+}%
+\def\XINT@split@bigx #1\Z #2%
+{%
+ \ifcase\XINT@Sgn {#1}
+ \or \xint@afterfi { {0}{#2}}%
+ \else
+ \xint@afterfi
+ {\expandafter\xintError:TooBigDecimalSplit
+ \space{0}{0}}%
+ \fi
+}%
+\def\XINT@split@xfork #1%
+{%
+ \xint@UDzerominusfork
+ #1-\dummy \XINT@split@donothing
+ 0#1\dummy \XINT@split@fromleft
+ 0-\dummy {\XINT@split@splitright #1}%
+ \xint@UDforkminuszero
+}%
+\def\XINT@split@donothing #1\Z #2{ {#2}{0}}%
+\def\XINT@split@fromleft #1\Z #2%
+{%
+ \XINT@split@fromleft@loop {#1}{}#2\W\W\W\W\W\W\W\W\Z %
+}%
+\def\XINT@split@fromleft@loop #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@split@fromleft@endsplit
+ \or
+ \expandafter\XINT@split@fromleft@one@andend
+ \or
+ \expandafter\XINT@split@fromleft@two@andend
+ \or
+ \expandafter\XINT@split@fromleft@three@andend
+ \or
+ \expandafter\XINT@split@fromleft@four@andend
+ \or
+ \expandafter\XINT@split@fromleft@five@andend
+ \or
+ \expandafter\XINT@split@fromleft@six@andend
+ \or
+ \expandafter\XINT@split@fromleft@seven@andend
+ \else
+ \expandafter \XINT@split@fromleft@loop@perhaps
+ \expandafter
+ {\the\numexpr
+ #1-8\expandafter\expandafter\expandafter }%
+ \expandafter
+ \XINT@split@fromleft@eight
+ \fi
+}%
+\def\XINT@split@fromleft@endsplit #1#2\W #3\Z
+ { {#1}{#2}}%
+\def\XINT@split@fromleft@eight #1#2#3#4#5#6#7#8#9%
+{%
+ #9{#1#2#3#4#5#6#7#8#9}%
+}%
+\def\XINT@split@fromleft@loop@perhaps #1#2%
+{%
+ \xint@w #2\XINT@split@fromleft@toofar\W \XINT@split@fromleft@loop
+ {#1}%
+}%
+\def\XINT@split@fromleft@toofar\W \XINT@split@fromleft@loop #1#2#3\Z
+{%
+ \XINT@split@fromleft@toofar@b #2\Z
+}%
+\def\XINT@split@fromleft@toofar@b #1\W #2\Z
+{%
+ \space {#1}{}%
+}%
+\def\XINT@split@fromleft@one@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@one }%
+\def\XINT@split@fromleft@one #1#2{#2{#1#2}}%
+\def\XINT@split@fromleft@two@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@two }%
+\def\XINT@split@fromleft@two #1#2#3{#3{#1#2#3}}%
+\def\XINT@split@fromleft@three@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@three }%
+\def\XINT@split@fromleft@three #1#2#3#4{#4{#1#2#3#4}}%
+\def\XINT@split@fromleft@four@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@four }%
+\def\XINT@split@fromleft@four #1#2#3#4#5{#5{#1#2#3#4#5}}%
+\def\XINT@split@fromleft@five@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@five }%
+\def\XINT@split@fromleft@five #1#2#3#4#5#6{#6{#1#2#3#4#5#6}}%
+\def\XINT@split@fromleft@six@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@six }%
+\def\XINT@split@fromleft@six #1#2#3#4#5#6#7{#7{#1#2#3#4#5#6#7}}%
+\def\XINT@split@fromleft@seven@andend
+ {\expandafter\XINT@split@fromleft@checkiftoofar\XINT@split@fromleft@seven }%
+\def\XINT@split@fromleft@seven #1#2#3#4#5#6#7#8{#8{#1#2#3#4#5#6#7#8}}%
+\def\XINT@split@fromleft@checkiftoofar #1#2#3\W #4\Z
+{%
+ \xint@w #1\XINT@split@fromleft@wenttoofar\W
+ \space {#2}{#3}%
+}%
+\def\XINT@split@fromleft@wenttoofar\W\space #1%
+{%
+ \XINT@split@fromleft@wenttoofar@b #1\Z
+}%
+\def\XINT@split@fromleft@wenttoofar@b #1\W #2\Z
+{%
+ \space {#1}%
+}%
+\def\XINT@split@splitright #1\Z #2%
+{%
+ \ifnum \XINT@Length {#2} > #1
+ \expandafter\XINT@split@pre
+ \else
+ \expandafter\XINT@split@quotientiszero
+ \fi
+ {#2}{#1}%
+}%
+\def\XINT@split@quotientiszero #1#2{ {0}{#1}}%
+\def\XINT@split@pre #1%
+{%
+ \expandafter
+ \XINT@split@@pre
+ \expandafter
+ {\romannumeral0\XINT@rev{#1}}%
+}%
+\def\XINT@split@@pre #1#2%
+{%
+ \XINT@split@loop {#2}{}#1\Z
+}%
+\def\XINT@split@loop #1%
+{%
+ \ifcase #1
+ \expandafter\XINT@split@endsplit
+ \or
+ \expandafter\XINT@split@one@andend
+ \or
+ \expandafter\XINT@split@two@andend
+ \or
+ \expandafter\XINT@split@three@andend
+ \or
+ \expandafter\XINT@split@four@andend
+ \or
+ \expandafter\XINT@split@five@andend
+ \or
+ \expandafter\XINT@split@six@andend
+ \or
+ \expandafter\XINT@split@seven@andend
+ \else
+ \expandafter \XINT@split@loop
+ \expandafter
+ {\the\numexpr
+ #1-8\expandafter\expandafter\expandafter }%
+ \expandafter
+ \XINT@split@eight
+ \fi
+}%
+\def\XINT@split@eight #1#2#3#4#5#6#7#8#9{{#1#2#3#4#5#6#7#8#9}}%
+\def\XINT@split@one@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@one }%
+\def\XINT@split@one #1#2{{#1#2000}}%
+\def\XINT@split@two@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@two }%
+\def\XINT@split@two #1#2#3{{#1#2#300}}%
+\def\XINT@split@three@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@three }%
+\def\XINT@split@three #1#2#3#4{{#1#2#3#40}}%
+\def\XINT@split@four@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@four }%
+\def\XINT@split@four #1#2#3#4#5{{#1#2#3#4#5}}%
+\def\XINT@split@five@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@five }%
+\def\XINT@split@five #1#2#3#4#5#6{{#1#2#3#4#5#6000}}%
+\def\XINT@split@six@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@six }%
+\def\XINT@split@six #1#2#3#4#5#6#7{{#1#2#3#4#5#6#700}}%
+\def\XINT@split@seven@andend
+ {\expandafter\XINT@split@endsplit\XINT@split@seven }%
+\def\XINT@split@seven #1#2#3#4#5#6#7#8{{#1#2#3#4#5#6#7#80}}%
+\def\XINT@split@endsplit #1#2\Z
+{%
+ \expandafter\expandafter\expandafter\XINT@split@endsplit@
+ \expandafter\expandafter\expandafter
+ {\romannumeral0\XINT@rev
+ {\Z\W\W\W\W\W\W\W #1\XINT@cuz@loop0\romannumeral}}%
+ {\romannumeral0\XINT@rev{#2}}%
+}%
+\def\XINT@split@endsplit@ #1#2%
+{%
+ \expandafter\space\expandafter {#2}{#1}%
+}%
+\XINT@restorecatcodes@endinput%
+\endinput
+%%
+%% End of file `xint.sty'.
diff --git a/Master/texmf-dist/tex/latex/xint/xintgcd.sty b/Master/texmf-dist/tex/latex/xint/xintgcd.sty
new file mode 100644
index 00000000000..3c7cc44b183
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xint/xintgcd.sty
@@ -0,0 +1,545 @@
+%%
+%% This is file `xintgcd.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xint.dtx (with options: `gcd')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from xintgcd.sty.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file xint.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+%%----------------------------------------------------------------
+%% xint: Expandable operations on long numbers
+%% xintgcd: Euclidean algorithm with xint package
+%% Copyright (C) 2013 by Jean-Francois Burnol
+%%----------------------------------------------------------------
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \def\space { }%
+ \let\z\endgroup
+ \expandafter\let\expandafter\x\csname ver@xintgcd.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xint.sty\endcsname
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \expandafter
+ \ifx\csname numexpr\endcsname\relax
+ \y{xintgcd}{\numexpr not available, aborting input}%
+ \aftergroup\endinput
+ \else
+ \ifx\x\relax % plain-TeX, first loading of xintgcd.sty
+ \ifx\w\relax % but xint.sty not yet loaded.
+ \y{xintgcd}{Package xint is required}%
+ \y{xintgcd}{Will try \string\input\space xint.sty}%
+ \def\z{\endgroup\input xint.sty\relax}%
+ \fi
+ \else
+ \def\empty {}%
+ \ifx\x\empty % LaTeX, first loading,
+ % variable is initialized, but \ProvidesPackage not yet seen
+ \ifx\w\relax % xint.sty not yet loaded.
+ \y{xintgcd}{Package xint is required}%
+ \y{xintgcd}{Will try \string\RequirePackage{xint}}%
+ \def\z{\endgroup\RequirePackage{xint}}%
+ \fi
+ \else
+ \y{xintgcd}{I was already loaded, aborting input}%
+ \aftergroup\endinput
+ \fi
+ \fi
+ \fi
+\z%
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \catcode35=6 % #
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode58=12 % :
+ \expandafter
+ \ifx\csname PackageInfo\endcsname\relax
+ \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \else
+ \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \fi
+ \def\empty {}%
+ \expandafter\let\expandafter\w\csname ver@xint.sty\endcsname
+ \ifx\w\relax % Plain TeX, user gave a file name at the prompt
+ \y{xintgcd}{Loading of package xint failed, aborting input}%
+ \aftergroup\endinput
+ \fi
+ \ifx\w\empty % LaTeX, user gave a file name at the prompt
+ \y{xintgcd}{Loading of package xint failed, aborting input}%
+ \aftergroup\endinput
+ \fi
+\endgroup%
+\begingroup\catcode61\catcode48\catcode32=10\relax%
+ \catcode13=5 % ^^M
+ \endlinechar=13 %
+ \catcode123=1 % {
+ \catcode125=2 % }
+ \catcode64=11 % @
+ \def\x
+ {%
+ \endgroup
+ \edef\XINT@gcd@restorecatcodes@endinput
+ {%
+ \catcode36=\the\catcode36 % $
+ \catcode47=\the\catcode47 % /
+ \catcode41=\the\catcode41 % )
+ \catcode40=\the\catcode40 % (
+ \catcode42=\the\catcode42 % *
+ \catcode43=\the\catcode43 % +
+ \catcode62=\the\catcode62 % >
+ \catcode60=\the\catcode60 % <
+ \catcode58=\the\catcode58 % :
+ \catcode46=\the\catcode46 % .
+ \catcode45=\the\catcode45 % -
+ \catcode44=\the\catcode44 % ,
+ \catcode35=\the\catcode35 % #
+ \catcode64=\the\catcode64 % @
+ \catcode125=\the\catcode125 % }
+ \catcode123=\the\catcode123 % {
+ \endlinechar=\the\endlinechar
+ \catcode13=\the\catcode13 % ^^M
+ \catcode32=\the\catcode32 %
+ \catcode61=\the\catcode61 % =
+ \noexpand\endinput
+ }%
+ \XINT@setcatcodes
+ \catcode36=3 % $
+ }%
+\x
+\begingroup
+ \catcode91=12 % [
+ \catcode93=12 % ]
+ \catcode58=12 % :
+ \expandafter\ifx\csname ProvidesPackage\endcsname\relax
+ \def\x#1#2#3[#4]{\endgroup
+ \immediate\write-1{Package: #3 #4}%
+ \xdef#1{#4}%
+ }%
+ \else
+ \def\x#1#2[#3]{\endgroup
+ #2[{#3}]%
+ \ifx#1\@undefined
+ \xdef#1{#3}%
+ \fi
+ \ifx#1\relax
+ \xdef#1{#3}%
+ \fi
+ }%
+ \fi
+\expandafter\x\csname ver@xintgcd.sty\endcsname
+\ProvidesPackage{xintgcd}%
+ [2013/03/28 v1.0 Euclide algorithm with xint package (jfB)]%
+\def\xintGCD {\romannumeral0\xintgcd }%
+\def\xintgcd #1%
+{%
+ \expandafter
+ \XINT@gcd
+ \expandafter
+ {\romannumeral0\xintabs {#1}}%
+}%
+\def\XINT@gcd #1#2%
+{%
+ \expandafter
+ \XINT@gcd@fork
+ \romannumeral0\xintabs {#2}\Z #1\Z
+}%
+\def\XINT@gcd@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@gcd@BisZero
+ #3\dummy \XINT@gcd@AisZero
+ 0\dummy \XINT@gcd@loop
+ \xint@UDforkzero
+ {#1#2}{#3#4}%
+}%
+\def\XINT@gcd@AisZero #1#2{ #1}%
+\def\XINT@gcd@BisZero #1#2{ #2}%
+\def\XINT@gcd@CheckRem #1#2\Z
+{%
+ \xint@zero #1\xint@gcd@end0\XINT@gcd@loop {#1#2}%
+}%
+\def\xint@gcd@end0\XINT@gcd@loop #1#2{ #2}%
+\def\XINT@gcd@loop #1#2%
+{%
+ \expandafter\expandafter\expandafter
+ \XINT@gcd@CheckRem
+ \expandafter\xint@secondoftwo
+ \romannumeral0\XINT@div@prepare {#1}{#2}\Z
+ {#1}%
+}%
+\def\xintBezout {\romannumeral0\xintbezout }%
+\def\xintbezout #1%
+{%
+ \expandafter\expandafter\expandafter
+ \xint@bezout
+ \expandafter\expandafter\expandafter
+ {#1}%
+}%
+\def\xint@bezout #1#2%
+{\expandafter\expandafter\expandafter
+ \XINT@bezout@fork #2\Z #1\Z
+}%
+\def\XINT@bezout@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerosfork
+ #1#3\dummy \XINT@bezout@botharezero
+ #10\dummy \XINT@bezout@secondiszero
+ #30\dummy \XINT@bezout@firstiszero
+ 00\dummy
+ {\xint@UDsignsfork
+ #1#3\dummy \XINT@bezout@minusminus % A < 0, B < 0
+ #1-\dummy \XINT@bezout@minusplus % A > 0, B < 0
+ #3-\dummy \XINT@bezout@plusminus % A < 0, B > 0
+ --\dummy \XINT@bezout@plusplus % A > 0, B > 0
+ \xint@UDforksigns }%
+ \xint@UDforkzeros
+ {#2}{#4}#1#3{#3#4}{#1#2}% #1#2=B, #3#4=A
+}%
+\def\XINT@bezout@botharezero #1#2#3#4#5#6%
+{%
+ \xintError:NoBezoutForZeros
+ \space {0}{0}{0}{0}{0}%
+}%
+\def\XINT@bezout@firstiszero #1#2#3#4#5#6%
+{%
+ \xint@UDsignfork
+ #3\dummy { {0}{#3#1}{0}{1}{#1}}%
+ -\dummy { {0}{#3#1}{0}{-1}{#1}}%
+ \xint@UDforksign
+}%
+\def\XINT@bezout@secondiszero #1#2#3#4#5#6%
+{%
+ \xint@UDsignfork
+ #4\dummy{ {#4#2}{0}{-1}{0}{#2}}%
+ -\dummy{ {#4#2}{0}{1}{0}{#2}}%
+ \xint@UDforksign
+}%
+\def\XINT@bezout@minusminus #1#2#3#4%
+{%
+ \expandafter\XINT@bezout@mm@post
+ \romannumeral0\XINT@bezout@loop@a 1{#1}{#2}1001%
+}%
+\def\XINT@bezout@mm@post #1#2%
+{%
+ \expandafter
+ \XINT@bezout@mm@postb
+ \expandafter
+ {\romannumeral0\xintopp{#2}}{\romannumeral0\xintopp{#1}}%
+}%
+\def\XINT@bezout@mm@postb #1#2%
+{%
+ \expandafter
+ \XINT@bezout@mm@postc
+ \expandafter {#2}{#1}%
+}%
+\def\XINT@bezout@mm@postc #1#2#3#4#5%
+{%
+ \space {#4}{#5}{#1}{#2}{#3}%
+}%
+\def\XINT@bezout@minusplus #1#2#3#4%
+{%
+ \expandafter\XINT@bezout@mp@post
+ \romannumeral0\XINT@bezout@loop@a 1{#1}{#4#2}1001%
+}%
+\def\XINT@bezout@mp@post #1#2%
+{%
+ \expandafter
+ \XINT@bezout@mp@postb
+ \expandafter
+ {\romannumeral0\xintopp {#2}}{#1}%
+}%
+\def\XINT@bezout@mp@postb #1#2#3#4#5%
+{%
+ \space {#4}{#5}{#2}{#1}{#3}%
+}%
+\def\XINT@bezout@plusminus #1#2#3#4%
+{%
+ \expandafter\XINT@bezout@pm@post
+ \romannumeral0\XINT@bezout@loop@a 1{#3#1}{#2}1001%
+}%
+\def\XINT@bezout@pm@post #1%
+{%
+ \expandafter
+ \XINT@bezout@pm@postb
+ \expandafter
+ {\romannumeral0\xintopp{#1}}%
+}%
+\def\XINT@bezout@pm@postb #1#2#3#4#5%
+{%
+ \space {#4}{#5}{#1}{#2}{#3}%
+}%
+\def\XINT@bezout@plusplus #1#2#3#4%
+{%
+ \expandafter\XINT@bezout@pp@post
+ \romannumeral0\XINT@bezout@loop@a 1{#3#1}{#4#2}1001%
+}%
+\def\XINT@bezout@pp@post #1#2#3#4#5%
+{%
+ \space {#4}{#5}{#1}{#2}{#3}%
+}%
+\def\XINT@bezout@loop@a #1#2#3%
+{%
+ \expandafter\XINT@bezout@loop@b
+ \expandafter{\the\numexpr -#1\expandafter }%
+ \romannumeral0\XINT@div@prepare {#2}{#3}{#2}%
+}%
+\def\XINT@bezout@loop@b #1#2#3#4#5#6#7#8%
+{%
+ \expandafter
+ \XINT@bezout@loop@c
+ \expandafter
+ {\romannumeral0\xintadd{\XINT@Mul{#5}{#2}}{#7}}%
+ {\romannumeral0\xintadd{\XINT@Mul{#6}{#2}}{#8}}%
+ {#1}{#3}{#4}{#5}{#6}%
+}%
+\def\XINT@bezout@loop@c #1#2%
+{%
+ \expandafter
+ \XINT@bezout@loop@d
+ \expandafter
+ {#2}{#1}%
+}%
+\def\XINT@bezout@loop@d #1#2#3#4#5%
+{%
+ \XINT@bezout@loop@e #4\Z {#3}{#5}{#2}{#1}%
+}%
+\def\XINT@bezout@loop@e #1#2\Z
+{%
+ \xint@zero #1\xint@bezout@loop@exit0\XINT@bezout@loop@f
+ {#1#2}%
+}%
+\def\XINT@bezout@loop@f #1#2%
+{%
+ \XINT@bezout@loop@a {#2}{#1}%
+}%
+\def\xint@bezout@loop@exit0\XINT@bezout@loop@f #1#2%
+{%
+ \ifcase #2
+ \or \expandafter\XINT@bezout@exiteven
+ \else\expandafter\XINT@bezout@exitodd
+ \fi
+}%
+\def\XINT@bezout@exiteven #1#2#3#4#5%
+{%
+ \space {#5}{#4}{#1}%
+}%
+\def\XINT@bezout@exitodd #1#2#3#4#5%
+{%
+ \space {-#5}{-#4}{#1}%
+}%
+\def\xintEuclideAlgorithm {\romannumeral0\xinteuclidealgorithm }%
+\def\xinteuclidealgorithm #1%
+{%
+ \expandafter
+ \XINT@euc
+ \expandafter
+ {\romannumeral0\xintabs {#1}}%
+}%
+\def\XINT@euc #1#2%
+{%
+ \expandafter
+ \XINT@euc@fork
+ \romannumeral0\xintabs {#2}\Z #1\Z
+}%
+\def\XINT@euc@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@euc@BisZero
+ #3\dummy \XINT@euc@AisZero
+ 0\dummy \XINT@euc@a
+ \xint@UDforkzero
+ {0}{#1#2}{#3#4}{{#3#4}{#1#2}}{}\Z
+}%
+\def\XINT@euc@AisZero #1#2#3#4#5#6{ {1}{0}{#2}{#2}{0}{0}}%
+\def\XINT@euc@BisZero #1#2#3#4#5#6{ {1}{0}{#3}{#3}{0}{0}}%
+\def\XINT@euc@a #1#2#3%
+{%
+ \expandafter
+ \XINT@euc@b
+ \expandafter {\the\numexpr #1+1\expandafter }%
+ \romannumeral0\XINT@div@prepare {#2}{#3}{#2}%
+}%
+\def\XINT@euc@b #1#2#3#4%
+{%
+ \XINT@euc@c #3\Z {#1}{#3}{#4}{{#2}{#3}}%
+}%
+\def\XINT@euc@c #1#2\Z
+{%
+ \xint@zero #1\xint@euc@end0\XINT@euc@a
+}%
+\def\xint@euc@end0\XINT@euc@a #1#2#3#4\Z%
+{%
+ \expandafter\xint@euc@end@
+ \romannumeral0%
+ \XINT@rord@main {}#4{{#1}{#3}}%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+\def\xint@euc@end@ #1#2#3%
+{%
+ \space {#1}{#3}{#2}%
+}%
+\def\xintBezoutAlgorithm {\romannumeral0\xintbezoutalgorithm }%
+\def\xintbezoutalgorithm #1%
+{%
+ \expandafter
+ \XINT@bezalg
+ \expandafter
+ {\romannumeral0\xintabs {#1}}%
+}%
+\def\XINT@bezalg #1#2%
+{%
+ \expandafter
+ \XINT@bezalg@fork
+ \romannumeral0\xintabs {#2}\Z #1\Z
+}%
+\def\XINT@bezalg@fork #1#2\Z #3#4\Z
+{%
+ \xint@UDzerofork
+ #1\dummy \XINT@bezalg@BisZero
+ #3\dummy \XINT@bezalg@AisZero
+ 0\dummy \XINT@bezalg@a
+ \xint@UDforkzero
+ 0{#1#2}{#3#4}1001{{#3#4}{#1#2}}{}\Z
+}%
+\def\XINT@bezalg@AisZero #1#2#3\Z{ {1}{0}{0}{1}{#2}{#2}{1}{0}{0}{0}{0}{1}}%
+\def\XINT@bezalg@BisZero #1#2#3#4\Z{ {1}{0}{0}{1}{#3}{#3}{1}{0}{0}{0}{0}{1}}%
+\def\XINT@bezalg@a #1#2#3%
+{%
+ \expandafter
+ \XINT@bezalg@b
+ \expandafter {\the\numexpr #1+1\expandafter }%
+ \romannumeral0\XINT@div@prepare {#2}{#3}{#2}%
+}%
+\def\XINT@bezalg@b #1#2#3#4#5#6#7#8%
+{%
+ \expandafter\XINT@bezalg@c\expandafter
+ {\romannumeral0\xintadd {\xintMul {#6}{#2}}{#8}}%
+ {\romannumeral0\xintadd {\xintMul {#5}{#2}}{#7}}%
+ {#1}{#2}{#3}{#4}{#5}{#6}%
+}%
+\def\XINT@bezalg@c #1#2#3#4#5#6%
+{%
+ \expandafter\XINT@bezalg@d\expandafter
+ {#2}{#3}{#4}{#5}{#6}{#1}%
+}%
+\def\XINT@bezalg@d #1#2#3#4#5#6#7#8%
+{%
+ \XINT@bezalg@e #4\Z {#2}{#4}{#5}{#1}{#6}{#7}{#8}{{#3}{#4}{#1}{#6}}%
+}%
+\def\XINT@bezalg@e #1#2\Z
+{%
+ \xint@zero #1\xint@bezalg@end0\XINT@bezalg@a
+}%
+\def\xint@bezalg@end0\XINT@bezalg@a #1#2#3#4#5#6#7#8\Z
+{%
+ \expandafter\xint@bezalg@end@
+ \romannumeral0%
+ \XINT@rord@main {}#8{{#1}{#3}}%
+ \xint@UNDEF
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@undef\xint@undef\xint@undef\xint@undef
+ \xint@UNDEF
+}%
+\def\xint@bezalg@end@ #1#2#3#4%
+{%
+ \space {#1}{#3}{0}{1}{#2}{#4}{1}{0}%
+}%
+\def\xintTypesetEuclideAlgorithm #1#2%
+{% l'algo remplace #1 et #2 par |#1| et |#2|
+ \par
+ \begingroup
+ \xintAssignArray\xintEuclideAlgorithm {#1}{#2}\to\U
+ \edef\A{\U2}\edef\B{\U4}\edef\N{\U1}%
+ \setbox 0 \vbox{\halign {$##$\cr \A\cr \B \cr}}%
+ \noindent
+ \count 255 1
+ \loop
+ \hbox to \wd 0 {\hfil$\U{\the\numexpr 2*\count 255\relax}$}%
+ ${} = \U{\the\numexpr 2*\count 255 + 3\relax}
+ \times \U{\the\numexpr 2*\count 255 + 2\relax}
+ + \U{\the\numexpr 2*\count 255 + 4\relax}$%
+ \ifnum \count 255 < \N
+ \hfill\break
+ \advance \count 255 1
+ \repeat
+ \par
+ \endgroup
+}%
+\def\xintTypesetBezoutAlgorithm #1#2%
+{%
+ \par
+ \begingroup
+ \parindent0pt
+ \xintAssignArray\xintBezoutAlgorithm {#1}{#2}\to\BEZ
+ \edef\A{\BEZ2}\edef\B{\BEZ6}\edef\N{\BEZ1}% A = |#1|, B = |#2|
+ \setbox 0 \vbox{\halign {$##$\cr \A\cr \B \cr}}%
+ \count 255 1
+ \loop
+ \noindent
+ \hbox to \wd 0 {\hfil$\BEZ{\the\numexpr 4*\count 255 - 2\relax}$}%
+ ${} = \BEZ{\the\numexpr 4*\count 255 + 5\relax}
+ \times \BEZ{\the\numexpr 4*\count 255 + 2\relax}
+ + \BEZ{\the\numexpr 4*\count 255 + 6\relax}$\hfill\break
+ \hbox to \wd 0 {\hfil$\BEZ{\the\numexpr 4*\count 255 +7\relax}$}%
+ ${} = \BEZ{\the\numexpr 4*\count 255 + 5\relax}
+ \times \BEZ{\the\numexpr 4*\count 255 + 3\relax}
+ + \BEZ{\the\numexpr 4*\count 255 - 1\relax}$\hfill\break
+ \hbox to \wd 0 {\hfil$\BEZ{\the\numexpr 4*\count 255 +8\relax}$}%
+ ${} = \BEZ{\the\numexpr 4*\count 255 + 5\relax}
+ \times \BEZ{\the\numexpr 4*\count 255 + 4\relax}
+ + \BEZ{\the\numexpr 4*\count 255 \relax}$
+ \endgraf
+ \ifnum \count 255 < \N
+ \advance \count 255 1
+ \repeat
+ \par
+ \edef\U{\BEZ{\the\numexpr 4*\N + 4\relax}}%
+ \edef\V{\BEZ{\the\numexpr 4*\N + 3\relax}}%
+ \edef\D{\BEZ5}%
+ \ifodd\N\relax
+ $\U\times\A - \V\times \B = -\D$%
+ \else
+ $\U\times\A - \V\times\B = \D$%
+ \fi
+ \par
+ \endgroup
+}%
+\XINT@gcd@restorecatcodes@endinput%
+\endinput
+%%
+%% End of file `xintgcd.sty'.
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index b20ecef7e38..6db5e1c1f4f 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -474,7 +474,7 @@ my @TLP_working = qw(
xetex-def xetex-devanagari xetex-itrans xetex-pstricks xetex-tibetan
xetexfontinfo
xetexref xfor xgreek xhfill
- xifthen xits
+ xifthen xint xits
xkeyval xlop xltxtra xmpincl xnewcommand
xoptarg xpatch xpeek xpicture xpinyin xpunctuate
xq xskak xstring xtab xunicode
diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
index 20085da7c91..9806ccd2a2b 100644
--- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
@@ -875,6 +875,7 @@ depend xtab
depend xdoc
depend xfor
depend xifthen
+depend xint
depend xmpincl
depend xnewcommand
depend xoptarg
diff --git a/Master/tlpkg/tlpsrc/xint.tlpsrc b/Master/tlpkg/tlpsrc/xint.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/xint.tlpsrc