%%
%% This is file `lbase.ltx',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% l3names.dtx  (with options: `initex')
%% l3basics.dtx  (with options: `initex')
%% l3chk.dtx  (with options: `initex')
%% l3tlp.dtx  (with options: `initex')
%% l3expan.dtx  (with options: `initex')
%% l3quark.dtx  (with options: `initex')
%% l3num.dtx  (with options: `initex')
%% l3seq.dtx  (with options: `initex')
%% l3alloc.dtx  (with options: `initex')
%% l3io.dtx  (with options: `initex')
%% l3int.dtx  (with options: `initex')
%% l3clist.dtx  (with options: `initex')
%% l3prop.dtx  (with options: `initex')
%% l3token.dtx  (with options: `initex')
%% l3vers.dtx  (with options: `initex')
%% l3skip.dtx  (with options: `initex')
%% l3toks.dtx  (with options: `initex')
%% l3messages.dtx  (with options: `initex')
%% l3box.dtx  (with options: `initex')
%% l3precom.dtx  (with options: `initex,precompile')
%% l3prg.dtx  (with options: `initex')
%% l3xref.dtx  (with options: `initex')
%% l3final.dtx  (with options: `initex')
%% 
%% 
%% EXPERIMENTAL CODE
%% 
%% Do not distribute this file without also distributing the
%% source files specified above.
%% 
%% Do not distribute a modified version of this file.
%% 
%% 
%% File: l3names.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\catcode`\{=1 % left brace is begin-group character
\catcode`\}=2 % right brace is end-group character
\catcode`\#=6 % hash mark is macro parameter character
\catcode`\^=7 %
\catcode`\^^I=10 % ascii tab is a blank space
\def\GetIdInfo$Id: #1.dtx #2 #3-#4-#5 #6 #7$#8{%
  \immediate\write-1{#1; v#2, #3/#4/#5; #8}%
}
\GetIdInfo$Id: l3names.dtx 577 2006-11-21 18:10:26Z morten $
     {L3 Experimental Naming Scheme for TeX Primitives}
\catcode`\{=1 % left brace is begin-group character
\catcode`\}=2 % right brace is end-group character
\catcode`\#=6 % hash mark is macro parameter character
\catcode`\^=7 %
\catcode`\^^I=10 % ascii tab is a blank space
\catcode`\ =9\relax
\catcode`\^^I=9\relax
\catcode`\^^M=9\relax
\catcode`\~=10\relax
\catcode`\_=11\relax\catcode`\:=11\relax
\catcode`\@=11\relax                 % as long as we use old LaTeX stuff.
\let\tex_let:D\let
\long\def\name_undefine:N#1{
    \tex_let:D#1\c_undefined}
\long\def\name_primitive:NN#1#2{
  \tex_let:D #2 #1
  \name_undefine:N #1
      }
\name_primitive:NN \                      \tex_space:D
\name_primitive:NN \/                     \tex_italiccor:D
\name_primitive:NN \-                     \tex_hyphen:D
\name_primitive:NN \let                   \tex_let:D
\name_primitive:NN \def                   \tex_def:D
\name_primitive:NN \edef                  \tex_edef:D
\name_primitive:NN \gdef                  \tex_gdef:D
\name_primitive:NN \xdef                  \tex_xdef:D
\name_primitive:NN \chardef               \tex_chardef:D
\name_primitive:NN \countdef              \tex_countdef:D
\name_primitive:NN \dimendef              \tex_dimendef:D
\name_primitive:NN \skipdef               \tex_skipdef:D
\name_primitive:NN \muskipdef             \tex_muskipdef:D
\name_primitive:NN \mathchardef           \tex_mathchardef:D
\name_primitive:NN \toksdef               \tex_toksdef:D
\name_primitive:NN \futurelet             \tex_futurelet:D
\name_primitive:NN \advance               \tex_advance:D
\name_primitive:NN \divide                \tex_divide:D
\name_primitive:NN \multiply              \tex_multiply:D
\name_primitive:NN \font                  \tex_font:D
\name_primitive:NN \fam                   \tex_fam:D
\name_primitive:NN \global                \tex_global:D
\name_primitive:NN \long                  \tex_long:D
\name_primitive:NN \outer                 \tex_outer:D
\name_primitive:NN \setlanguage           \tex_setlanguage:D
\name_primitive:NN \globaldefs            \tex_globaldefs:D
\name_primitive:NN \afterassignment       \tex_afterassignment:D
\name_primitive:NN \aftergroup            \tex_aftergroup:D
\name_primitive:NN \expandafter           \tex_expandafter:D
\name_primitive:NN \noexpand              \tex_noexpand:D
\name_primitive:NN \begingroup            \tex_begingroup:D
\name_primitive:NN \endgroup              \tex_endgroup:D
\name_primitive:NN \halign                \tex_halign:D
\name_primitive:NN \valign                \tex_valign:D
\name_primitive:NN \cr                    \tex_cr:D
\name_primitive:NN \crcr                  \tex_crcr:D
\name_primitive:NN \noalign               \tex_noalign:D
\name_primitive:NN \omit                  \tex_omit:D
\name_primitive:NN \span                  \tex_span:D
\name_primitive:NN \tabskip               \tex_tabskip:D
\name_primitive:NN \everycr               \tex_everycr:D
\name_primitive:NN \if                    \tex_if:D
\name_primitive:NN \ifcase                \tex_ifcase:D
\name_primitive:NN \ifcat                 \tex_ifcat:D
\name_primitive:NN \ifnum                 \tex_ifnum:D
\name_primitive:NN \ifodd                 \tex_ifodd:D
\name_primitive:NN \ifdim                 \tex_ifdim:D
\name_primitive:NN \ifeof                 \tex_ifeof:D
\name_primitive:NN \ifhbox                \tex_ifhbox:D
\name_primitive:NN \ifvbox                \tex_ifvbox:D
\name_primitive:NN \ifvoid                \tex_ifvoid:D
\name_primitive:NN \ifx                   \tex_ifx:D
\name_primitive:NN \iffalse               \tex_iffalse:D
\name_primitive:NN \iftrue                \tex_iftrue:D
\name_primitive:NN \ifhmode               \tex_ifhmode:D
\name_primitive:NN \ifmmode               \tex_ifmmode:D
\name_primitive:NN \ifvmode               \tex_ifvmode:D
\name_primitive:NN \ifinner               \tex_ifinner:D
\name_primitive:NN \else                  \tex_else:D
\name_primitive:NN \fi                    \tex_fi:D
\name_primitive:NN \or                    \tex_or:D
\name_primitive:NN \immediate             \tex_immediate:D
\name_primitive:NN \closeout              \tex_closeout:D
\name_primitive:NN \openin                \tex_openin:D
\name_primitive:NN \openout               \tex_openout:D
\name_primitive:NN \read                  \tex_read:D
\name_primitive:NN \write                 \tex_write:D
\name_primitive:NN \closein               \tex_closein:D
\name_primitive:NN \newlinechar           \tex_newlinechar:D
\name_primitive:NN \input                 \tex_input:D
\name_primitive:NN \endinput              \tex_endinput:D
\name_primitive:NN \inputlineno           \tex_inputlineno:D
\name_primitive:NN \errmessage            \tex_errmessage:D
\name_primitive:NN \message               \tex_message:D
\name_primitive:NN \show                  \tex_show:D
\name_primitive:NN \showthe               \tex_showthe:D
\name_primitive:NN \showbox               \tex_showbox:D
\name_primitive:NN \showlists             \tex_showlists:D
\name_primitive:NN \errhelp               \tex_errhelp:D
\name_primitive:NN \errorcontextlines     \tex_errorcontextlines:D
\name_primitive:NN \tracingcommands       \tex_tracingcommands:D
\name_primitive:NN \tracinglostchars      \tex_tracinglostchars:D
\name_primitive:NN \tracingmacros         \tex_tracingmacros:D
\name_primitive:NN \tracingonline         \tex_tracingonline:D
\name_primitive:NN \tracingoutput         \tex_tracingoutput:D
\name_primitive:NN \tracingpages          \tex_tracingpages:D
\name_primitive:NN \tracingparagraphs     \tex_tracingparagraphs:D
\name_primitive:NN \tracingrestores       \tex_tracingrestores:D
\name_primitive:NN \tracingstats          \tex_tracingstats:D
\name_primitive:NN \pausing               \tex_pausing:D
\name_primitive:NN \showboxbreadth        \tex_showboxbreadth:D
\name_primitive:NN \showboxdepth          \tex_showboxdepth:D
\name_primitive:NN \batchmode             \tex_batchmode:D
\name_primitive:NN \errorstopmode         \tex_errorstopmode:D
\name_primitive:NN \nonstopmode           \tex_nonstopmode:D
\name_primitive:NN \scrollmode            \tex_scrollmode:D
\name_primitive:NN \end                   \tex_end:D
\name_primitive:NN \csname                \tex_csname:D
\name_primitive:NN \endcsname             \tex_endcsname:D
\name_primitive:NN \ignorespaces          \tex_ignorespaces:D
\name_primitive:NN \relax                 \tex_relax:D
\name_primitive:NN \the                   \tex_the:D
\name_primitive:NN \mag                   \tex_mag:D
\name_primitive:NN \language              \tex_language:D
\name_primitive:NN \mark                  \tex_mark:D
\name_primitive:NN \topmark               \tex_topmark:D
\name_primitive:NN \firstmark             \tex_firstmark:D
\name_primitive:NN \botmark               \tex_botmark:D
\name_primitive:NN \splitfirstmark        \tex_splitfirstmark:D
\name_primitive:NN \splitbotmark          \tex_splitbotmark:D
\name_primitive:NN \fontname              \tex_fontname:D
\name_primitive:NN \escapechar            \tex_escapechar:D
\name_primitive:NN \endlinechar           \tex_endlinechar:D
\name_primitive:NN \mathchoice            \tex_mathchoice:D
\name_primitive:NN \delimiter             \tex_delimiter:D
\name_primitive:NN \mathaccent            \tex_mathaccent:D
\name_primitive:NN \mathchar              \tex_mathchar:D
\name_primitive:NN \mskip                 \tex_mskip:D
\name_primitive:NN \radical               \tex_radical:D
\name_primitive:NN \vcenter               \tex_vcenter:D
\name_primitive:NN \mkern                 \tex_mkern:D
\name_primitive:NN \above                 \tex_above:D
\name_primitive:NN \abovewithdelims       \tex_abovewithdelims:D
\name_primitive:NN \atop                  \tex_atop:D
\name_primitive:NN \atopwithdelims        \tex_atopwithdelims:D
\name_primitive:NN \over                  \tex_over:D
\name_primitive:NN \overwithdelims        \tex_overwithdelims:D
\name_primitive:NN \displaystyle          \tex_displaystyle:D
\name_primitive:NN \textstyle             \tex_textstyle:D
\name_primitive:NN \scriptstyle           \tex_scriptstyle:D
\name_primitive:NN \scriptscriptstyle     \tex_scriptscriptstyle:D
\name_primitive:NN \nonscript             \tex_nonscript:D
\name_primitive:NN \eqno                  \tex_eqno:D
\name_primitive:NN \leqno                 \tex_leqno:D
\name_primitive:NN \abovedisplayshortskip \tex_abovedisplayshortskip:D
\name_primitive:NN \abovedisplayskip      \tex_abovedisplayskip:D
\name_primitive:NN \belowdisplayshortskip \tex_belowdisplayshortskip:D
\name_primitive:NN \belowdisplayskip      \tex_belowdisplayskip:D
\name_primitive:NN \displaywidowpenalty   \tex_displaywidowpenalty:D
\name_primitive:NN \displayindent         \tex_displayindent:D
\name_primitive:NN \displaywidth          \tex_displaywidth:D
\name_primitive:NN \everydisplay          \tex_everydisplay:D
\name_primitive:NN \predisplaysize        \tex_predisplaysize:D
\name_primitive:NN \predisplaypenalty     \tex_predisplaypenalty:D
\name_primitive:NN \postdisplaypenalty    \tex_postdisplaypenalty:D
\name_primitive:NN \mathbin               \tex_mathbin:D
\name_primitive:NN \mathclose             \tex_mathclose:D
\name_primitive:NN \mathinner             \tex_mathinner:D
\name_primitive:NN \mathop                \tex_mathop:D
\name_primitive:NN \displaylimits         \tex_displaylimits:D
\name_primitive:NN \limits                \tex_limits:D
\name_primitive:NN \nolimits              \tex_nolimits:D
\name_primitive:NN \mathopen              \tex_mathopen:D
\name_primitive:NN \mathord               \tex_mathord:D
\name_primitive:NN \mathpunct             \tex_mathpunct:D
\name_primitive:NN \mathrel               \tex_mathrel:D
\name_primitive:NN \overline              \tex_overline:D
\name_primitive:NN \underline             \tex_underline:D
\name_primitive:NN \left                  \tex_left:D
\name_primitive:NN \right                 \tex_right:D
\name_primitive:NN \binoppenalty          \tex_binoppenalty:D
\name_primitive:NN \relpenalty            \tex_relpenalty:D
\name_primitive:NN \delimitershortfall    \tex_delimitershortfall:D
\name_primitive:NN \delimiterfactor       \tex_delimiterfactor:D
\name_primitive:NN \nulldelimiterspace    \tex_nulldelimiterspace:D
\name_primitive:NN \everymath             \tex_everymath:D
\name_primitive:NN \mathsurround          \tex_mathsurround:D
\name_primitive:NN \medmuskip             \tex_medmuskip:D
\name_primitive:NN \thinmuskip            \tex_thinmuskip:D
\name_primitive:NN \thickmuskip           \tex_thickmuskip:D
\name_primitive:NN \scriptspace           \tex_scriptspace:D
\name_primitive:NN \noboundary            \tex_noboundary:D
\name_primitive:NN \accent                \tex_accent:D
\name_primitive:NN \char                  \tex_char:D
\name_primitive:NN \discretionary         \tex_discretionary:D
\name_primitive:NN \hfil                  \tex_hfil:D
\name_primitive:NN \hfilneg               \tex_hfilneg:D
\name_primitive:NN \hfill                 \tex_hfill:D
\name_primitive:NN \hskip                 \tex_hskip:D
\name_primitive:NN \hss                   \tex_hss:D
\name_primitive:NN \vfil                  \tex_vfil:D
\name_primitive:NN \vfilneg               \tex_vfilneg:D
\name_primitive:NN \vfill                 \tex_vfill:D
\name_primitive:NN \vskip                 \tex_vskip:D
\name_primitive:NN \vss                   \tex_vss:D
\name_primitive:NN \unskip                \tex_unskip:D
\name_primitive:NN \kern                  \tex_kern:D
\name_primitive:NN \unkern                \tex_unkern:D
\name_primitive:NN \hrule                 \tex_hrule:D
\name_primitive:NN \vrule                 \tex_vrule:D
\name_primitive:NN \leaders               \tex_leaders:D
\name_primitive:NN \cleaders              \tex_cleaders:D
\name_primitive:NN \xleaders              \tex_xleaders:D
\name_primitive:NN \lastkern              \tex_lastkern:D
\name_primitive:NN \lastskip              \tex_lastskip:D
\name_primitive:NN \indent                \tex_indent:D
\name_primitive:NN \par                   \tex_par:D
\name_primitive:NN \noindent              \tex_noindent:D
\name_primitive:NN \vadjust               \tex_vadjust:D
\name_primitive:NN \baselineskip          \tex_baselineskip:D
\name_primitive:NN \lineskip              \tex_lineskip:D
\name_primitive:NN \lineskiplimit         \tex_lineskiplimit:D
\name_primitive:NN \clubpenalty           \tex_clubpenalty:D
\name_primitive:NN \widowpenalty          \tex_widowpenalty:D
\name_primitive:NN \exhyphenpenalty       \tex_exhyphenpenalty:D
\name_primitive:NN \hyphenpenalty         \tex_hyphenpenalty:D
\name_primitive:NN \linepenalty           \tex_linepenalty:D
\name_primitive:NN \doublehyphendemerits  \tex_doublehyphendemerits:D
\name_primitive:NN \finalhyphendemerits   \tex_finalhyphendemerits:D
\name_primitive:NN \adjdemerits           \tex_adjdemerits:D
\name_primitive:NN \hangafter             \tex_hangafter:D
\name_primitive:NN \hangindent            \tex_hangindent:D
\name_primitive:NN \parshape              \tex_parshape:D
\name_primitive:NN \hsize                 \tex_hsize:D
\name_primitive:NN \lefthyphenmin         \tex_lefthyphenmin:D
\name_primitive:NN \righthyphenmin        \tex_righthyphenmin:D
\name_primitive:NN \leftskip              \tex_leftskip:D
\name_primitive:NN \rightskip             \tex_rightskip:D
\name_primitive:NN \looseness             \tex_looseness:D
\name_primitive:NN \parskip               \tex_parskip:D
\name_primitive:NN \parindent             \tex_parindent:D
\name_primitive:NN \uchyph                \tex_uchyph:D
\name_primitive:NN \emergencystretch      \tex_emergencystretch:D
\name_primitive:NN \pretolerance          \tex_pretolerance:D
\name_primitive:NN \tolerance             \tex_tolerance:D
\name_primitive:NN \spaceskip             \tex_spaceskip:D
\name_primitive:NN \xspaceskip            \tex_xspaceskip:D
\name_primitive:NN \parfillskip           \tex_parfillskip:D
\name_primitive:NN \everypar              \tex_everypar:D
\name_primitive:NN \prevgraf              \tex_prevgraf:D
\name_primitive:NN \spacefactor           \tex_spacefactor:D
\name_primitive:NN \shipout               \tex_shipout:D
\name_primitive:NN \vsize                 \tex_vsize:D
\name_primitive:NN \interlinepenalty      \tex_interlinepenalty:D
\name_primitive:NN \brokenpenalty         \tex_brokenpenalty:D
\name_primitive:NN \topskip               \tex_topskip:D
\name_primitive:NN \maxdeadcycles         \tex_maxdeadcycles:D
\name_primitive:NN \maxdepth              \tex_maxdepth:D
\name_primitive:NN \output                \tex_output:D
\name_primitive:NN \deadcycles            \tex_deadcycles:D
\name_primitive:NN \pagedepth             \tex_pagedepth:D
\name_primitive:NN \pagestretch           \tex_pagestretch:D
\name_primitive:NN \pagefilstretch        \tex_pagefilstretch:D
\name_primitive:NN \pagefillstretch       \tex_pagefillstretch:D
\name_primitive:NN \pagefilllstretch      \tex_pagefilllstretch:D
\name_primitive:NN \pageshrink            \tex_pageshrink:D
\name_primitive:NN \pagegoal              \tex_pagegoal:D
\name_primitive:NN \pagetotal             \tex_pagetotal:D
\name_primitive:NN \outputpenalty         \tex_outputpenalty:D
\name_primitive:NN \hoffset               \tex_hoffset:D
\name_primitive:NN \voffset               \tex_voffset:D
\name_primitive:NN \insert                \tex_insert:D
\name_primitive:NN \holdinginserts        \tex_holdinginserts:D
\name_primitive:NN \floatingpenalty       \tex_floatingpenalty:D
\name_primitive:NN \insertpenalties       \tex_insertpenalties:D
\name_primitive:NN \lower                 \tex_lower:D
\name_primitive:NN \moveleft              \tex_moveleft:D
\name_primitive:NN \moveright             \tex_moveright:D
\name_primitive:NN \raise                 \tex_raise:D
\name_primitive:NN \copy                  \tex_copy:D
\name_primitive:NN \lastbox               \tex_lastbox:D
\name_primitive:NN \vsplit                \tex_vsplit:D
\name_primitive:NN \unhbox                \tex_unhbox:D
\name_primitive:NN \unhcopy               \tex_unhcopy:D
\name_primitive:NN \unvbox                \tex_unvbox:D
\name_primitive:NN \unvcopy               \tex_unvcopy:D
\name_primitive:NN \setbox                \tex_setbox:D
\name_primitive:NN \hbox                  \tex_hbox:D
\name_primitive:NN \vbox                  \tex_vbox:D
\name_primitive:NN \vtop                  \tex_vtop:D
\name_primitive:NN \prevdepth             \tex_prevdepth:D
\name_primitive:NN \badness               \tex_badness:D
\name_primitive:NN \hbadness              \tex_hbadness:D
\name_primitive:NN \vbadness              \tex_vbadness:D
\name_primitive:NN \hfuzz                 \tex_hfuzz:D
\name_primitive:NN \vfuzz                 \tex_vfuzz:D
\name_primitive:NN \overfullrule          \tex_overfullrule:D
\name_primitive:NN \boxmaxdepth           \tex_boxmaxdepth:D
\name_primitive:NN \splitmaxdepth         \tex_splitmaxdepth:D
\name_primitive:NN \splittopskip          \tex_splittopskip:D
\name_primitive:NN \everyhbox             \tex_everyhbox:D
\name_primitive:NN \everyvbox             \tex_everyvbox:D
\name_primitive:NN \nullfont              \tex_nullfont:D
\name_primitive:NN \textfont              \tex_textfont:D
\name_primitive:NN \scriptfont            \tex_scriptfont:D
\name_primitive:NN \scriptscriptfont      \tex_scriptscriptfont:D
\name_primitive:NN \fontdimen             \tex_fontdimen:D
\name_primitive:NN \hyphenchar            \tex_hyphenchar:D
\name_primitive:NN \skewchar              \tex_skewchar:D
\name_primitive:NN \defaulthyphenchar     \tex_defaulthyphenchar:D
\name_primitive:NN \defaultskewchar       \tex_defaultskewchar:D
\name_primitive:NN \number                \tex_number:D
\name_primitive:NN \romannumeral          \tex_romannumeral:D
\name_primitive:NN \string                \tex_string:D
\name_primitive:NN \lowercase             \tex_lowercase:D
\name_primitive:NN \uppercase             \tex_uppercase:D
\name_primitive:NN \meaning               \tex_meaning:D
\name_primitive:NN \penalty               \tex_penalty:D
\name_primitive:NN \unpenalty             \tex_unpenalty:D
\name_primitive:NN \lastpenalty           \tex_lastpenalty:D
\name_primitive:NN \special               \tex_special:D
\name_primitive:NN \dump                  \tex_dump:D
\name_primitive:NN \patterns              \tex_patterns:D
\name_primitive:NN \hyphenation           \tex_hyphenation:D
\name_primitive:NN \time                  \tex_time:D
\name_primitive:NN \day                   \tex_day:D
\name_primitive:NN \month                 \tex_month:D
\name_primitive:NN \year                  \tex_year:D
\name_primitive:NN \jobname               \tex_jobname:D
\name_primitive:NN \everyjob              \tex_everyjob:D
\name_primitive:NN \count                 \tex_count:D
\name_primitive:NN \dimen                 \tex_dimen:D
\name_primitive:NN \skip                  \tex_skip:D
\name_primitive:NN \toks                  \tex_toks:D
\name_primitive:NN \muskip                \tex_muskip:D
\name_primitive:NN \box                   \tex_box:D
\name_primitive:NN \wd                    \tex_wd:D
\name_primitive:NN \ht                    \tex_ht:D
\name_primitive:NN \dp                    \tex_dp:D
\name_primitive:NN \catcode               \tex_catcode:D
\name_primitive:NN \delcode               \tex_delcode:D
\name_primitive:NN \sfcode                \tex_sfcode:D
\name_primitive:NN \lccode                \tex_lccode:D
\name_primitive:NN \uccode                \tex_uccode:D
\name_primitive:NN \mathcode              \tex_mathcode:D
\name_primitive:NN \ifdefined             \etex_ifdefined:D
\name_primitive:NN \ifcsname              \etex_ifcsname:D
\name_primitive:NN \unless                \etex_unless:D
\name_primitive:NN \eTeXversion           \etex_eTeXversion:D
\name_primitive:NN \eTeXrevision          \etex_eTeXrevision:D
\name_primitive:NN \marks                 \etex_marks:D
\name_primitive:NN \topmarks              \etex_topmarks:D
\name_primitive:NN \firstmarks            \etex_firstmarks:D
\name_primitive:NN \botmarks              \etex_botmarks:D
\name_primitive:NN \splitfirstmarks       \etex_splitfirstmarks:D
\name_primitive:NN \splitbotmarks         \etex_splitbotmarks:D
\name_primitive:NN \unexpanded            \etex_unexpanded:D
\name_primitive:NN \detokenize            \etex_detokenize:D
\name_primitive:NN \scantokens            \etex_scantokens:D
\name_primitive:NN \showtokens            \etex_showtokens:D
\name_primitive:NN \readline              \etex_readline:D
\name_primitive:NN \tracingassigns        \etex_tracingassigns:D
\name_primitive:NN \tracingscantokens     \etex_tracingscantokens:D
\name_primitive:NN \tracingnesting        \etex_tracingnesting:D
\name_primitive:NN \tracingifs            \etex_tracingifs:D
\name_primitive:NN \currentiflevel        \etex_currentiflevel:D
\name_primitive:NN \currentifbranch       \etex_currentifbranch:D
\name_primitive:NN \currentiftype         \etex_currentiftype:D
\name_primitive:NN \tracinggroups         \etex_tracinggroups:D
\name_primitive:NN \currentgrouplevel     \etex_currentgrouplevel:D
\name_primitive:NN \currentgrouptype      \etex_currentgrouptype:D
\name_primitive:NN \showgroups            \etex_showgroups:D
\name_primitive:NN \showifs               \etex_showifs:D
\name_primitive:NN \interactionmode       \etex_interactionmode:D
\name_primitive:NN \lastnodetype          \etex_lastnodetype:D
\name_primitive:NN \iffontchar            \etex_iffontchar:D
\name_primitive:NN \fontcharht            \etex_fontcharht:D
\name_primitive:NN \fontchardp            \etex_fontchardp:D
\name_primitive:NN \fontcharwd            \etex_fontcharwd:D
\name_primitive:NN \fontcharic            \etex_fontcharic:D
\name_primitive:NN \parshapeindent        \etex_parshapeindent:D
\name_primitive:NN \parshapelength        \etex_parshapelength:D
\name_primitive:NN \parshapedimen         \etex_parshapedimen:D
\name_primitive:NN \numexpr               \etex_numexpr:D
\name_primitive:NN \dimexpr               \etex_dimexpr:D
\name_primitive:NN \glueexpr              \etex_glueexpr:D
\name_primitive:NN \muexpr                \etex_muexpr:D
\name_primitive:NN \gluestretch           \etex_gluestretch:D
\name_primitive:NN \glueshrink            \etex_glueshrink:D
\name_primitive:NN \gluestretchorder      \etex_gluestretchorder:D
\name_primitive:NN \glueshrinkorder       \etex_glueshrinkorder:D
\name_primitive:NN \gluetomu              \etex_gluetomu:D
\name_primitive:NN \mutoglue              \etex_mutoglue:D
\name_primitive:NN \lastlinefit           \etex_lastlinefit:D
\name_primitive:NN \interlinepenalties    \etex_interlinepenalties:D
\name_primitive:NN \clubpenalties         \etex_clubpenalties:D
\name_primitive:NN \widowpenalties        \etex_widowpenalties:D
\name_primitive:NN \displaywidowpenalties \etex_displaywidowpenalties:D
\name_primitive:NN \middle                \etex_middle:D
\name_primitive:NN \savinghyphcodes       \etex_savinghyphcodes:D
\name_primitive:NN \savingvdiscards       \etex_savingvdiscards:D
\name_primitive:NN \pagediscards          \etex_pagediscards:D
\name_primitive:NN \splitdiscards         \etex_splitdiscards:D
\name_primitive:NN \TeXXETstate           \etex_TeXXETstate:D
\name_primitive:NN \beginL                \etex_beginL:D
\name_primitive:NN \endL                  \etex_endL:D
\name_primitive:NN \beginR                \etex_beginR:D
\name_primitive:NN \endR                  \etex_endR:D
\name_primitive:NN \predisplaydirection   \etex_predisplaydirection:D
\name_primitive:NN \everyeof              \etex_everyeof:D
\name_primitive:NN \protected             \etex_protected:D
%% integer registers:
\name_primitive:NN \pdfoutput             \pdf_output:D
\name_primitive:NN \pdfminorversion       \pdf_minorversion:D
\name_primitive:NN \pdfcompresslevel      \pdf_compresslevel:D
\name_primitive:NN \pdfdecimaldigits      \pdf_decimaldigits:D
\name_primitive:NN \pdfimageresolution    \pdf_imageresolution:D
\name_primitive:NN \pdfpkresolution       \pdf_pkresolution:D
\name_primitive:NN \pdftracingfonts       \pdf_tracingfonts:D
\name_primitive:NN \pdfuniqueresname      \pdf_uniqueresname:D
\name_primitive:NN \pdfadjustspacing      \pdf_adjustspacing:D
\name_primitive:NN \pdfprotrudechars      \pdf_protrudechars:D
\name_primitive:NN \efcode                \pdf_efcode:D
\name_primitive:NN \lpcode                \pdf_lpcode:D
\name_primitive:NN \rpcode                \pdf_rpcode:D
\name_primitive:NN \pdfforcepagebox       \pdf_forcepagebox:D
\name_primitive:NN \pdfoptionalwaysusepdfpagebox \pdf_optionalwaysusepdfpagebox:D
\name_primitive:NN \pdfinclusionerrorlevel\pdf_inclusionerrorlevel:D
\name_primitive:NN \pdfoptionpdfinclusionerrorlevel \pdf_optionpdfinclusionerrorlevel:D
\name_primitive:NN \pdfimagehicolor       \pdf_imagehicolor:D
\name_primitive:NN \pdfimageapplygamma    \pdf_imageapplygamma:D
\name_primitive:NN \pdfgamma              \pdf_gamma:D
\name_primitive:NN \pdfimagegamma         \pdf_imagegamma:D
%% dimen registers:
\name_primitive:NN \pdfhorigin            \pdf_horigin:D
\name_primitive:NN \pdfvorigin            \pdf_vorigin:D
\name_primitive:NN \pdfpagewidth          \pdf_pagewidth:D
\name_primitive:NN \pdfpageheight         \pdf_pageheight:D
\name_primitive:NN \pdflinkmargin         \pdf_linkmargin:D
\name_primitive:NN \pdfdestmargin         \pdf_destmargin:D
\name_primitive:NN \pdfthreadmargin       \pdf_threadmargin:D
%% token registers:
\name_primitive:NN \pdfpagesattr          \pdf_pagesattr:D
\name_primitive:NN \pdfpageattr           \pdf_pageattr:D
\name_primitive:NN \pdfpageresources      \pdf_pageresources:D
\name_primitive:NN \pdfpkmode             \pdf_pkmode:D
%% expandable commands:
\name_primitive:NN \pdftexrevision        \pdf_texrevision:D
\name_primitive:NN \pdftexbanner          \pdf_texbanner:D
\name_primitive:NN \pdfcreationdate       \pdf_creationdate:D
\name_primitive:NN \pdfpageref            \pdf_pageref:D
\name_primitive:NN \pdfxformname          \pdf_xformname:D
\name_primitive:NN \pdffontname           \pdf_fontname:D
\name_primitive:NN \pdffontobjnum         \pdf_fontobjnum:D
\name_primitive:NN \pdffontsize           \pdf_fontsize:D
\name_primitive:NN \pdfincludechars       \pdf_includechars:D
\name_primitive:NN \leftmarginkern        \pdf_leftmarginkern:D
\name_primitive:NN \rightmarginkern       \pdf_rightmarginkern:D
\name_primitive:NN \pdfescapestring       \pdf_escapestring:D
\name_primitive:NN \pdfescapename         \pdf_escapename:D
\name_primitive:NN \pdfescapehex          \pdf_escapehex:D
\name_primitive:NN \pdfunescapehex        \pdf_unescapehex:D
\name_primitive:NN \pdfstrcmp             \pdf_strcmp:D
\name_primitive:NN \pdfuniformdeviate     \pdf_uniformdeviate:D
\name_primitive:NN \pdfnormaldeviate      \pdf_normaldeviate:D
\name_primitive:NN \pdfmdfivesum          \pdf_mdfivesum:D
\name_primitive:NN \pdffilemoddate        \pdf_filemoddate:D
\name_primitive:NN \pdffilesize           \pdf_filesize:D
\name_primitive:NN \pdffiledump           \pdf_filedump:D
%% read-only integers:
\name_primitive:NN \pdftexversion         \pdf_texversion:D
\name_primitive:NN \pdflastobj            \pdf_lastobj:D
\name_primitive:NN \pdflastxform          \pdf_lastxform:D
\name_primitive:NN \pdflastximage         \pdf_lastximage:D
\name_primitive:NN \pdflastximagepages    \pdf_lastximagepages:D
\name_primitive:NN \pdflastannot          \pdf_lastannot:D
\name_primitive:NN \pdflastxpos           \pdf_lastxpos:D
\name_primitive:NN \pdflastypos           \pdf_lastypos:D
\name_primitive:NN \pdflastdemerits       \pdf_lastdemerits:D
\name_primitive:NN \pdfelapsedtime        \pdf_elapsedtime:D
\name_primitive:NN \pdfrandomseed         \pdf_randomseed:D
\name_primitive:NN \pdfshellescape        \pdf_shellescape:D
%% general commands:
\name_primitive:NN \pdfobj                \pdf_obj:D
\name_primitive:NN \pdfrefobj             \pdf_refobj:D
\name_primitive:NN \pdfxform              \pdf_xform:D
\name_primitive:NN \pdfrefxform           \pdf_refxform:D
\name_primitive:NN \pdfximage             \pdf_ximage:D
\name_primitive:NN \pdfrefximage          \pdf_refximage:D
\name_primitive:NN \pdfannot              \pdf_annot:D
\name_primitive:NN \pdfstartlink          \pdf_startlink:D
\name_primitive:NN \pdfendlink            \pdf_endlink:D
\name_primitive:NN \pdfoutline            \pdf_outline:D
\name_primitive:NN \pdfdest               \pdf_dest:D
\name_primitive:NN \pdfthread             \pdf_thread:D
\name_primitive:NN \pdfstartthread        \pdf_startthread:D
\name_primitive:NN \pdfendthread          \pdf_endthread:D
\name_primitive:NN \pdfsavepos            \pdf_savepos:D
\name_primitive:NN \pdfinfo               \pdf_info:D
\name_primitive:NN \pdfcatalog            \pdf_catalog:D
\name_primitive:NN \pdfnames              \pdf_names:D
\name_primitive:NN \pdfmapfile            \pdf_mapfile:D
\name_primitive:NN \pdfmapline            \pdf_mapline:D
\name_primitive:NN \pdffontattr           \pdf_fontattr:D
\name_primitive:NN \pdftrailer            \pdf_trailer:D
\name_primitive:NN \pdffontexpand         \pdf_fontexpand:D
%%\name_primitive:NN \vadjust [<pre spec>] <filler> { <vertical mode material> } (h, m)
\name_primitive:NN \pdfliteral            \pdf_literal:D
%%\name_primitive:NN \special <pdfspecial spec>
\name_primitive:NN \pdfresettimer         \pdf_resettimer:D
\name_primitive:NN \pdfsetrandomseed      \pdf_setrandomseed:D
\name_primitive:NN \pdfnoligatures        \pdf_noligatures:D
\name_primitive:NN \textdir             \aleph_textdir:D
\tex_def:D\CodeStart{%
    \tex_catcode:D `\ =9\tex_relax:D
    \tex_catcode:D `\^^M=9\tex_relax:D
    \tex_catcode:D `\^^I=9\tex_relax:D
    \tex_catcode:D `\~=10\tex_relax:D
    \tex_catcode:D `\_=11\tex_relax:D
    \tex_catcode:D `\:=11\tex_relax:D}
\tex_def:D\CodeStop{
    \tex_catcode:D `\ =10\tex_relax:D
    \tex_catcode:D `\^^M=5\tex_relax:D
    \tex_catcode:D `\^^I=10\tex_relax:D
    \tex_catcode:D `\~=13\tex_relax:D
    \tex_catcode:D `\_=8\tex_relax:D
    \tex_catcode:D `\:=12\tex_relax:D}
\tex_def:D \NamesStart{
  \tex_catcode:D `\_=11\scan_stop:
  \tex_catcode:D `\:=11\scan_stop:
  }
\tex_def:D \NamesStop{
  \tex_catcode:D `\_=8\scan_stop:
  \tex_catcode:D `\:=12\scan_stop:
  }
\tex_def:D\GetIdInfo{\CodeStop\GetIdInfoAux}
\tex_def:D\GetIdInfoAux$#1~#2.dtx~#3~#4-#5-#6~#7~#8$#9{%
  \tex_immediate:D\tex_write:D-1{#2;~v#3,~#4/#5/#6;~#9}%
  \CodeStart
}
%% File: l3basics.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3basics.dtx 583 2006-12-12 17:26:44Z morten $
       {L3 Experimental basic definitions}
\tex_let:D \let:NwN            \tex_let:D
\let:NwN   \if_true:           \tex_iftrue:D
\let:NwN   \if_false:          \tex_iffalse:D
\let:NwN   \else:              \tex_else:D
\let:NwN   \fi:                \tex_fi:D
\let:NwN   \reverse_if:N       \etex_unless:D
\let:NwN   \if:w               \tex_if:D
\let:NwN   \if_charcode:w     \tex_if:D
\let:NwN   \if_catcode:w      \tex_ifcat:D
\let:NwN   \if_meaning:NN      \tex_ifx:D
\let:NwN   \if_token_eq:NN     \tex_ifx:D
\let:NwN   \if_cs_meaning_eq:NN\tex_ifx:D
\let:NwN   \if_mode_math:      \tex_ifmmode:D
\let:NwN   \if_mode_horizontal:\tex_ifhmode:D
\let:NwN   \if_mode_vertical:  \tex_ifvmode:D
\let:NwN   \if_mode_inner:     \tex_ifinner:D
\let:NwN   \if_cs_exist:N      \etex_ifdefined:D
\let:NwN   \if_cs_exist:w      \etex_ifcsname:D
\let:NwN   \exp_after:NN       \tex_expandafter:D
\let:NwN   \exp_not:N          \tex_noexpand:D
\let:NwN   \exp_not:n          \etex_unexpanded:D
\let:NwN   \io_put_deferred:Nx \tex_write:D
\let:NwN   \token_to_meaning:N \tex_meaning:D
\let:NwN   \token_to_string:N  \tex_string:D
\let:NwN   \cs:w               \tex_csname:D
\let:NwN   \cs_end:            \tex_endcsname:D
\let:NwN   \cs_meaning:N       \tex_meaning:D
\tex_def:D \cs_meaning:c #1{\exp_after:NN\cs_meaning:N\cs:w #1\cs_end:}
\let:NwN   \cs_show:N          \tex_show:D
\tex_def:D \cs_show:c #1{\exp_after:NN\cs_show:N\cs:w #1\cs_end:}
\let:NwN   \scan_stop:         \tex_relax:D
\let:NwN   \group_begin:       \tex_begingroup:D
\let:NwN   \group_end:         \tex_endgroup:D
\let:NwN \group_execute_after:N \tex_aftergroup:D
\let:NwN   \the_internal:D     \tex_the:D
\let:NwN   \pref_global:D      \tex_global:D
\let:NwN   \pref_long:D        \tex_long:D
\let:NwN   \pref_protected:D   \etex_protected:D
\let:NwN   \def:Npn            \tex_def:D
\let:NwN   \def:Npx            \tex_edef:D
\pref_protected:D \def:Npn \def_long:Npn {\pref_long:D \def:Npn}
\pref_protected:D \def:Npn \def_long:Npx {\pref_long:D \def:Npx}
\pref_protected:D \def:Npn \def_protected:Npn {\pref_protected:D \def:Npn}
\pref_protected:D \def:Npn \def_protected:Npx {\pref_protected:D \def:Npx}
\def_protected:Npn \def_protected_long:Npn {
  \pref_protected:D \pref_long:D \def:Npn
}
\def_protected:Npn \def_protected_long:Npx {
  \pref_protected:D \pref_long:D \def:Npx
}
\let:NwN   \gdef:Npn           \tex_gdef:D
\let:NwN   \gdef:Npx           \tex_xdef:D
\def_protected:Npn \gdef_long:Npn {\pref_long:D \gdef:Npn}
\def_protected:Npn \gdef_long:Npx {\pref_long:D \gdef:Npx}
\def_protected:Npn \gdef_protected:Npn {\pref_protected:D \gdef:Npn}
\def_protected:Npn \gdef_protected:Npx {\pref_protected:D \gdef:Npx}
\def_protected:Npn \gdef_protected_long:Npn {
  \pref_protected:D \pref_long:D \gdef:Npn
}
\def_protected:Npn \gdef_protected_long:Npx {
  \pref_protected:D \pref_long:D \gdef:Npx
}
\def:Npn \c_true  {00}
\def:Npn \c_false {01}
\tex_countdef:D \c_minus_one = 10 \scan_stop:
\c_minus_one = -1 \scan_stop:
\tex_chardef:D \c_sixteen = 16\scan_stop:
\def:Npn \io_put_log:x{
      \tex_immediate:D\io_put_deferred:Nx \c_minus_one }
\def:Npn \io_put_term:x{
      \tex_immediate:D\io_put_deferred:Nx \c_sixteen }
\def:Npn\err_latex_bug:x#1{
   \io_put_term:x{This~is~a~LaTeX~bug!~Check~coding!}\tex_errmessage:D{#1}}
\def_long:Npn \use_none:n  #1{}
\def_long:Npn \use_arg_i:n #1{#1}
\def:Npn \chk_new_cs:N #1{
  \if:w \cs_if_free_p:N #1
    \exp_after:NN \use_none:n
  \else:
    \exp_after:NN \use_arg_i:n
  \fi:
  {
    \err_latex_bug:x {Command~name~`\token_to_string:N #1'~
                      already~defined!~
                      Current~meaning:~\token_to_meaning:N #1
                    }
  }
}
\def:Npn \cs_if_exist_p:N #1{
  \if:w \cs_if_free_p:N #1
    \c_false
  \else:
    \c_true \fi:}
\def:Npn \chk_if_exist_cs:N #1 {
  \if:w \cs_if_exist_p:N #1
  \else:
    \err_latex_bug:x{Command~ `\token_to_string:N #1'~
                     not~ yet~ defined!}
  \fi:}
\def:Npn \chk_if_exist_cs:c #1 {
  \exp_after:NN \chk_if_exist_cs:N \cs:w #1\cs_end: }
\def:Npn \cs_if_free_p:N #1{
  \if_cs_exist:N #1
    \if_meaning:NN#1\scan_stop:
      \if:w\cs_if_eq_name_p:NN #1\scan_stop:
        \c_false \else: \c_true \fi:
    \else:
       \c_false
    \fi:
  \else:
    \if:w \cs_if_eq_name_p:NN #1\c_undefined
      \c_false \else: \c_true \fi:
  \fi:
}
\let:NwN \cs_free_p:N \cs_if_free_p:N
\def:Npn \str_if_eq_p:nn #1#2{
  \str_if_eq_p_aux:w #1\scan_stop:\\#2\scan_stop:\\
}
\def:Npn \str_if_eq_p_aux:w #1#2\\#3#4\\{
  \if_meaning:NN#1#3
    \if_meaning:NN#1\scan_stop:\c_true \else:
    \if_meaning:NN#3\scan_stop:\c_false \else:
    \str_if_eq_p_aux:w #2\\#4\\\fi:\fi:
  \else:\c_false \fi:}
\def_long:Npn \cs_if_eq_name_p:NN #1#2{
  \exp_after:NN\exp_after:NN
  \exp_after:NN\str_if_eq_p_aux:w
  \exp_after:NN\token_to_string:N
  \exp_after:NN#1
  \exp_after:NN\scan_stop:
  \exp_after:NN\\
  \token_to_string:N#2\scan_stop:\\}
\def:Npn \str_if_eq_var_p:nf#1{
  \if:w \tex_number:D\str_if_eq_var_start:nnN{}{}#1\scan_stop:
}
\def:Npn\str_if_eq_var_start:nnN#1#2#3{
  \if:w#3\scan_stop:\exp_after:NN\str_if_eq_var_stop:w\fi:
  \str_if_eq_var_start:nnN{\if:w#3#1}{#2\fi:}
}
\def:Npn\str_if_eq_var_stop:w\str_if_eq_var_start:nnN#1#2#3{
  #1#3\scan_stop:'#213~\c_true\else:\c_false\fi:
}
\def_protected:Npn \def_new:Npn #1{\chk_new_cs:N #1
                         \def:Npn #1}
\def_protected:Npn \def_new:Npx #1{\chk_new_cs:N #1
                         \def:Npx #1}
\def_protected:Npn \def_long_new:Npn #1{\chk_new_cs:N #1
                                 \def_long:Npn #1}
\def_protected:Npn \def_long_new:Npx #1{\chk_new_cs:N #1
                                 \def_long:Npx #1}
\def_protected:Npn \def_protected_new:Npn #1{\chk_new_cs:N #1
                                 \def_protected:Npn #1}
\def_protected:Npn \def_protected_new:Npx #1{\chk_new_cs:N #1
                                 \def_protected:Npx #1}
\def_protected:Npn \def_protected_long_new:Npn #1{\chk_new_cs:N #1
                                 \def_protected_long:Npn #1}
\def_protected:Npn \def_protected_long_new:Npx #1{\chk_new_cs:N #1
                                 \def_protected_long:Npx #1}
\def_protected_new:Npn \gdef_new:Npn #1{\chk_new_cs:N #1
                         \gdef:Npn #1}
\def_protected_new:Npn \gdef_new:Npx #1{\chk_new_cs:N #1
                         \gdef:Npx #1}
\def_protected_new:Npn \gdef_long_new:Npn #1{\chk_new_cs:N #1
                                 \gdef_long:Npn #1}
\def_protected_new:Npn \gdef_long_new:Npx #1{\chk_new_cs:N #1
                                 \gdef_long:Npx #1}
\def_protected_new:Npn \gdef_protected_new:Npn #1{\chk_new_cs:N #1
                                 \gdef_protected:Npn #1}
\def_protected_new:Npn \gdef_protected_new:Npx #1{\chk_new_cs:N #1
                                 \gdef_protected:Npx #1}
\def_protected_new:Npn \gdef_protected_long_new:Npn #1{\chk_new_cs:N #1
                                 \gdef_protected_long:Npn #1}
\def_protected_new:Npn \gdef_protected_long_new:Npx #1{\chk_new_cs:N #1
                                 \gdef_protected_long:Npx #1}
\def_new:Npn \def:cpn #1{\exp_after:NN \def:Npn \cs:w #1\cs_end:}
\def_new:Npn \def:cpx #1{\exp_after:NN \def:Npx \cs:w #1\cs_end:}
\def_new:Npn \gdef:cpn #1{\exp_after:NN \gdef:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef:cpx #1{\exp_after:NN \gdef:Npx \cs:w #1\cs_end:}
\def_new:Npn \def_new:cpn #1{\exp_after:NN \def_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_new:cpx #1{\exp_after:NN \def_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \gdef_new:cpn #1{\exp_after:NN \gdef_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_new:cpx #1{\exp_after:NN \gdef_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \def_long:cpn #1{\exp_after:NN \def_long:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_long:cpx #1{
  \exp_after:NN\def_long:Npx\cs:w #1\cs_end:}
\def_new:Npn \gdef_long:cpn #1{
  \exp_after:NN \gdef_long:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_long:cpx #1{
  \exp_after:NN\gdef_long:Npx\cs:w #1\cs_end:}
\def_new:Npn \def_long_new:cpn #1{
  \exp_after:NN \def_long_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_long_new:cpx #1{
  \exp_after:NN \def_long_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \gdef_long_new:cpn #1{
  \exp_after:NN \gdef_long_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_long_new:cpx #1{
  \exp_after:NN \gdef_long_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \def_protected:cpn #1{
  \exp_after:NN \def_protected:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_protected:cpx #1{
  \exp_after:NN\def_protected:Npx\cs:w #1\cs_end:}
\def_new:Npn \gdef_protected:cpn #1{
  \exp_after:NN \gdef_protected:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected:cpx #1{
  \exp_after:NN\gdef_protected:Npx\cs:w #1\cs_end:}
\def_new:Npn \def_protected_new:cpn #1{
  \exp_after:NN \def_protected_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_protected_new:cpx #1{
  \exp_after:NN \def_protected_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_new:cpn #1{
  \exp_after:NN \gdef_protected_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_new:cpx #1{
  \exp_after:NN \gdef_protected_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \def_protected_long:cpn #1{
  \exp_after:NN \def_protected_long:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_protected_long:cpx #1{
  \exp_after:NN\def_protected_long:Npx\cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_long:cpn #1{
  \exp_after:NN \gdef_protected_long:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_long:cpx #1{
  \exp_after:NN\gdef_protected_long:Npx\cs:w #1\cs_end:}
\def_new:Npn \def_protected_long_new:cpn #1{
  \exp_after:NN \def_protected_long_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \def_protected_long_new:cpx #1{
  \exp_after:NN \def_protected_long_new:Npx \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_long_new:cpn #1{
  \exp_after:NN \gdef_protected_long_new:Npn \cs:w #1\cs_end:}
\def_new:Npn \gdef_protected_long_new:cpx #1{
  \exp_after:NN \gdef_protected_long_new:Npx \cs:w #1\cs_end:}
\def_new:cpn {def_aux_0:NNn} #1#2 {#1 #2 }
\def_new:cpn {def_aux_1:NNn} #1#2 {#1 #2 ##1 }
\def_new:cpn {def_aux_2:NNn} #1#2 {#1 #2 ##1##2 }
\def_new:cpn {def_aux_3:NNn} #1#2 {#1 #2 ##1##2##3 }
\def_new:cpn {def_aux_4:NNn} #1#2 {#1 #2 ##1##2##3##4 }
\def_new:cpn {def_aux_5:NNn} #1#2 {#1 #2 ##1##2##3##4##5 }
\def_new:cpn {def_aux_6:NNn} #1#2 {#1 #2 ##1##2##3##4##5##6 }
\def_new:cpn {def_aux_7:NNn} #1#2 {#1 #2 ##1##2##3##4##5##6##7 }
\def_new:cpn {def_aux_8:NNn} #1#2 {#1 #2 ##1##2##3##4##5##6##7##8 }
\def_new:cpn {def_aux_9:NNn} #1#2 {#1 #2 ##1##2##3##4##5##6##7##8##9 }
\def_protected_long_new:Npn \def_aux:NNnn #1#2#3#4 {
  \cs_if_really_exist:cTF {def_aux_\tex_the:D\etex_numexpr:D #3 :NNn}
  {
    \cs_use:c {def_aux_\tex_the:D\etex_numexpr:D #3 :NNn} #1 #2 {#4}
  }
  { \def_arg_number_error_msg:Nn #2{#3} }
}
\def_new:Npn \def_aux:Ncnn #1#2{
  \exp_after:NN \def_aux:NNnn \exp_after:NN #1 \cs:w #2\cs_end:}
\def_new:Npn \def_arg_number_error_msg:Nn #1#2 {
  \err_latex_bug:x{
    You're~ trying~ to~ define~ the~ command~ `\token_to_string:N #1'~
    with~ \use_arg_i:n{\tex_the:D\etex_numexpr:D #2\scan_stop:} ~
    arguments~ but~ I~ only~ allow~ 0-9~ arguments.~ I~ can~ probably~
    not~ help~ you~ here
  }
}
\def:cpn{def_aux_use_0_parameter:}{}
\def:cpn{def_aux_use_1_parameter:}{{##1}}
\def:cpn{def_aux_use_2_parameter:}{{##1}{##2}}
\def:cpn{def_aux_use_3_parameter:}{{##1}{##2}{##3}}
\def:cpn{def_aux_use_4_parameter:}{{##1}{##2}{##3}{##4}}
\def:cpn{def_aux_use_5_parameter:}{{##1}{##2}{##3}{##4}{##5}}
\def:cpn{def_aux_use_6_parameter:}{{##1}{##2}{##3}{##4}{##5}{##6}}
\def:cpn{def_aux_use_7_parameter:}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}}
\def:cpn{def_aux_use_8_parameter:}{
  {##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}
\def:cpn{def_aux_use_9_parameter:}{
  {##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}
\def_new:Npn \def:NNn { \def_aux:NNnn \def:Npn }
\def_new:Npn \def:NNx { \def_aux:NNnn \def:Npx }
\def_new:Npn \def:cNn { \def_aux:Ncnn \def:Npn }
\def_new:Npn \def:cNx { \def_aux:Ncnn \def:Npx }
\def_new:Npn \gdef:NNn { \def_aux:NNnn \gdef:Npn }
\def_new:Npn \gdef:NNx { \def_aux:NNnn \gdef:Npx }
\def_new:Npn \gdef:cNn { \def_aux:Ncnn \gdef:Npn }
\def_new:Npn \gdef:cNx { \def_aux:Ncnn \gdef:Npx }
\def_new:Npn \def_new:NNn { \def_aux:NNnn \def_new:Npn }
\def_new:Npn \def_new:NNx { \def_aux:NNnn \def_new:Npx }
\def_new:Npn \def_new:cNn { \def_aux:Ncnn \def_new:Npn }
\def_new:Npn \def_new:cNx { \def_aux:Ncnn \def_new:Npx }
\def_new:Npn \gdef_new:NNn { \def_aux:NNnn \gdef_new:Npn }
\def_new:Npn \gdef_new:NNx { \def_aux:NNnn \gdef_new:Npx }
\def_new:Npn \gdef_new:cNn { \def_aux:Ncnn \gdef_new:Npn }
\def_new:Npn \gdef_new:cNx { \def_aux:Ncnn \gdef_new:Npx }
\def_new:Npn \def_long:NNn { \def_aux:NNnn \def_long:Npn }
\def_new:Npn \def_long:NNx { \def_aux:NNnn \def_long:Npx }
\def_new:Npn \def_long:cNn { \def_aux:Ncnn \def_long:Npn }
\def_new:Npn \def_long:cNx { \def_aux:Ncnn \def_long:Npx }
\def_new:Npn \gdef_long:NNn { \def_aux:NNnn \gdef_long:Npn }
\def_new:Npn \gdef_long:NNx { \def_aux:NNnn \gdef_long:Npx }
\def_new:Npn \gdef_long:cNn { \def_aux:Ncnn \gdef_long:Npn }
\def_new:Npn \gdef_long:cNx { \def_aux:Ncnn \gdef_long:Npx }
\def_new:Npn \def_long_new:NNn { \def_aux:NNnn \def_long_new:Npn }
\def_new:Npn \def_long_new:NNx { \def_aux:NNnn \def_long_new:Npx }
\def_new:Npn \def_long_new:cNn { \def_aux:Ncnn \def_long_new:Npn }
\def_new:Npn \def_long_new:cNx { \def_aux:Ncnn \def_long_new:Npx }
\def_new:Npn \gdef_long_new:NNn { \def_aux:NNnn \gdef_long_new:Npn }
\def_new:Npn \gdef_long_new:NNx { \def_aux:NNnn \gdef_long_new:Npx }
\def_new:Npn \gdef_long_new:cNn { \def_aux:Ncnn \gdef_long_new:Npn }
\def_new:Npn \gdef_long_new:cNx { \def_aux:Ncnn \gdef_long_new:Npx }
\def_new:Npn \def_protected:NNn { \def_aux:NNnn \def_protected:Npn }
\def_new:Npn \def_protected:NNx { \def_aux:NNnn \def_protected:Npx }
\def_new:Npn \def_protected:cNn { \def_aux:Ncnn \def_protected:Npn }
\def_new:Npn \def_protected:cNx { \def_aux:Ncnn \def_protected:Npx }
\def_new:Npn \gdef_protected:NNn { \def_aux:NNnn \gdef_protected:Npn }
\def_new:Npn \gdef_protected:NNx { \def_aux:NNnn \gdef_protected:Npx }
\def_new:Npn \gdef_protected:cNn { \def_aux:Ncnn \gdef_protected:Npn }
\def_new:Npn \gdef_protected:cNx { \def_aux:Ncnn \gdef_protected:Npx }
\def_new:Npn \def_protected_new:NNn { \def_aux:NNnn \def_protected_new:Npn }
\def_new:Npn \def_protected_new:NNx { \def_aux:NNnn \def_protected_new:Npx }
\def_new:Npn \def_protected_new:cNn { \def_aux:Ncnn \def_protected_new:Npn }
\def_new:Npn \def_protected_new:cNx { \def_aux:Ncnn \def_protected_new:Npx }
\def_new:Npn \gdef_protected_new:NNn { \def_aux:NNnn \gdef_protected_new:Npn }
\def_new:Npn \gdef_protected_new:NNx { \def_aux:NNnn \gdef_protected_new:Npx }
\def_new:Npn \gdef_protected_new:cNn { \def_aux:Ncnn \gdef_protected_new:Npn }
\def_new:Npn \gdef_protected_new:cNx { \def_aux:Ncnn \gdef_protected_new:Npx }
\def_new:Npn \def_protected_long:NNn { \def_aux:NNnn \def_protected_long:Npn }
\def_new:Npn \def_protected_long:NNx { \def_aux:NNnn \def_protected_long:Npx }
\def_new:Npn \def_protected_long:cNn { \def_aux:Ncnn \def_protected_long:Npn }
\def_new:Npn \def_protected_long:cNx { \def_aux:Ncnn \def_protected_long:Npx }
\def_new:Npn \gdef_protected_long:NNn { \def_aux:NNnn \gdef_protected_long:Npn }
\def_new:Npn \gdef_protected_long:NNx { \def_aux:NNnn \gdef_protected_long:Npx }
\def_new:Npn \gdef_protected_long:cNn { \def_aux:Ncnn \gdef_protected_long:Npn }
\def_new:Npn \gdef_protected_long:cNx { \def_aux:Ncnn \gdef_protected_long:Npx }
\def_new:Npn \def_protected_long_new:NNn {
  \def_aux:NNnn \def_protected_long_new:Npn }
\def_new:Npn \def_protected_long_new:NNx {
  \def_aux:NNnn \def_protected_long_new:Npx }
\def_new:Npn \def_protected_long_new:cNn {
  \def_aux:Ncnn \def_protected_long_new:Npn }
\def_new:Npn \def_protected_long_new:cNx {
  \def_aux:Ncnn \def_protected_long_new:Npx }
\def_new:Npn \gdef_protected_long_new:NNn {
  \def_aux:NNnn \gdef_protected_long_new:Npn }
\def_new:Npn \gdef_protected_long_new:NNx {
  \def_aux:NNnn \gdef_protected_long_new:Npx }
\def_new:Npn \gdef_protected_long_new:cNn {
  \def_aux:Ncnn \gdef_protected_long_new:Npn }
\def_new:Npn \gdef_protected_long_new:cNx {
  \def_aux:Ncnn \gdef_protected_long_new:Npx }
\def_protected_long_new:Npn \let:NN #1{
                              \let:NwN #1=~}
\def_new:Npn\let:cN #1 {\exp_after:NN\let:NN\cs:w#1\cs_end:}
\def_new:Npn\let:Nc{\exp_args:NNc\let:NN}
\def_new:Npn\let:cc{\exp_args:Ncc\let:NN}
\def_new:Npn \let_new:NN #1{\chk_new_cs:N #1
                              \let:NN #1}
\def_new:Npn \let_new:cN {\exp_args:Nc \let_new:NN}
\def_new:Npn \let_new:Nc {\exp_args:NNc \let_new:NN}
\def_new:Npn \let_new:cc {\exp_args:Ncc \let_new:NN}
\def_protected_new:Npn \glet:NN {\pref_global:D \let:NN}
\def_protected_new:Npn \glet:Nc {\exp_args:NNc \glet:NN}
\def_protected_new:Npn \glet:cN {\exp_args:Nc \glet:NN}
\def_new:Npn \glet:cc {\exp_args:Ncc \glet:NN}
\def_new:Npn \glet_new:NN #1{\chk_new_cs:N #1
                               \tex_global:D\let:NN #1}
\def_new:Npn \glet_new:cN {\exp_args:Nc \glet_new:NN}
\def_new:Npn \glet_new:Nc {\exp_args:NNc \glet_new:NN}
\def_new:Npn \glet_new:cc {\exp_args:Ncc \glet_new:NN}
\def_new:Npn \def:No{\exp_args:NNo\def:Npn}
\def_new:Npn \gdef:No  {\exp_args:NNo\gdef:Npn}
\def_long_new:Npn \def_test_function_aux:Nnnn #1#2#3#4{
  #1 {#2TF} #3 {#4
    \exp_after:NN\use_arg_i:nn\else:\exp_after:NN\use_arg_ii:nn\fi:}
  #1 {#2T} #3 {#4
    \else:\exp_after:NN\use_none:nn\fi:\use_arg_i:n}
  #1 {#2F} #3 {#4
    \exp_after:NN\use_none:nn\fi:\use_arg_i:n}}
\def_long_new:Npn \def_test_function_aux:Nnnx #1#2#3#4{
  #1 {#2TF} #3 {#4
    \exp_not:n{\exp_after:NN\use_arg_i:nn\else:\exp_after:NN\use_arg_ii:nn\fi:}}
  #1 {#2T} #3 {#4
    \exp_not:n{\else:\exp_after:NN\use_none:nn\fi:\use_arg_i:n}}
  #1 {#2F} #3 {#4
    \exp_not:n{\exp_after:NN\use_none:nn\fi:\use_arg_i:n}}}
\def_long_new:Npn \def_test_function:npn #1#2#{
  \def_test_function_aux:Nnnn \def:cpn {#1}{#2}
}
\def_long_new:Npn \def_test_function:npx #1#2#{
  \def_test_function_aux:Nnnx \def:cpx {#1}{#2}
}
\def_long_new:Npn \def_long_test_function:npn #1#2#{
  \def_test_function_aux:Nnnn \def_long:cpn {#1}{#2}
}
\def_long_new:Npn \def_long_test_function:npx #1#2#{
  \def_test_function_aux:Nnnx \def_long:cpx {#1}{#2}
}
\def_long_new:Npn \def_test_function_new:npn #1#2#{
  \def_test_function_aux:Nnnn \def_new:cpn {#1}{#2}
}
\def_long_new:Npn \def_long_test_function_new:npn #1#2#{
  \def_test_function_aux:Nnnn \def_long_new:cpn {#1}{#2}
}
\def_long_new:Npn \def_test_function_new:npx #1#2#{
  \def_test_function_aux:Nnnx \def_new:cpx {#1}{#2}
}
\def_long_new:Npn \def_long_test_function_new:npx #1#2#{
  \def_test_function_aux:Nnnx \def_long_new:cpx {#1}{#2}
}
\def_long_test_function_new:npn {cs_if_free:N}#1{\if:w\cs_if_free_p:N #1}
\let:NN \cs_free:NTF \cs_if_free:NTF
\let:NN \cs_free:NT \cs_if_free:NT
\let:NN \cs_free:NF \cs_if_free:NF
\def_long_test_function_new:npn {cs_if_free:c}#1{
  \exp_after:NN \if_meaning:NN \cs:w#1\cs_end: \scan_stop:}
\let:NN \cs_free:cTF \cs_if_free:cTF
\let:NN \cs_free:cT \cs_if_free:cT
\let:NN \cs_free:cF \cs_if_free:cF
\def_long_test_function_new:npn {cs_if_really_free:c}#1{
  \reverse_if:N\if_cs_exist:w #1\cs_end:}
\let:NN \cs_really_free:cTF \cs_if_really_free:cTF
\let:NN \cs_really_free:cT \cs_if_really_free:cT
\let:NN \cs_really_free:cF \cs_if_really_free:cF
\def_long_test_function_new:npn {cs_if_exist:N}#1{\if:w\cs_if_exist_p:N #1}
\def_long_test_function_new:npn {cs_if_exist:c}#1{
  \exp_after:NN\reverse_if:N
  \exp_after:NN \if_meaning:NN \cs:w#1\cs_end: \scan_stop:}
\def_long_test_function_new:npn {cs_if_really_exist:c}#1{
  \if_cs_exist:w #1\cs_end:}
\def_new:Npn \cs_gundefine:N #1{\glet:NN #1\c_undefined}
\def_test_function_new:npn {engine_aleph:}{\if_cs_exist:N \aleph_textdir:D}
\def_new:Npn \use:c #1{\cs:w #1\cs_end:}
\def_new:Npn \cs_use:c #1 { \cs:w#1\cs_end: }
\def_new:Npn \use:cc #1#2
  {\cs:w #1\exp_after:NN\cs_end:\cs:w #2\cs_end:}
\def_long_new:Npn \use_arg_i:nn #1#2{#1}
\def_long_new:Npn \use_arg_ii:nn #1#2{#2}
\def_long_new:NNn \use_arg_i:nnn    3{#1}
\def_long_new:NNn \use_arg_ii:nnn   3{#2}
\def_long_new:NNn \use_arg_iii:nnn  3{#3}
\def_long_new:NNn \use_arg_i:nnnn   4{#1}
\def_long_new:NNn \use_arg_ii:nnnn  4{#2}
\def_long_new:NNn \use_arg_iii:nnnn 4{#3}
\def_long_new:NNn \use_arg_iv:nnnn  4{#4}
\def_long_new:NNn\use_arg_i_ii:nn 2{#1#2}
\def_long_new:Npn \use_none_delimit_by_q_nil:w #1\q_nil{}
\def_long_new:Npn \use_none_delimit_by_q_stop:w #1\q_stop{}
\def_long_new:Npn \use_arg_i_delimit_by_q_nil:nw #1#2\q_nil{#1}
\def_long_new:Npn \use_arg_i_delimit_by_q_stop:nw #1#2\q_stop{#1}
\def_long_new:Npn \use_arg_i_after_fi:nw #1\fi:{\fi: #1}
\def_long_new:Npn \use_arg_i_after_else:nw #1\else:#2\fi:{\fi: #1}
\def_long_new:Npn \use_arg_i_after_or:nw #1\or: #2\fi: {\or:\fi:#1}
\def_long_new:NNn \use_none:nn 2{}
\def_long_new:NNn \use_none:nnn 3{}
\def_long_new:NNn \use_none:nnnn 4{}
\def_long_new:NNn \use_none:nnnnn 5{}
\def_long_new:NNn \use_none:nnnnnn 6{}
\def_long_new:NNn \use_none:nnnnnnn 7{}
\def_long_new:NNn \use_none:nnnnnnnn 8{}
\def_long_new:NNn \use_none:nnnnnnnnn 9{}
\def_new:Npn \gtmp:w {}
\def_new:Npn \tmp:w {}
\def_new:Npn \use_noop: {}
\def_new:Npn \cs_to_str:N {\exp_after:NN\use_none:n \token_to_string:N}
\def_test_function_new:npn {cs_if_eq:NN} #1#2{\if_meaning:NN #1#2}
\def_new:Npn \cs_if_eq:cNTF {\exp_args:Nc \cs_if_eq:NNTF}
\def_new:Npn \cs_if_eq:cNT {\exp_args:Nc \cs_if_eq:NNT}
\def_new:Npn \cs_if_eq:cNF {\exp_args:Nc \cs_if_eq:NNF}
\def_new:Npn \cs_if_eq:NcTF {\exp_args:NNc \cs_if_eq:NNTF}
\def_new:Npn \cs_if_eq:NcT {\exp_args:NNc \cs_if_eq:NNT}
\def_new:Npn \cs_if_eq:NcF {\exp_args:NNc \cs_if_eq:NNF}
\def_new:Npn \cs_if_eq:ccTF {\exp_args:Ncc \cs_if_eq:NNTF}
\def_new:Npn \cs_if_eq:ccT {\exp_args:Ncc \cs_if_eq:NNT}
\def_new:Npn \cs_if_eq:ccF {\exp_args:Ncc \cs_if_eq:NNF}
\def_new:Npn\file_not_found:nTF #1#2#3{\IfFileExists{#1}{#3}{#2}}
%% File: l3chk.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
%%
\GetIdInfo$Id: l3chk.dtx 573 2006-08-21 20:59:37Z morten $
          {L3 Experimental check module}
\def_new:Npn \chk_local:N #1{
  \exp_after:NN \chk_local_aux:w \token_to_string:N#1\q_stop}

\def_new:Npn \chk_local_aux:w #1#2#3\q_stop{
   \if_num:w\tex_uccode:D`#2=`G\scan_stop:
       \err_latex_bug:x{Local~mismatch:~local~function~called~with~
                     global~variable:^^J\text_put_four_sp: #1#2#3~
                     on~line~\tex_the:D\tex_inputlineno:D}
   \else:
     \if_num:w\tex_uccode:D`#2=`L\scan_stop:
     \else:
       \err_latex_bug:x{Variable~mismatch:~function~not~called~with~
                     proper~variable:^^J\text_put_four_sp: #1#2#3~
                     on~line~\tex_the:D\tex_inputlineno:D}\fi:
   \fi:}
\tex_newlinechar:D=`\^^J
\def_new:Npn \chk_global:N #1{\exp_after:NN
                           \chk_global_aux:w \token_to_string:N#1\q_stop}
\def_new:Npn \chk_global_aux:w #1#2#3\q_stop{
   \if_num:w\tex_uccode:D`#2=`L\scan_stop:
       \err_latex_bug:x{Global~mismatch:~global~function~called~with~
                   local~variable:~#1#2#3~
                   on~line~\tex_the:D\tex_inputlineno:D}
   \else:
     \if_num:w\tex_uccode:D`#2=`G\scan_stop:
     \else:
       \err_latex_bug:x{Variable~mismatch:~function~not~called~with~
                     proper~variable:~#1#2#3~
                     on~line~\tex_the:D\tex_inputlineno:D}\fi:\fi:}
\def_new:Npn \pref_global_chk: {
    \gdef:Npn \chk_local_or_pref_global:N ##1{
          \chk_global:N ##1
          \glet:NN \chk_local_or_pref_global:N \chk_local:N}
    \pref_global:D}
\let_new:NN \chk_local_or_pref_global:N \chk_local:N
\def_new:Npn \chk_var_or_const:N #1{\exp_after:NN
     \chk_var_or_const_aux:w \token_to_string:N#1\q_stop }
\def_new:Npn \chk_var_or_const_aux:w #1#2#3\q_stop {
    \if_num:w\tex_uccode:D`#2=`L\scan_stop:
    \else:
      \if_num:w\tex_uccode:D`#2=`G\scan_stop:
      \else:
        \if_num:w\tex_uccode:D`#2=`C\scan_stop:
        \else:
          \if_charcode:w#2q\scan_stop:
          \else:
           \err_latex_bug:x{Variable~mismatch:~function~not~called~with~
                       proper~variable:^^J\text_put_four_sp: #1#2#3~
                       on~line~\tex_the:D\tex_inputlineno:D}\fi:\fi:\fi:
    \fi:}
\def_new:Npn\donotcheck{
  \let:NN \chk_global:N \use_none:n
  \let:NN \chk_local:N \use_none:n
  \let:NN \chk_local_or_pref_global:N \use_none:n
  \let:NN \pref_global_chk: \pref_global:D
  \let:NN \chk_new_cs:N \use_none:n
  \let:NN \chk_exist_cs:N \use_none:n
  \let:NN \chk_var_or_const:N \use_none:n
  \let:NN \cs_record_name:N \use_none:n
  \let:NN \cs_record_name:c \use_none:n
  \let:NN \cs_record_meaning:N \use_none:n
  \let:NN \register_record_name:N \use_none:n
}
\def_new:Npn\absolutelytracingall{
  \pref_global:D\g_trace_commands_status\c_two
  \pref_global:D\g_trace_statistics_status\c_two
  \pref_global:D\g_trace_pages_status\c_one
  \pref_global:D\g_trace_output_status\c_one
  \pref_global:D\g_trace_chars_status\c_one
  \pref_global:D\g_trace_macros_status\c_two
  \pref_global:D\g_trace_paragraphs_status\c_one
  \pref_global:D\g_trace_restores_status\c_one
  \pref_global:D\g_trace_box_breadth_int\c_ten_thousand
  \pref_global:D\g_trace_box_depth_int\c_ten_thousand
  \pref_global:D\g_trace_online_status\c_one
  \tex_errorstopmode:D}
\def_new:Npn\tracingoff{
  \pref_global:D\g_trace_online_status\c_zero
  \pref_global:D\g_trace_commands_status\c_zero
  \pref_global:D\g_trace_statistics_status\c_zero
  \pref_global:D\g_trace_pages_status\c_zero
  \pref_global:D\g_trace_output_status\c_zero
  \pref_global:D\g_trace_chars_status\c_zero
  \pref_global:D\g_trace_macros_status\c_zero
  \pref_global:D\g_trace_paragraphs_status\c_zero
  \pref_global:D\g_trace_restores_status\c_zero
  \pref_global:D\g_trace_box_breadth_int\c_zero
  \pref_global:D\g_trace_box_depth_int\c_zero
}
\let_new:NN\traceon\use_none:n
\let_new:NN\traceoff\use_none:n
%% File: l3tlp.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3tlp.dtx 581 2006-12-12 12:28:27Z morten $
          {L3 Experimental Token List Pointers}
\def_long_new:Npn \tlp_new:Nn #1#2{
  \chk_new_cs:N #1
  \gdef:Npn #1{#2}
}
\def_new:Npn \tlp_new:cn {\exp_args:Nc \tlp_new:Nn }
\def_long_new:Npn \tlp_new:Nx #1#2{
  \chk_new_cs:N #1
  \gdef:Npx #1{#2}
}
\def_new:Npn \tlp_use:N #1 {
  \if_meaning:NN #1 \scan_stop:
     \err_latex_bug:x {Token~list~pointer~ `\token_to_string:N #1'~
                       has~ an~ erroneous~ structure!}
  \else:
    \exp_after:NN #1
  \fi:
}
\def_new:Npn \tlp_use:c {\exp_args:Nc \tlp_use:N}
\def_long_new:Npn\tlp_set:Nn#1#2{\def:Npn#1{#2}}
\def_long_new:Npn\tlp_set:Nx#1#2{\def:Npx#1{#2}}
\def_long_new:Npn\tlp_gset:Nn#1#2{\gdef:Npn#1{#2}}
\def_long_new:Npn\tlp_gset:Nx#1#2{\gdef:Npx#1{#2}}
\def_new:Npn \tlp_set:No {\exp_args:NNo \tlp_set:Nn}
\def_new:Npn \tlp_set:Nf {\exp_args:NNf \tlp_set:Nn}
\def_new:Npn \tlp_set:cn {\exp_args:Nc  \tlp_set:Nn}
\def_new:Npn \tlp_set:co {\exp_args:Nco \tlp_set:Nn}
\def_new:Npn \tlp_set:cx {\exp_args:Nc  \tlp_set:Nx}
\def_new:Npn \tlp_gset:No {\exp_args:NNo \tlp_gset:Nn}
\def_new:Npn \tlp_gset:cn {\exp_args:Nc \tlp_gset:Nn}
\def_new:Npn \tlp_gset:cx {\exp_args:Nc \tlp_gset:Nx}
\let_new:NN \tlp_set_eq:NN \let:NN
\let_new:NN \tlp_gset_eq:NN \glet:NN
\def_new:Npn \tlp_set_eq:Nc {\exp_args:NNc \tlp_set_eq:NN}
\def_new:Npn \tlp_set_eq:cN {\exp_args:Nc  \tlp_set_eq:NN}
\def_new:Npn \tlp_set_eq:cc {\exp_args:Ncc \tlp_set_eq:NN}
\def_new:Npn \tlp_gset_eq:Nc {\exp_args:NNc \tlp_gset_eq:NN}
\def_new:Npn \tlp_gset_eq:cN {\exp_args:Nc  \tlp_gset_eq:NN}
\def_new:Npn \tlp_gset_eq:cc {\exp_args:Ncc \tlp_gset_eq:NN}
\def_new:Npn \tlp_clear:N #1{\tlp_set_eq:NN #1\c_empty_tlp}
\def_new:Npn \tlp_clear:c {\exp_args:Nc \tlp_clear:N}
\def_new:Npn \tlp_gclear:N #1{\tlp_gset_eq:NN #1\c_empty_tlp}
\def_new:Npn \tlp_gclear:c {\exp_args:Nc \tlp_gclear:N}
\let_new:NN \tlp_clear_new:N \tlp_clear:N
\def_new:Npn \tlp_clear_new:c {\exp_args:Nc \tlp_clear_new:N}
\let_new:NN \tlp_gclear_new:N \tlp_gclear:N
\def_new:Npn \tlp_gclear_new:c {\exp_args:Nc \tlp_gclear_new:N}
\def_new:Npn \tlp_put_left:Nn #1{
  \exp_args:No \tlp_put_left_aux:w {#1}#1}
\def_new:Npn\tlp_put_left:No{\exp_args:NNo\tlp_put_left:Nn}
\def_new:Npn \tlp_gput_left:Nn {
 \pref_global:D
   \tlp_put_left:Nn
}
\def_new:Npn\tlp_gput_left:No{\exp_args:NNo\tlp_gput_left:Nn}
\def_new:Npn\tlp_gput_left:Nx{\exp_args:NNx\tlp_gput_left:Nn}
\def_long_new:Npn \tlp_put_left_aux:w #1#2#3{\tlp_set:Nn #2{#3#1}
}
\def_long_new:Npn \tlp_put_right:Nn #1#2{\tlp_set:No #1{#1#2}}
\def_long_new:Npn \tlp_gput_right:Nn #1#2{\tlp_gset:No #1{#1#2}}
\def_new:Npn \tlp_gput_right:No {\exp_args:NNo \tlp_gput_right:Nn}
\def_new:Npn \tlp_gput_right:Nx {\exp_args:NNx \tlp_gput_right:Nn}
\def_new:Npn \tlp_gput_right:cn {\exp_args:Nc \tlp_gput_right:Nn}
\def_new:Npn \tlp_gput_right:co {\exp_args:Nco \tlp_gput_right:Nn}
\def_new:Npn \tlp_put_right:cc {\exp_args:Ncc \tlp_put_right:Nn}
\def_new:Npn \tlp_put_right:No {\exp_args:NNo \tlp_put_right:Nn}
\def_new:Npn \tlp_put_right:Nx {\exp_args:Nnx \tlp_put_right:Nn}
\def_new:Npn \tlp_gset:Nc {
 \pref_global:D
  \tlp_set:Nc}
\def_new:Npn \tlp_set:Nc #1#2{\tlp_set:No #1{\cs:w#2\cs_end:}}
\def_new:Npn \tlp_if_empty_p:N #1{
  \if_meaning:NN#1\c_empty_tlp \c_true \else: \c_false \fi:}
\def_new:Npn \tlp_if_empty_p:c {\exp_args:Nc\tlp_if_empty_p:N}
\def_test_function_new:npn {tlp_if_empty:N} #1{
  \if_meaning:NN#1\c_empty_tlp}
\def_new:Npn \tlp_if_empty:cTF {\exp_args:Nc \tlp_if_empty:NTF}
\def_new:Npn \tlp_if_empty:cT {\exp_args:Nc \tlp_if_empty:NT}
\def_new:Npn \tlp_if_empty:cF {\exp_args:Nc \tlp_if_empty:NF}
\def_new:Npn \tlp_if_eq_p:NN #1#2{
  \if_meaning:NN#1#2 \c_true \else: \c_false \fi:}
\def_new:Npn \tlp_if_eq_p:Nc {\exp_args:NNc\tlp_if_empty_p:NN}
\def_new:Npn \tlp_if_eq_p:cN {\exp_args:Nc\tlp_if_empty_p:NN}
\def_new:Npn \tlp_if_eq_p:cc {\exp_args:Ncc\tlp_if_empty_p:NN}
\def_test_function_new:npn {tlp_if_eq:NN} #1#2{\if_meaning:NN#1#2}
\def_new:Npn \tlp_if_eq:cNTF{\exp_args:Nc \tlp_if_eq:NNTF}
\def_new:Npn \tlp_if_eq:cNT {\exp_args:Nc \tlp_if_eq:NNT}
\def_new:Npn \tlp_if_eq:cNF {\exp_args:Nc \tlp_if_eq:NNF}
\def_new:Npn \tlp_if_eq:NcTF{\exp_args:NNc \tlp_if_eq:NNTF}
\def_new:Npn \tlp_if_eq:NcT {\exp_args:NNc \tlp_if_eq:NNT}
\def_new:Npn \tlp_if_eq:NcF {\exp_args:NNc \tlp_if_eq:NNF}
\def_new:Npn \tlp_if_eq:ccTF{\exp_args:Ncc \tlp_if_eq:NNTF}
\def_new:Npn \tlp_if_eq:ccT {\exp_args:Ncc \tlp_if_eq:NNT}
\def_new:Npn \tlp_if_eq:ccF {\exp_args:Ncc \tlp_if_eq:NNF}
\tlp_new:Nn \c_empty_tlp {}
\tlp_new:Nn \c_relax_tlp {\scan_stop:}
\tlp_new:Nn \g_tmpa_tlp{}
\tlp_new:Nn \g_tmpb_tlp{}
\tlp_new:Nn \l_testa_tlp {}
\tlp_new:Nn \l_testb_tlp {}
\tlp_new:Nn \g_testa_tlp {}
\tlp_new:Nn \g_testb_tlp {}
\tlp_new:Nn \l_tmpa_tlp{}
\tlp_new:Nn \l_tmpb_tlp{}
\def_new:Npn \tlp_to_str:N {\exp_after:NN\tlp_to_str_aux:w
  \token_to_meaning:N}
\def_new:Npn \tlp_to_str_aux:w #1>{}
\def_new:Npn\tlp_to_str:c{\exp_args:Nc\tlp_to_str:N}
\def_long_new:Npn \tlist_if_empty_p:n #1{
  \exp_after:NN\if_meaning:NN\exp_after:NN\q_nil\tlist_to_str:n{#1}\q_nil
    \c_true
  \else:
    \c_false
  \fi:
}
\def_new:Npn \tlist_if_empty_p:o {\exp_args:No\tlist_if_empty_p:n}
\def_long_test_function_new:npn{tlist_if_empty:n}#1{
  \if:w\tlist_if_empty_p:n{#1}}
\def_long_test_function_new:npn{tlist_if_empty:o}#1{
  \if:w\tlist_if_empty_p:o{#1}}
\def_long_new:Npn \tlist_if_blank_p:n #1{
  \exp_after:NN\tlist_if_blank_p_aux:w\tlist_to_str:n{#1}aa..\q_nil
}
\def_new:Npn \tlist_if_blank_p_aux:w #1#2a#3#4\q_nil{
  \if_meaning:NN #3#4\c_true\else:\c_false\fi:}
\def_long_test_function_new:npn{tlist_if_blank:n}#1{
  \if:w\tlist_if_blank_p:n{#1}}
\def:Npn \tlist_if_blank_p:o{\exp_args:No\tlist_if_blank_p:n}
\def_long_test_function_new:npn{tlist_if_blank:o}#1{
  \if:w\tlist_if_blank_p:o{#1}}
\let_new:NN \tlist_to_lowercase:n \tex_lowercase:D
\let_new:NN \tlist_to_uppercase:n \tex_uppercase:D
\let_new:NN \tlist_to_str:n \etex_detokenize:D
\def_long_new:Npn \tlist_map_function:nN #1#2{
  \tlist_map_function_aux:Nn #2 #1 \q_nil \q_stop
}
\def_new:Npn \tlp_map_function:NN #1#2{
  \exp_after:NN \tlist_map_function_aux:Nn
  \exp_after:NN #2 #1 \q_nil \q_stop
}
\def_long_new:Npn \tlist_map_function_aux:Nn #1#2{
  \quark_if_nil:nT{#2} \tlist_map_break:w
  #1{#2} \tlist_map_function_aux:Nn  #1
}
\def_new:Npn\tlp_map_function:cN{\exp_args:Nc\tlp_map_function:NN}
\def_long_new:Npn \tlist_map_inline:nn #1#2{
  \num_incr:N \l_tlp_inline_level_num
  \def_long:cpn {tlist_map_inline_ \num_use:N \l_tlp_inline_level_num :n}
  ##1{#2}
  \exp_args:Nc \tlist_map_function_aux:Nn
  {tlist_map_inline_ \num_use:N \l_tlp_inline_level_num :n}
  #1 \q_nil\q_stop
  \num_decr:N \l_tlp_inline_level_num
}
\def_long_new:Npn \tlp_map_inline:Nn #1#2{
  \num_incr:N \l_tlp_inline_level_num
  \def_long:cpn {tlist_map_inline_ \num_use:N \l_tlp_inline_level_num :n}
  ##1{#2}
  \exp_args:NcE \tlist_map_function_aux:Nn
  {tlist_map_inline_ \num_use:N \l_tlp_inline_level_num :n}
  #1 \q_nil\q_stop
  \num_decr:N \l_tlp_inline_level_num
}
\def_new:Npn\tlp_map_inline:cN{\exp_args:Nc\tlp_map_inline:NN}
\tlp_new:Nn \l_tlp_inline_level_num{0}
\def_long_new:Npn \tlist_map_variable:nNn #1#2#3{
  \tlist_map_variable_aux:Nnn #2 {#3} #1 \q_nil \q_stop
}
\def_new:Npn \tlp_map_variable:NNn {\exp_args:No \tlist_map_variable:nNn}
\def_new:Npn \tlp_map_variable:cNn {\exp_args:Nc \tlp_map_variable:NNn}
\def_long_new:Npn \tlist_map_variable_aux:Nnn #1#2#3{
  \tlp_set:Nn #1{#3}
  \quark_if_nil:NT #1 \tlist_map_break:w
  #2 \tlist_map_variable_aux:Nnn #1{#2}
}
\let_new:NN \tlist_map_break:w \use_none_delimit_by_q_stop:w
\let_new:NN \tlp_map_break:w \tlist_map_break:w
\let_new:NN \tlist_compare:xx \pdfstrcmp
\def_long_new:NNn \tlist_compare:nn 2{
  \tlist_compare:xx{\exp_not:n{#1}}{\exp_not:n{#2}}
}
\def_long_new:NNn \tlist_compare:nx 1{
  \tlist_compare:xx{\exp_not:n{#1}}
}
\def_long_new:NNn \tlist_compare:xn 2{
  \tlist_compare:xx{#1}{\exp_not:n{#2}}
}
\def_long_new:NNn \tlist_compare:no 2{
  \tlist_compare:xx{\exp_not:n{#1}}{\exp_not:n\exp_after:NN{#2}}
}
\def_long_new:NNn \tlist_compare:on 2{
  \tlist_compare:xx{\exp_not:n\exp_after:NN{#1}}{\exp_not:n{#2}}
}
\def_long_new:NNn \tlist_compare:oo 2{
  \tlist_compare:xx{\exp_not:n\exp_after:NN{#1}}{\exp_not:n\exp_after:NN{#2}}
}
\def_long_new:NNn \tlist_compare:xo 2{
  \tlist_compare:xx{#1}{\exp_not:n\exp_after:NN{#2}}
}
\def_long_new:NNn \tlist_compare:ox 2{
  \tlist_compare:xx{\exp_not:n\exp_after:NN{#1}}{\exp_not:n{#2}}
}
\def:Npn \tmp:w #1{
  \def_long_new:cNx {tlist_if_eq_p:#1} 2{
    \exp_not:N \if_num:w
    \exp_after:NN \exp_not:N \cs:w tlist_compare:#1\cs_end:{##1}{##2}
    \exp_not:n{ =\c_zero \c_true \else: \c_false \fi: }
  }
  \def_long_test_function_new:npx{tlist_if_eq:#1}##1##2{
    \exp_not:N \if_num:w
    \exp_after:NN \exp_not:N \cs:w tlist_compare:#1\cs_end:{##1}{##2}
    \exp_not:n{ =\c_zero }
  }
}
\tmp:w{xx}  \tmp:w{nn}  \tmp:w{oo}  \tmp:w{xn}  \tmp:w{nx}
\tmp:w{on}  \tmp:w{no}  \tmp:w{xo}  \tmp:w{ox}
\cs_if_really_free:cT{pdf_strcmp:D}{
  \def_long_test_function:npn{tlist_if_eq:nn}#1#2{
    \tlp_set:Nx \l_testa_tlp {\exp_not:n{#1}}
    \tlp_set:Nx \l_testb_tlp {\exp_not:n{#2}}
    \if_meaning:NN\l_testa_tlp \l_testb_tlp
  }
  \def_long_test_function:npn{tlist_if_eq:oo}#1#2{
    \tlp_set:Nx \l_testa_tlp {\exp_not:o{#1}}
    \tlp_set:Nx \l_testb_tlp {\exp_not:o{#2}}
    \if_meaning:NN\l_testa_tlp \l_testb_tlp
  }
  \def_long:Npn\tlist_compare:xx #1#2{\ERROR}
}
\def_long:Npn \tlp_if_in:NnTF #1#2{
  \def_long:Npn\tmp:w ##1 #2 ##2\q_stop{
    \quark_if_no_value:nFT{##2}
  }
  \exp_after:NN \tmp:w #1 #2 \q_no_value \q_stop
}
\def_new:Npn \tlp_if_in:cnTF {\exp_args:Nc\tlp_if_in:NnTF}
\def_long:Npn \tlp_if_in:NnT #1#2{
  \def_long:Npn\tmp:w ##1 #2 ##2\q_stop{
    \quark_if_no_value:nFT{##2}
  }
  \exp_after:NN \tmp:w #1 #2 \q_no_value \q_stop
}
\def_new:Npn \tlp_if_in:cnT {\exp_args:Nc\tlp_if_in:NnT}
\def_long:Npn \tlp_if_in:NnF #1#2{
  \def_long:Npn\tmp:w ##1 #2 ##2\q_stop{
    \quark_if_no_value:nT{##2}
  }
  \exp_after:NN \tmp:w #1 #2 \q_no_value \q_stop
}
\def_new:Npn \tlp_if_in:cnF {\exp_args:Nc\tlp_if_in:NnF}
\def_long_new:Npn \tlist_if_in:nnTF #1#2{
  \def_long:Npn\tmp:w ##1 #2 ##2\q_stop{
    \quark_if_no_value:nFT{##2}
  }
  \tmp:w #1 #2 \q_no_value \q_stop
}
\def_new:Npn \tlist_if_in:onTF {\exp_args:No\tlist_if_in:nnTF}
\tlp_new:Nn\l_tlp_replace_tlp{}
\def_long_new:NNn \tlp_replace_in_aux:NNnn 4{
  \def:Npn \tmp:w ##1#3##2\q_stop{
    \quark_if_no_value:nF{##2}
    {
      \tlp_set:Nx\l_tlp_replace_tlp{\exp_not:o{\use_none:n##1#4}}
      \def:Npn \tmp:w ####1#3\q_no_value{
        \tlp_put_right:Nx \l_tlp_replace_tlp {\exp_not:o{\use_none:n ####1}}
      }
      \tmp:w \q_mark ##2
    }
    #1#2\l_tlp_replace_tlp
  }
  \use_arg_i:n{\exp_after:NN \tmp:w\exp_after:NN\q_mark}
  #2#3 \q_no_value\q_stop
}
\def_new:Npn \tlp_replace_in:Nnn {\tlp_replace_in_aux:NNnn \tlp_set_eq:NN}
\def_new:Npn \tlp_replace_in:cnn{\exp_args:Nc\tlp_replace_in:Nnn}
\def_new:Npn \tlp_greplace_in:Nnn {\tlp_replace_in_aux:NNnn \tlp_gset_eq:NN}
\def_new:Npn \tlp_greplace_in:cnn{\exp_args:Nc\tlp_greplace_in:Nnn}
\def_long:NNn \tlp_replace_all_in_aux:NNnn 4{
  \tlp_clear:N \l_tlp_replace_tlp
  \def:Npn \tmp:w ##1#3##2\q_stop{
    \quark_if_no_value:nTF{##2}
    {
      \tlp_put_right:Nx \l_tlp_replace_tlp {\exp_not:o{\use_none:n##1}}
    }
    {
      \tlp_put_right:Nx \l_tlp_replace_tlp {\exp_not:o{\use_none:n##1 #4}}
      \tmp:w \q_mark##2 \q_stop
    }
  }
  \use_arg_i:n{\exp_after:NN \tmp:w\exp_after:NN\q_mark}
  #2#3 \q_no_value\q_stop
  #1#2\l_tlp_replace_tlp
}
\def_new:Npn \tlp_replace_all_in:Nnn {
  \tlp_replace_all_in_aux:NNnn \tlp_set_eq:NN}
\def_new:Npn \tlp_replace_all_in:cnn{\exp_args:Nc\tlp_replace_all_in:Nnn}
\def_new:Npn \tlp_greplace_all_in:Nnn {
  \tlp_replace_all_in_aux:NNnn \tlp_gset_eq:NN}
\def_new:Npn \tlp_greplace_all_in:cnn{\exp_args:Nc\tlp_greplace_all_in:Nnn}
\def_long_new:NNn \tlp_remove_in:Nn  2{\tlp_replace_in:Nnn #1{#2}{}}
\def_long_new:NNn \tlp_gremove_in:Nn 2{\tlp_greplace_in:Nnn #1{#2}{}}
\def_new:Npn \tlp_remove_in:cn{\exp_args:Nc\tlp_remove_in:Nn}
\def_new:Npn \tlp_gremove_in:cn{\exp_args:Nc\tlp_gremove_in:Nn}
\def_long_new:Npn \tlp_remove_all_in:Nn #1#2{
  \tlp_replace_all_in:Nnn #1{#2}{}
}
\def_long_new:Npn \tlp_gremove_all_in:Nn #1#2{
  \tlp_greplace_all_in:Nnn #1{#2}{}
}
\def_new:Npn \tlp_remove_all_in:cn{\exp_args:Nc\tlp_remove_all_in:Nn}
\def_new:Npn \tlp_gremove_all_in:cn{\exp_args:Nc\tlp_gremove_all_in:Nn}
\def_long_new:Npn \tlist_head:n #1{\tlist_head:w #1\q_nil}
\let_new:NN \tlist_head_i:n \tlist_head:n
\def_long_new:Npn \tlist_tail:n #1{\tlist_tail:w #1\q_nil}
\def_new:Npn \tlist_tail:f {\exp_args:Nf \tlist_tail:n}
\def_long_new:Npn \tlist_head_iii:n #1{\tlist_head_iii:w #1\q_nil}
\def_new:Npn \tlist_head_iii:f {\exp_args:Nf \tlist_head_iii:n}
\let_new:NN \tlist_head:w \use_arg_i_delimit_by_q_nil:nw
\def_long_new:Npn \tlist_tail:w #1#2\q_nil{#2}
\def_long_new:Npn \tlist_head_iii:w #1#2#3#4\q_nil{#1#2#3}
\def_long_new:Npn \tlist_if_head_eq_meaning_p:nN #1#2{
  \exp_after:NN \if_meaning:NN \tlist_head:w #1\q_nil#2
    \c_true
  \else:
    \c_false
  \fi:
}
\def_long_test_function_new:npn {tlist_if_head_eq_meaning:nN}#1#2{
  \if:w \tlist_if_head_eq_meaning_p:nN{#1}#2}
\def_long_new:Npn \tlist_if_head_eq_charcode_p:nN #1#2{
   \exp_after:NN\if_charcode:w \exp_after:NN\exp_not:N
     \tlist_head:w #1\q_nil\exp_not:N#2
    \c_true
  \else:
    \c_false
  \fi:
}
\def_long_test_function_new:npn {tlist_if_head_eq_charcode:nN}#1#2{
  \if:w\tlist_if_head_eq_charcode_p:nN{#1}#2}
\def_long_new:Npn \tlist_if_head_eq_charcode_p:fN #1#2{
   \exp_after:NN\if_charcode:w \tlist_head:w #1\q_nil\exp_not:N#2
    \c_true
  \else:
    \c_false
  \fi:
}
\def_long_test_function_new:npn {tlist_if_head_eq_charcode:fN}#1#2{
  \if:w\tlist_if_head_eq_charcode_p:fN{#1}#2}
\def_long_new:Npn \tlist_if_head_eq_catcode_p:nN #1#2{
   \exp_after:NN\if_charcode:w \exp_after:NN\exp_not:N
     \tlist_head:w #1\q_nil\exp_not:N#2
    \c_true
  \else:
    \c_false
  \fi:
}
\def_long_test_function_new:npn {tlist_if_head_eq_catcode:nN}#1#2{
  \if:w\tlist_if_head_eq_catcode_p:nN{#1}#2}
\def_long_new:Npn \tlist_reverse:n #1{
   \tlist_reverse_aux:nN {} #1 \q_nil\q_stop
}
\def_long_new:Npn \tlist_reverse_aux:nN #1#2{
  \quark_if_nil:NT #2
  { \use_arg_i_delimit_by_q_stop:nw {#1} }
  \tlist_reverse_aux:nN {#2#1}
}
%% File: l3expan.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3expan.dtx 573 2006-08-21 20:59:37Z morten $
       {L3 Experimental Argument Expansion module}
\tlp_new:Nn\l_exp_tlp{}
\def_new:Npn\exp_arg_next:nnn#1#2#3{
  #2\:::{#3#1}
}
\def_new:Npn\::n#1\:::#2#3{
  #1\:::{#2{#3}}
}
\def_new:Npn\::N#1\:::#2#3{
  #1\:::{#2#3}
}
\def_new:Npn\::c#1\:::#2#3{
  \exp_after:NN\exp_arg_next:nnn\cs:w #3\cs_end:{#1}{#2}
}
\def_new:Npn\::o#1\:::#2#3{
  \exp_after:NN\exp_arg_next:nnn\exp_after:NN{\exp_after:NN{#3}}{#1}{#2}
}
\def_new:Npn\::f#1\:::#2#3{
  \exp_after:NN\exp_arg_next:nnn
  \exp_after:NN{\exp_after:NN{\int_to_roman:w -`0 #3}}
  {#1}{#2}
}
\def_new:Npn\::x#1\:::#2#3{
  \tlp_set:Nx\l_exp_tlp{{{#3}}}
  \exp_after:NN\exp_arg_next:nnn\l_exp_tlp{#1}{#2}}
\def_new:Npn\:::#1{#1}
\def_new:Npn\::C#1\:::#2#3{
  \exp_after:NN\exp_C_aux:nnn\cs:w #3\cs_end:{#1}{#2}}
\def_new:Npn\exp_C_aux:nnn #1
 {
  \exp_after:NN
  \exp_arg_next:nnn
  \exp_after:NN
     {
  \exp_after:NN
      {#1}
     }
 }
\def:Npn\::E#1\:::#2#3{
  \exp_after:NN\exp_arg_next:nnn \exp_after:NN{#3}{#1}{#2}
}
\def:Npn\::e#1\:::#2#3{
  \exp_after:NN\exp_arg_next:nnn \exp_after:NN{#3}{#1}{#2}
}
\def:Npn\::d#1\:::#2#3{
  \exp_after:NN\exp_after:NN\exp_after:NN\exp_arg_next:nnn
  \exp_after:NN\exp_after:NN\exp_after:NN{
  \exp_after:NN\exp_after:NN\exp_after:NN{#3}}{#1}{#2}
}
\let:NN \exp_args:NE \exp_after:NN
\def:Npn \exp_args:NNE #1{\exp_args:NE#1\exp_args:NE}
\def:Npn \exp_args:NNNE #1#2{\exp_args:NE#1\exp_args:NE#2\exp_args:NE}
\def:Npn \exp_args:NEE #1{\exp_args:NE\exp_args:NE\exp_args:NE#1\exp_args:NE}
\def:Npn \exp_args:NcE #1#2{\exp_after:NN #1\cs:w #2\exp_after:NN\cs_end:}
\def:Npn \exp_args:Nd {\::d\:::}
\def:Npn \exp_args:NNd {\::N\::d\:::}
\def:Npn \exp_args:NC {\::C\:::}
\def:Npn \exp_args:Ncx {\::c\::x\:::}
\def:Npn \exp_args:Ncco {\::c\::c\::o\:::}
\def:Npn \exp_args:Nccx {\::c\::c\::x\:::}
\def:Npn \exp_args:Ncnx {\::c\::n\::x\:::}
\def:Npn \exp_args:NcNc {\::c\::N\::c\:::}
\def:Npn \exp_args:NcNo {\::c\::N\::o\:::}
\def:Npn \exp_args:Ncco {\::c\::c\::o\:::}
\def:Npn \exp_args:Nf {\::f\:::}
\def:Npn \exp_args:NNf {\::N\::f\:::}
\def:Npn \exp_args:Nfo{\::f\::o\:::}
\def:Npn \exp_args:Nnf {\::n\::f\:::}
\def:Npn \exp_args:NNno {\::N\::n\::o\:::}
%% Strange one this next one...
\def:Npn \exp_args:NnnN {\::n\::n\::N\:::}
\def:Npn \exp_args:Nnno {\::n\::n\::o\:::}
\def:Npn \exp_args:Nnnx {\::n\::n\::x\:::}
\def:Npn \exp_args:Nno {\::n\::o\:::}
\def:Npn \exp_args:Nnox {\::n\::o\::x\:::}
\def:Npn \exp_args:NNx {\::N\::x\:::}
\def:Npn \exp_args:Nnx {\::n\::x\:::}
\def:Npn \exp_args:Noo {\::o\::o\:::}
\def:Npn \exp_args:Noox {\::o\::o\::x\:::}
\def:Npn \exp_args:Nox {\::o\::x\:::}
\def:Npn \exp_args:Nx {\::x\:::}
\def:Npn \exp_args:Nxo {\::x\::o\:::}
\def:Npn \exp_args:Nxx {\::x\::x\:::}
\def:Npn \exp_args:NNC {\::N\::C\:::}
\def:Npn \exp_args:Nnnc {\::n\::n\::c\:::}
\def_new:Npn\exp_not:o#1{\exp_not:n\exp_after:NN{#1}}
\def_new:Npn\exp_not:E{\exp_after:NN\exp_not:N}
\def_new:Npn\exp_not:c#1{\exp_after:NN\exp_not:N\cs:w#1\cs_end:}
\def_new:Npn \exp_args:No #1#2{\exp_after:NN#1\exp_after:NN{#2}}
\def_new:Npn \exp_args:NOo #1#2#3{\exp_after:NN\exp_args:No \exp_after:NN#1
  \exp_after:NN#2\exp_after:NN{#3}}
\def_new:Npn \exp_args:NOOo #1#2#3#4{\exp_after:NN\exp_args:NOo
  \exp_after:NN#1\exp_after:NN#2\exp_after:NN#3\exp_after:NN{#4}}
\def_new:Npn \exp_args:NNo #1#2#3{\exp_after:NN#1\exp_after:NN#2
  \exp_after:NN{#3}}
\def_new:Npn \exp_args:NNO #1#2#3 {\exp_after:NN#1
  \exp_after:NN#2 #3}
\def_new:Npn \exp_args:NNOo #1#2#3#4{\exp_after:NN\exp_args:NNo
  \exp_after:NN#1\exp_after:NN#2\exp_after:NN#3\exp_after:NN{#4}}
\def_new:Npn \exp_args:NNNo #1#2#3#4{\exp_after:NN#1\exp_after:NN#2
  \exp_after:NN#3\exp_after:NN{#4}}
\def_new:Npn \exp_args:Nc #1#2{\exp_after:NN#1\cs:w#2\cs_end:}
\def_new:Npn \exp_args:NNc #1#2#3{\exp_after:NN#1\exp_after:NN#2
    \cs:w#3\cs_end:}
\def_new:Npn \exp_args:NOc#1#2#3{\exp_after:NN\exp_args:No\exp_after:NN
    #1\exp_after:NN#2\cs:w#3\cs_end:}
\def_new:Npn \exp_args:Ncc #1#2#3{\exp_after:NN#1
    \cs:w#2\exp_after:NN\cs_end:\cs:w#3\cs_end:}
\def_new:Npn \exp_args:Nccc #1#2#3#4{\exp_after:NN#1
    \cs:w#2\exp_after:NN\cs_end:\cs:w#3\exp_after:NN
      \cs_end:\cs:w #4\cs_end:}
\def_new:Npn \exp_args:Nco #1#2#3{\exp_after:NN#1\cs:w#2\exp_after:NN
     \cs_end:\exp_after:NN{#3}}
\def:Npn\exp_def_form:nnn#1#2#3{
   \exp_after:NN
   \def:Npn
     \cs:w
        #1:#3
       \exp_after:NN
     \cs_end:
     \exp_after:NN
       {
        \cs:w
           exp_args:N#3
          \exp_after:NN
        \cs_end:
        \cs:w
           #1:#2
        \cs_end:
       }
    \cs_if_free:cT
          {exp_args:N#3}
          {\def:cpx {exp_args:N#3}
                    {\exp_args_form_x:w #3 :}
          }
}
\def_new:Npn\exp_args_form_x:w #1 {
  \exp_not:c{::#1}
  \if_meaning:NN #1 :
  \else:
    \exp_after:NN\exp_args_form_x:w
  \fi:}
%% File: l3quark.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3quark.dtx 573 2006-08-21 20:59:37Z morten $
          {L3 Experimental Quark Commands}
\def_new:Npn \quark_new:N #1{\tlp_new:Nn #1{#1}}
\quark_new:N \q_stop
\quark_new:N \q_no_value
\quark_new:N \q_nil
\quark_new:N\q_error
\quark_new:N\q_mark
\def_long_test_function_new:npn {quark_if_no_value:N} #1 {
     \if_meaning:NN\q_no_value#1}
\def_long_new:Npn \quark_if_no_value_p:N #1{
  \if_meaning:NN \q_no_value #1 \c_true
  \else: \c_false \fi:
}
\cs_if_really_free:cTF{pdf_strcmp:D}{
  \def_long_new:Npn \quark_if_no_value_p:n #1{
    \if:w \exp_args:No \str_if_eq_var_p:nf
      {\token_to_string:N\q_no_value\text_put_sp:}
      {\tlist_to_str:n{#1}}
      \c_true
    \else:
      \c_false
    \fi:
  }
}
{
  \def_long_new:Npn \quark_if_no_value_p:n #1{
    \if_num:w
    \pdf_strcmp:D {\exp_not:N \q_no_value}{\exp_not:n{#1}}=\c_zero
    \c_true \else: \c_false \fi:
  }
}
\def_long_test_function_new:npn {quark_if_no_value:n} #1 {
  \if:w \quark_if_no_value_p:n{#1}}
\def_long:Npn \quark_if_no_value:nFT #1{
  \if:w \quark_if_no_value_p:n{#1}
      \exp_after:NN\use_arg_ii:nn
    \else:
      \exp_after:NN\use_arg_i:nn
    \fi:
}
\def_long_new:Npn \quark_if_nil_p:N #1{
  \if_meaning:NN \q_nil #1 \c_true
  \else: \c_false \fi:
}
\def_long_test_function_new:npn {quark_if_nil:N}#1{
  \if_meaning:NN\q_nil#1}
\cs_if_really_free:cTF{pdf_strcmp:D}{
  \def_long_new:Npn \quark_if_nil_p:n #1{
    \if:w \exp_args:No \str_if_eq_var_p:nf
      {\token_to_string:N\q_nil\text_put_sp:}
      {\tlist_to_str:n{#1}}
      \c_true
    \else:
      \c_false
    \fi:
  }
}
{
  \def_long_new:Npn \quark_if_nil_p:n #1{
    \if_num:w
    \pdf_strcmp:D {\exp_not:N \q_nil}{\exp_not:n{#1}}=\c_zero
    \c_true \else: \c_false \fi:
  }
}
\def_long_test_function_new:npn {quark_if_nil:n} #1 {
  \if:w \quark_if_nil_p:n{#1}}
\def_new:Npn \quark_if_nil_p:o{\exp_args:No\quark_if_nil_p:n}
\def_new:Npn \quark_if_nil:oTF{\exp_args:No\quark_if_nil:nTF}
\def_new:Npn \quark_if_nil:oT {\exp_args:No\quark_if_nil:nT}
\def_new:Npn \quark_if_nil:oF {\exp_args:No\quark_if_nil:nF}
%% File: l3num.dtx Copyright (C) 2005-2006 Frank Mittelbach, LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3num.dtx 573 2006-08-21 20:59:37Z morten $
       {L3 Experimental token numbers}
\let_new:NN \num_eval:w         \etex_numexpr:D
\let_new:NN \if_num:w           \tex_ifnum:D
\let_new:NN \if_num_odd:w       \tex_ifodd:D
\let_new:NN \if_case:w          \tex_ifcase:D
\let_new:NN \or:                \tex_or:D
\def_long_new:Npn \use_arg_after_or:w #1\or: #2\fi:{\fi: #1}
\def_long_new:Npn \use_arg_after_else:w #1\else: #2\fi:{\fi: #1}
\def_long_new:Npn \use_arg_after_fi:w #1\fi:{\fi: #1}
\def:Npn \num_incr:N #1{\num_add:Nn#1 1}
\def:Npn \num_decr:N #1{\num_add:Nn#1 \c_minus_one}
\def:Npn \num_gincr:N #1{\num_gadd:Nn#1 1}
\def:Npn \num_gdecr:N #1{\num_gadd:Nn#1 \c_minus_one}
\def_new:Npn \num_incr:c {\exp_args:Nc \num_incr:N}
\def_new:Npn \num_decr:c {\exp_args:Nc \num_decr:N}
\def_new:Npn \num_gincr:c {\exp_args:Nc \num_gincr:N}
\def_new:Npn \num_gdecr:c {\exp_args:Nc \num_gdecr:N}
\def_new:Npn \num_zero:N #1 {\num_set:Nn #1 0}
\def_new:Npn \num_gzero:N #1 {\num_gset:Nn #1 0}
\def_new:Npn \num_zero:c {\exp_args:Nc \num_zero:N}
\def_new:Npn \num_gzero:c {\exp_args:Nc \num_gzero:N}
\def_new:Npn \num_new:N #1{\tlp_new:Nn #1{0}}
\def_new:Npn \num_new:c {\exp_args:Nc \num_new:N}
\def_new:Npn \num_eval:n #1{\num_eval:w #1\scan_stop:}
\def_new:Npn \num_set:Nn #1#2{
  \tlp_set:No #1{ \tex_number:D \num_eval:n {#2} }
}
\def_new:Npn \num_gset:Nn {\pref_global:D \num_set:Nn}
\def_new:Npn \num_set:cn {\exp_args:Nc \num_set:Nn }
\def_new:Npn \num_gset:cn {\exp_args:Nc \num_gset:Nn }
\let_new:NN \num_set_eq:NN \tlp_set_eq:NN
\def_new:Npn \num_set_eq:cN {\exp_args:Nc \num_set_eq:NN}
\def_new:Npn \num_set_eq:Nc {\exp_args:NNc \num_set_eq:NN}
\def_new:Npn \num_set_eq:cc {\exp_args:Ncc \num_set_eq:NN}
\let_new:NN \num_gset_eq:NN \tlp_gset_eq:NN
\def_new:Npn \num_gset_eq:cN {\exp_args:Nc \num_gset_eq:NN}
\def_new:Npn \num_gset_eq:Nc {\exp_args:NNc \num_gset_eq:NN}
\def_new:Npn \num_gset_eq:cc {\exp_args:Ncc \num_gset_eq:NN}
\def_new:Npn \num_add:Nn #1#2 {\num_set:Nn #1{#1+#2}}
\def_new:Npn \num_gadd:Nn {\pref_global:D \num_add:Nn}
\let_new:NN\num_use:N \use_arg_i:n
\let_new:NN\num_use:c \cs_use:c
\def_test_function_new:npn {num_compare:nNn}#1#2#3{
  \if_num:w \num_eval:n {#1}#2\num_eval:n {#3}
}
\def_new:Npn \num_compare:cNcTF { \exp_args:NcNc\num_compare:nNnTF }
\def_new:Npn \num_compare_p:nNn #1#2#3{
  \if_num:w \num_eval:n {#1}#2\num_eval:n {#3}
    \c_true
  \else:
    \c_false
  \fi:
}
\num_new:N \l_tmpa_num
\num_new:N \l_tmpb_num
\num_new:N \l_tmpc_num
\num_new:N \g_tmpa_num
\num_new:N \g_tmpb_num
\engine_aleph:TF
{
  \let_new:NN \const_new_aux:Nw \tex_chardef:D
  \const_new_aux:Nw \c_max_register_num = 65535 \scan_stop:
}
{
  \let_new:NN \const_new_aux:Nw \tex_mathchardef:D
  \const_new_aux:Nw \c_max_register_num = 32767 \scan_stop:
}
\def_new:Npn \const_new:Nn #1#2 {
  \num_compare:nNnTF  {#2} > \c_minus_one
  {
    \num_compare:nNnTF {#2} > \c_max_register_num
    {\int_new:N #1 \int_set:Nn #1{#2}}
    {\chk_new_cs:N #1 \const_new_aux:Nw #1 = #2 \scan_stop: }
  }
  {\int_new:N #1 \int_set:Nn #1{#2}}
}
 %% \tex_countdef:D \c_minus_one = 10 \scan_stop:
 %% \c_minus_one = -1 \scan_stop:        %% in l3basics
 %% \tex_chardef:D \c_sixteen    = 16\scan_stop: %% in l3basics
\const_new:Nn \c_zero   {0}
\const_new:Nn \c_one    {1}
\const_new:Nn \c_two    {2}
\const_new:Nn \c_three  {3}
\const_new:Nn \c_four   {4}
\const_new:Nn \c_six    {6}
\const_new:Nn \c_seven  {7}
\const_new:Nn \c_nine   {9}
\const_new:Nn \c_ten    {10}
\const_new:Nn \c_eleven {11}
\const_new:Nn \c_thirty_two {32}
\const_new:Nn \c_hundred_one          {101}
\const_new:Nn \c_twohundred_fifty_five {255}
\const_new:Nn \c_twohundred_fifty_six {256}
\const_new:Nn \c_thousand             {1000}
\const_new:Nn \c_ten_thousand         {10000}
\const_new:Nn \c_ten_thousand_one     {10001}
\const_new:Nn \c_ten_thousand_two     {10002}
\const_new:Nn \c_ten_thousand_three   {10003}
\const_new:Nn \c_ten_thousand_four    {10004}
\const_new:Nn \c_twenty_thousand      {20000}
%% File: l3seq.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3seq.dtx 573 2006-08-21 20:59:37Z morten $
          {L3 Experimental sequences and stacks}
\let_new:NN \seq_elt:w \ERROR
\let_new:NN \seq_elt_end: \ERROR
\def_new:Npn \seq_new:N #1{\tlp_new:Nn #1{}}
\def_new:Npn \seq_new:c {\exp_args:Nc \seq_new:N}
\let_new:NN \seq_clear:N \tlp_clear:N
\let_new:NN \seq_clear:c \tlp_clear:c
\let_new:NN \seq_gclear:N \tlp_gclear:N
\let_new:NN \seq_gclear:c \tlp_gclear:c
\let_new:NN \seq_clear_new:N \tlp_clear_new:N
\let_new:NN \seq_clear_new:c \tlp_clear_new:c
\let_new:NN \seq_gclear_new:N \tlp_gclear_new:N
\let_new:NN \seq_gclear_new:c \tlp_gclear_new:c
\let_new:NN \seq_if_empty_p:N \tlp_if_empty_p:N
\let_new:NN \seq_if_empty:NTF \tlp_if_empty:NTF
\def_new:Npn \seq_if_empty:cTF {\exp_args:Nc\seq_if_empty:NTF}
\let_new:NN \seq_if_empty:NF \tlp_if_empty:NF
\def_new:Npn \seq_if_empty:cF {\exp_args:Nc\seq_if_empty:NF}
\def_new:Npn \seq_if_empty_err:N #1{\if_meaning:NN#1\c_empty_tlp
  \tlp_clear:N \l_testa_tlp % catch prefixes
  \err_latex_bug:x{Empty~sequence~`\token_to_string:N#1'}\fi:}
\def_new:Npn \seq_get:NN #1{
  \seq_if_empty_err:N #1
  \exp_after:NN\seq_get_aux:w #1\q_stop}
\def_new:Npn \seq_get_aux:w \seq_elt:w #1\seq_elt_end:
                #2\q_stop #3{\tlp_set:Nn #3{#1}}
\def_new:Npn \seq_get:cN {\exp_args:Nc \seq_get:NN}
\def_new:Npn \seq_pop_aux:nnNN #1#2#3{
  \seq_if_empty_err:N #3
  \exp_after:NN\seq_pop_aux:w #3\q_stop #1#2#3}
\def_new:Npn \seq_pop_aux:w \seq_elt:w #1\seq_elt_end:
                #2\q_stop #3#4#5#6{#3#5{#2}#4#6{#1}}
\def_new:Npn \seq_put_aux:Nnn #1{
  \exp_after:NN\seq_put_aux:w #1\q_stop #1}
\def_new:Npn \seq_put_aux:w #1\q_stop #2#3#4{\tlp_set:Nn #2{#3#1#4}}
\def_new:Npn \seq_put_left:Nn #1#2{
        \seq_put_aux:Nnn #1{\seq_elt:w #2\seq_elt_end:}{}}
\def_new:Npn \seq_put_left:cn {\exp_args:Nc\seq_put_left:Nn}
\def_new:Npn \seq_put_left:No {\exp_args:NNo\seq_put_left:Nn}
\def_new:Npn \seq_put_left:Nx {\exp_args:Nnx\seq_put_left:Nn}
\def_new:Npn \seq_put_right:Nn #1#2{
        \seq_put_aux:Nnn #1{}{\seq_elt:w #2\seq_elt_end:}}
\def_new:Npn \seq_put_right:No {\exp_args:NNo\seq_put_right:Nn}
\def_new:Npn \seq_put_right:Nx {\exp_args:NNx\seq_put_right:Nn}
\def_new:Npn \seq_gput_left:Nn {
 \pref_global:D
   \seq_put_left:Nn}
\def_new:Npn \seq_gput_right:Nn {
 \pref_global:D
   \seq_put_right:Nn}
\def_new:Npn \seq_gput_right:No {\exp_args:NNo \seq_gput_right:Nn}
\def_new:Npn \seq_gput_right:Nc {\exp_args:NNc \seq_gput_right:Nn}
\def_new:Npn \seq_gput_right:cn {\exp_args:Nc  \seq_gput_right:Nn}
\def_new:Npn \seq_gput_right:co {\exp_args:Nco \seq_gput_right:Nn}
\def_new:Npn \seq_gput_right:cc {\exp_args:Ncc \seq_gput_right:Nn}
\def_new:Npn \seq_map_variable_aux:Nnw #1#2\seq_elt:w#3\seq_elt_end:{
  \tlp_set:Nn #1{#3}
  \quark_if_nil:NT #1 \seq_map_break:w
  #2
  \seq_map_variable_aux:Nnw #1{#2}
}
\def_new:Npn \seq_map_variable:NNn #1#2#3{
  \tlp_set:Nx #2 {\exp_not:n{\seq_map_variable_aux:Nnw #2{#3}}}
  \exp_after:NN #2 #1 \seq_elt:w \q_nil\seq_elt_end: \q_stop
}
\def_new:Npn \seq_map_variable:cNn{\exp_args:Nc\seq_map_variable:Nn}
\let_new:NN \seq_map_break:w \use_none_delimit_by_q_stop:w
\def_new:Npn \seq_map:NN #1#2{
  \def:Npn \seq_elt:w ##1\seq_elt_end: {#2{##1}}#1
  \let:NN \seq_elt:w \ERROR
}
\def_new:Npn \seq_map_inline:Nn #1#2{
  \def:Npn \seq_elt:w ##1\seq_elt_end: {#2}#1
  \let:NN \seq_elt:w \ERROR
}
\def_new:Npn \seq_map_inline:cn{\exp_args:Nc\seq_map_inline:Nn}
\let_new:NN  \seq_set_eq:NN \let:NN
\def_new:Npn \seq_set_eq:Nc {\exp_args:NNc \seq_set_eq:NN}
\let_new:NN \seq_gset_eq:NN \glet:NN
\def_new:Npn \seq_gset_eq:cN {\exp_args:Nc \seq_gset_eq:NN}
\def_new:Npn \seq_gset_eq:Nc {\exp_args:NNc \seq_gset_eq:NN}
\def_new:Npn \seq_gset_eq:cc {\exp_args:Ncc \seq_gset_eq:NN}
\def_new:Npn \seq_gconcat:NNN #1#2#3{
  \tlp_gset:Nx #1 {\exp_not:o{#2}\exp_not:o{#3}}
}
\def_new:Npn \seq_gconcat:ccc{\exp_args:Nccc\seq_gconcat:NNN}
\def_new:Npn \seq_if_in:NnTF #1#2{
  \def:Npn\tmp:w
      ##1\seq_elt:w #2\seq_elt_end: ##2##3\q_stop{
        \if_meaning:NN\q_no_value##2
          \exp_after:NN\use_arg_ii:nn
        \else:
          \exp_after:NN\use_arg_i:nn
        \fi:
      }
  \exp_after:NN
  \tmp:w #1\seq_elt:w
  #2\seq_elt_end: \q_no_value \q_stop}
\def_new:Npn \seq_if_in:coTF {\exp_args:Nco \seq_if_in:NnTF}
\def_new:Npn \seq_if_in:cnTF {\exp_args:Nc \seq_if_in:NnTF}
\def_new:Npn \seq_if_in:cxTF {\exp_args:Ncx \seq_if_in:NnTF}
\def_new:Npn \seq_if_in:NnF #1#2 { \seq_if_in:NnTF #1{#2}\use_noop: }
\def_new:Npn \seq_if_in:cnF {\exp_args:Nc \seq_if_in:NnF}
\let_new:NN \seq_push:Nn \seq_put_left:Nn
\let_new:NN \seq_push:No \seq_put_left:No
\let_new:NN \seq_push:cn \seq_put_left:cn
\def_new:Npn \seq_pop:NN {\seq_pop_aux:nnNN \tlp_set:Nn \tlp_set:Nn}
\def_new:Npn \seq_pop:cN {\exp_args:Nc \seq_pop:NN}
\let_new:NN \seq_gpush:Nn \seq_gput_left:Nn
\def_new:Npn \seq_gpush:No {\exp_args:NNo \seq_gpush:Nn}
\def_new:Npn \seq_gpush:cn {\exp_args:Nc \seq_gpush:Nn}
\def_new:Npn \seq_gpush:NC {\exp_args:NNC \seq_gpush:Nn}
\def_new:Npn \seq_gpop:NN {\seq_pop_aux:nnNN \tlp_gset:Nn \tlp_set:Nn}
\def_new:Npn \seq_gpop:cN {\exp_args:Nc \seq_gpop:NN}
\let_new:NN \seq_top:NN \seq_get:NN
\let_new:NN \seq_top:cN \seq_get:cN
%% File: l3alloc.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3alloc.dtx 581 2006-12-12 12:28:27Z morten $
       {L3 Experimental register allocation}%
\def_new:Npn \alloc_setup_type:nnn #1 #2 #3{
  \num_new:c  {g_ #1 _allocation_num}
  \num_new:c  {l_ #1 _allocation_num}
  \seq_new:c  {g_ #1 _allocation_seq}
  \num_set:cn {g_ #1 _allocation_num}{#2}
  \num_set:cn {l_ #1 _allocation_num}{#3}
}
\def_new:Npn \alloc_next_g:n #1 {
  \num_gincr:c {g_ #1 _allocation_num}
  \num_compare:cNcTF  {g_ #1 _allocation_num} = {l_ #1 _allocation_num}
    {\io_put_term:x{We~ ran~ out~ of~ registers~ of~ type~ g_#1!}}
    {
      \seq_if_in:cxTF {g_ #1 _allocation_seq}
                      {\num_use:c{g_ #1 _allocation_num}}
        {\io_put_term:x{\num_use:c{g_ #1 _allocation_num}~Already~ allocated!}
          \alloc_next_g:n {#1} }
        {\use_noop:}
        }
  }
\def_new:Npn \alloc_next_l:n #1 {
  \num_gdecr:c {l_ #1 _allocation_num}
  \num_compare:cNcTF  {g_ #1 _allocation_num} = {l_ #1 _allocation_num}
    {\io_put_term:x{We~ ran~ out~ of~ registers~ of~ type~ l_#1!}}
    {
      \seq_if_in:cxTF {g_ #1 _allocation_seq}
                      {\num_use:c{l_ #1 _allocation_num}}
        {\io_put_term:x{\num_use:c{l_ #1 _allocation_num}~Already~ allocated!}
          \alloc_next_l:n {#1} }
        {\io_put_term:x{\num_use:c{l_ #1 _allocation_num}~Free!}}
      }
  }
\def_new:Npn \alloc_reg:NnNN #1 #2 #3 #4{
  \chk_new_cs:N #4
  \if:w#1g
    \exp_after:NN \pref_global:D
  \fi:
  #3 #4 \num_use:c{#1_ #2 _allocation_num}
  %%\cs_record_meaning:N#1
  \io_put_log:x{
    \token_to_string:N#4=#2~register~\num_use:c{#1_ #2 _allocation_num}}
  \cs_use:c{alloc_next_#1:n} {#2}
 }
%% File: l3io.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3io.dtx 573 2006-08-21 20:59:37Z morten $
          {L3 Experimental i/o module}
\alloc_setup_type:nnn {iow} \c_zero \c_sixteen
\def_new:Npn \iow_new:N #1 {\alloc_reg:NnNN g {iow} \tex_chardef:D #1}
\def_new:Npn \iow_new:c {\exp_args:Nc \iow_new:N}
\def_new:Npn \iow_open:Nn #1#2{\iow_close:N #1
     \tex_immediate:D\tex_openout:D#1#2\scan_stop:}
\def_new:Npn \iow_open:cn {\exp_args:Nc \iow_open:Nn}
\def_new:Npn \iow_close:N {\tex_immediate:D\tex_closeout:D}
\let_new:NN \c_io_term_stream \c_sixteen
\let_new:NN \c_iow_log_stream \c_minus_one
\def_new:Npn \iow_expanded:Nn {\tex_immediate:D\iow_deferred_expanded:Nn}
\def_new:Npn \iow_unexpanded:Nn #1#2{
   \iow_expanded:Nn #1{\exp_not:n{#2}}}
\def:Npn \iow_expanded_log:n {\iow_expanded:Nn \c_iow_log_stream}
\def:Npn \iow_expanded_term:n{\iow_expanded:Nn \c_io_term_stream}

\def_new:Npn \iow_unexpanded_term:n {\iow_unexpanded:Nn \c_io_term_stream}
\def_new:Npn \iow_unexpanded_if_avail:Nn #1{
  \cs_free:NTF #1\use_none:n {\iow_unexpanded:Nn #1}}
\def_new:Npn \iow_unexpanded_if_avail:cn {
         \exp_args:Nc \iow_unexpanded_if_avail:Nn }
\def_new:Npn \iow_long_expanded_aux:w #1#2#3{
   \group_begin:\tex_newlinechar:D`\ #1#2{#3}\group_end:}
\def_new:Npn \iow_long_expanded:Nn {\iow_long_expanded_aux:w
                                    \iow_expanded:Nn}
\def_new:Npn \iow_long_unexpanded:Nn {\iow_long_expanded_aux:w
                                      \iow_unexpanded:Nn}
\let:NN \iow_deferred_expanded:Nn \tex_write:D
\def_new:Npn \iow_deferred_unexpanded:Nn #1#2{
  \iow_deferred_expanded:Nn{\exp_not:n{#2}}
}
%% Old implementation:
\def_new:Npn \iow_newline: {^^J}
\tlp_new:Nx \c_iow_comment_char {\cs_to_str:N\%}
\tlp_new:Nx \c_iow_lbrace_char{\cs_to_str:N\{}
\tlp_new:Nx \c_iow_rbrace_char{\cs_to_str:N\}}
\alloc_setup_type:nnn {ior} \c_zero \c_sixteen
\def_new:Npn \ior_new:N #1 {\alloc_reg:NnNN g {ior} \tex_chardef:D #1}
\let:NN \ior_close:N \tex_closein:D
\def_new:Npn \ior_open:Nn #1#2{\ior_close:N #1\scan_stop:
                               \tex_openin:D#1#2\scan_stop:}
\def_new:Npn \ior_eof:NTF #1{\if_eof:w#1
     \exp_after:NN\use_arg_i:nn \else:
     \exp_after:NN\use_arg_ii:nn \fi:}
\let:NN \if_eof:w \tex_ifeof:D
\def_new:Npn \ior_eof:NF #1{\if_eof:w#1
        \exp_after:NN \use_none:nn \fi: \use_arg_i:n}
 \def_new:Npn \ior_to:NN #1{\tex_read:D#1to}
\def_new:Npn \ior_gto:NN {
 \pref_global:D
   \ior_to:NN}
%% File: l3int.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3int.dtx 573 2006-08-21 20:59:37Z morten $
          {L3 Experimental Integer module}

\let_new:NN \int_to_roman:w \tex_romannumeral:D
\let_new:NN \int_to_number:w \tex_number:D
\let_new:NN \int_advance:w \tex_advance:D
\def_new:Npn \int_incr:N #1{\int_advance:w#1\c_one
}
\def_new:Npn \int_decr:N #1{\int_advance:w#1\c_minus_one
}
\def_new:Npn \int_gincr:N {
 \pref_global:D
   \int_incr:N}
\def_new:Npn \int_gdecr:N {
 \pref_global:D
   \int_decr:N}
\def:Npn \int_incr:N #1{\int_add:Nn#1\c_one}
\def:Npn \int_decr:N #1{\int_add:Nn#1\c_minus_one}
\def:Npn \int_gincr:N #1{\int_gadd:Nn#1\c_one}
\def:Npn \int_gdecr:N #1{\int_gadd:Nn#1\c_minus_one}
\alloc_setup_type:nnn {int} \c_eleven \c_max_register_num
\def_new:Npn \int_new:N   #1 {\alloc_reg:NnNN g {int} \tex_countdef:D#1}
\def_new:Npn \int_new_l:N #1 {\alloc_reg:NnNN l {int} \tex_countdef:D#1}
\def_new:Npn \int_new:c {\exp_args:Nc \int_new:N}
\def_new:Npn \int_set:Nn #1#2{#1 \int_eval:w #2\scan_stop:
}
\def_new:Npn \int_gset:Nn {
 \pref_global:D
   \int_set:Nn }
\def_new:Npn \int_set:cn {\exp_args:Nc \int_set:Nn }
\def_new:Npn \int_gset:cn {\exp_args:Nc \int_gset:Nn }
\def_new:Npn \int_zero:N  #1 {#1=\c_zero}
\def_new:Npn \int_zero:c  #1 {\exp_args:Nc \int_zero:N}
\def_new:Npn \int_gzero:N #1 {\pref_global:D #1=\c_zero}
\def_new:Npn \int_gzero:c {\exp_args:Nc \int_gzero:N}
\def_new:Npn \int_add:Nn #1#2{
    \int_advance:w #1 by \int_eval:w #2\scan_stop:
}
\def_new:Npn\int_add:cn{\exp_args:Nc\int_add:Nn}
\def_new:Npn \int_sub:Nn #1#2{
    \int_advance:w #1-\int_eval:w #2\scan_stop:
}
\def_new:Npn \int_gadd:Nn {
 \pref_global:D
   \int_add:Nn }
\def_new:Npn \int_gsub:Nn {
 \pref_global:D
   \int_sub:Nn }
\let_new:NN \int_use:N \tex_the:D
\def_new:Npn \int_use:c #1{\int_use:N \cs:w#1\cs_end:}
\def_new:Npn \int_gincr:c {\exp_args:Nc \int_gincr:N}
\def_new:Npn \int_gdecr:c {\exp_args:Nc \int_gdecr:N}
\def_new:Npn \int_to_arabic:n #1{\int_to_number:w \int_eval:n{#1}}
\def_new:Npn \int_roman_lcuc_mapping:Nnn #1#2#3{
  \def:cpn {int_to_lc_roman_#1:}{#2}
  \def:cpn {int_to_uc_roman_#1:}{#3}
}
\int_roman_lcuc_mapping:Nnn i i I
\int_roman_lcuc_mapping:Nnn v v V
\int_roman_lcuc_mapping:Nnn x x X
\int_roman_lcuc_mapping:Nnn l l L
\int_roman_lcuc_mapping:Nnn c c C
\int_roman_lcuc_mapping:Nnn d d D
\int_roman_lcuc_mapping:Nnn m m M
\int_roman_lcuc_mapping:Nnn Q \use_none:nn \use_none:nn
\def_new:Npn \int_to_roman:n #1 {
  \exp_after:NN \int_to_roman_lcuc:NN \exp_after:NN l
    \int_to_roman:w \int_eval:n {#1} Q
}
\def_new:Npn \int_to_Roman:n #1 {
  \exp_after:NN \int_to_roman_lcuc:NN \exp_after:NN u
    \int_to_roman:w \int_eval:n {#1} Q
}
\def_new:Npn \int_to_roman_lcuc:NN #1#2{
  \cs_use:c {int_to_#1c_roman_#2:}
  \int_to_roman_lcuc:NN #1
}
\def:Npn \int_convert_number_with_rule:nnN #1#2#3{
  \int_compare:nNnTF {#1}>{#2}
  {
    \exp_args:No \int_convert_number_with_rule:nnN
      { \int_use:N\int_div_truncate:nn {#1-1}{#2} }{#2}
      #3
    \exp_args:No #3 { \int_use:N\int_eval:n{1+\int_mod:nn {#1-1}{#2}} }
  }
  { \exp_args:No #3{ \int_use:N\int_eval:n{#1} } }
}
\def_new:Npn \int_alph_default_conversion_rule:n #1{
  \if_case:w #1
    \or: a\or: b\or: c\or: d\or: e\or: f
    \or: g\or: h\or: i\or: j\or: k\or: l
    \or: m\or: n\or: o\or: p\or: q\or: r
    \or: s\or: t\or: u\or: v\or: w\or: x
    \or: y\or: z
  \fi:
}
\def_new:Npn \int_Alph_default_conversion_rule:n #1{
  \if_case:w #1
    \or: A\or: B\or: C\or: D\or: E\or: F
    \or: G\or: H\or: I\or: J\or: K\or: L
    \or: M\or: N\or: O\or: P\or: Q\or: R
    \or: S\or: T\or: U\or: V\or: W\or: X
    \or: Y\or: Z
  \fi:
}
\def_new:Npn \int_to_alph:n #1{
  \int_convert_number_with_rule:nnN {#1}{26}
    \int_alph_default_conversion_rule:n
}
\def_new:Npn \int_to_Alph:n #1{
  \int_convert_number_with_rule:nnN {#1}{26}
    \int_Alph_default_conversion_rule:n
}
\def_new:Npn \int_to_symbol:n #1{
  \mode_math:TF
  {
    \int_convert_number_with_rule:nnN {#1}{9}
      \int_symbol_math_conversion_rule:n
  }
  {
    \int_convert_number_with_rule:nnN {#1}{9}
      \int_symbol_text_conversion_rule:n
  }
}
\def_new:Npn \int_symbol_math_conversion_rule:n #1 {
  \if_case:w #1
    \or: *
    \or: \dagger
    \or: \ddagger
    \or: \mathsection
    \or: \mathparagraph
    \or: \|
    \or: **
    \or: \dagger\dagger
    \or: \ddagger\ddagger
  \fi:
}
\def_new:Npn \int_symbol_text_conversion_rule:n #1 {
  \if_case:w #1
    \or: \textasteriskcentered
    \or: \textdagger
    \or: \textdaggerdbl
    \or: \textsection
    \or: \textparagraph
    \or: \textbardbl
    \or: \textasteriskcentered\textasteriskcentered
    \or: \textdagger\textdagger
    \or: \textdaggerdbl\textdaggerdbl
  \fi:
}
\int_new:N \l_tmpa_int
\int_new:N \l_tmpb_int
\int_new:N \l_tmpc_int
\int_new:N \g_tmpa_int
\int_new:N \g_tmpb_int
\int_new:N \l_loop_int  % a variable for use in loops (whilenum etc)
\let_new:NN \int_eval:n \num_eval:n
\let_new:NN \int_eval:w \num_eval:w
\const_new:Nn \c_max_int {2147483647}
\def:Npn \int_pre_eval_one_arg:Nnn #1#2{\exp_args:No#1{\int_eval:w#2}}
\def:Npn \int_pre_eval_two_args:Nnn #1#2#3{
  \exp_args:Noo#1{\int_use:N\int_eval:w#2}{\int_use:N\int_eval:w#3}
}
\def_new:Npn \int_div_truncate:nn {
  \int_pre_eval_two_args:Nnn\int_div_truncate_raw:nn
}
\def_new:Npn \int_div_truncate_raw:nn #1#2 {
  \int_eval:n{ (2*#1 - #2) / (2* #2) }
}
\def_new:Npn \int_div_round:nn {
  \int_pre_eval_two_args:Nnn\int_div_round_raw:nn
}
\def_new:Npn \int_div_round_raw:nn #1#2 {\int_eval:n{#1/#2}}
\def_new:Npn \int_mod:nn {\int_pre_eval_two_args:Nnn\int_mod_raw:nn}
\def_new:Npn \int_mod_raw:nn #1#2 {
  \int_eval:n{ #1 - \int_div_truncate_raw:nn {#1}{#2} * #2 }
}
\let_new:NN \int_compare:nNnTF \num_compare:nNnTF
\let_new:NN \int_compare:nNnT \num_compare:nNnT
\let_new:NN \int_compare:nNnF \num_compare:nNnF
\let_new:NN \int_compare_p:nNn \num_compare_p:nNn
\def_new:Npn \int_if_odd_p:n #1 {
  \if_num_odd:w \int_eval:n{#1}
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {int_if_odd:n}#1{\if_num_odd:w \int_eval:n{#1}}
\def_new:Npn \int_whiledo:nNnT #1#2#3#4{
  \int_compare:nNnT {#1}#2{#3}{#4 \int_whiledo:nNnT {#1}#2{#3}{#4}}
}
\def_new:Npn \int_whiledo:nNnF #1#2#3#4{
  \int_compare:nNnF {#1}#2{#3}{#4 \int_whiledo:nNnF {#1}#2{#3}{#4}}
}
\def_new:Npn \int_dowhile:nNnT #1#2#3#4{
  #4 \int_compare:nNnT {#1}#2{#3}{\int_dowhile:nNnT {#1}#2{#3}{#4}}
}
\def_new:Npn \int_dowhile:nNnF #1#2#3#4{
  #4 \int_compare:nNnF {#1}#2{#3}{\int_dowhile:nNnF {#1}#2{#3}{#4}}
}
\def_new:Npn \int_get_sign_and_digits:n #1{
  \int_get_sign_and_digits_aux:nNNN {#1} \c_true \c_true \c_true
}
\def_new:Npn \int_get_sign:n #1{
  \int_get_sign_and_digits_aux:nNNN {#1} \c_true \c_true \c_false
}
\def_new:Npn \int_get_digits:n #1{
  \int_get_sign_and_digits_aux:nNNN {#1} \c_true \c_false \c_true
}
\def_new:Npn \int_get_sign_and_digits_aux:nNNN #1#2#3#4{
  \tlist_if_head_eq_charcode:fNTF {#1} -
  {
    \bool_if:NTF #2
    { \int_get_sign_and_digits_aux:oNNN {\use_none:n #1} \c_false #3#4 }
    { \int_get_sign_and_digits_aux:oNNN {\use_none:n #1} \c_true  #3#4 }
  }
  {
    \tlist_if_head_eq_charcode:fNTF {#1} +
    { \int_get_sign_and_digits_aux:oNNN {\use_none:n #1} #2#3#4}
    {
      \bool_double_if:NNnnnn #3#4
      { \bool_if:NF #2 - #1 }
      { \bool_if:NF #2 -    }
      { #1 }  {  }
    }
  }
}
\def_new:Npn \int_get_sign_and_digits_aux:oNNN{
  \exp_args:No\int_get_sign_and_digits_aux:nNNN
}
\def:Npn \int_convert_from_base_ten:nn#1#2{
  \num_compare:nNnTF {#1}<\c_zero
  {
    - \int_convert_from_base_ten_aux:non {}
    { \int_use:N \int_eval:n {-#1} }
  }
  {
    \int_convert_from_base_ten_aux:non {}
    { \int_use:N \int_eval:n {#1} }
  }
  {#2}
}
\def_new:Npn \int_convert_from_base_ten_aux:nnn#1#2#3{
  \num_compare:nNnTF {#2}<{#3}
  { \int_convert_number_to_letter:n{#2} #1 }
  {
    \int_convert_from_base_ten_aux:fon
    {
      \int_convert_number_to_letter:n {\int_use:N\int_mod_raw:nn {#2}{#3}}
      #1
    }
    {\int_use:N \int_div_truncate_raw:nn{#2}{#3}}
    {#3}
  }
}
\def:Npn \int_convert_from_base_ten_aux:non{
  \exp_args:Nno\int_convert_from_base_ten_aux:nnn
}
\def:Npn \int_convert_from_base_ten_aux:fon{
  \exp_args:Nfo\int_convert_from_base_ten_aux:nnn
}
\def:Npn \int_convert_number_to_letter:n #1{ \if_case:w \int_eval:w
  #1-10\scan_stop: \exp_after:NN A \or: \exp_after:NN B \or:
  \exp_after:NN C \or: \exp_after:NN D \or: \exp_after:NN E \or:
  \exp_after:NN F \or: \exp_after:NN G \or: \exp_after:NN H \or:
  \exp_after:NN I \or: \exp_after:NN J \or: \exp_after:NN K \or:
  \exp_after:NN L \or: \exp_after:NN M \or: \exp_after:NN N \or:
  \exp_after:NN O \or: \exp_after:NN P \or: \exp_after:NN Q \or:
  \exp_after:NN R \or: \exp_after:NN S \or: \exp_after:NN T \or:
  \exp_after:NN U \or: \exp_after:NN V \or: \exp_after:NN W \or:
  \exp_after:NN X \or: \exp_after:NN Y \or: \exp_after:NN Z \else:
  \use_arg_i_after_fi:nw{ #1 }\fi: }
\def:Npn \int_convert_to_base_ten:nn #1#2 {
  \int_use:N\int_eval:n{
    \int_get_sign:n{#1}
    \exp_args:Nf\int_convert_to_base_ten_aux:nn {\int_get_digits:n{#1}}{#2}
  }
}
\def_new:Npn \int_convert_to_base_ten_aux:nn #1#2{
  \int_convert_to_base_ten_auxi:nnN {0}{#2} #1 \q_nil
}
\def_new:Npn \int_convert_to_base_ten_auxi:nnN#1#2#3{
  \quark_if_nil:NTF #3
  {#1}
  {\exp_args:No\int_convert_to_base_ten_auxi:nnN
    {\int_use:N \int_eval:n{ #1*#2+\int_convert_letter_to_number:N #3} }
    {#2}
  }
}
\def:Npn \int_convert_letter_to_number:N #1{
  \int_compare:nNnTF{`#1}<{58}{#1}
  {
    \int_eval:n{ `#1 -
      \if:w\int_compare_p:nNn{`#1}<{91}
      55
      \else:
      87
      \fi:
    }
  }
}
%% File: l3clist.dtx Copyright (C) 2005-2006 Frank Mittelbach, LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3clist.dtx 573 2006-08-21 20:59:37Z morten $
       {L3 Experimental comma separated lists}
\def_new:Npn \clist_new:N #1{\tlp_new:Nn #1{}}
\def_new:Npn \clist_new:c {\exp_args:Nc \clist_new:N}
\let_new:NN \clist_clear:N \tlp_clear:N
\let_new:NN \clist_clear:c \tlp_clear:c
\let_new:NN \clist_gclear:N \tlp_gclear:N
\let_new:NN \clist_gclear:c \tlp_gclear:c
\let_new:NN \clist_set_eq:NN \let:NN
\let_new:NN \clist_gset_eq:NN \glet:NN
\def_new:Npn \clist_gset_eq:cN {\exp_args:Nc \clist_gset_eq:NN}
\def_new:Npn \clist_gset_eq:Nc {\exp_args:NNc \clist_gset_eq:NN}
\def_new:Npn \clist_gset_eq:cc {\exp_args:Ncc \clist_gset_eq:NN}
\let_new:NN \clist_if_empty_p:N \tlp_if_empty_p:N
\def_test_function_new:npn {clist_if_empty:N}#1{\if_meaning:NN#1\c_empty_tlp}
\def_new:Npn \clist_if_empty:cTF {\exp_args:Nc\clist_if_empty:NTF}
\def_new:Npn \clist_if_empty:cT {\exp_args:Nc\clist_if_empty:NT}
\def_new:Npn \clist_if_empty:cF {\exp_args:Nc\clist_if_empty:NF}
\def_new:Npn \clist_if_empty_err:N #1{
  \if_meaning:NN#1\c_empty_tlp
    \tlp_clear:N \l_testa_tlp % catch prefixes
    \err_latex_bug:x{Empty~comma-list~`\token_to_string:N#1'}
  \fi:}
\let_new:NN \clist_if_eq:NNTF \tlp_if_eq:NNTF
\def_new:Npn \clist_get:NN #1{
  \clist_if_empty_err:N #1
  \exp_after:NN\clist_get_aux:w #1,\q_stop}
\def_new:Npn \clist_get_aux:w  #1,#2\q_stop #3{\tlp_set:Nn #3{#1}}
\def_new:Npn \clist_get:cN {\exp_args:Nc \clist_get:NN}
\def_new:Npn \clist_pop_aux:nnNN #1#2#3{
  \clist_if_empty_err:N #3
  \exp_after:NN\clist_pop_aux:w #3,\q_nil\q_stop #1#2#3}
\def_new:Npn \clist_pop_aux:w  #1,#2\q_stop #3#4#5#6{
   #4#6{#1}
   #3#5{#2}
   \quark_if_nil:NTF #5
   { #3#5{} }
   { \clist_pop_auxi:w #2 #3#5 }
}
\def_new:Npn\clist_pop_auxi:w #1,\q_nil #2#3  {#2#3{#1}}
\def_new:Npn \clist_put_aux:NNnnNn #1#2#3#4#5#6{
  \clist_if_empty:NTF#5 {#1 #5{#6}}
  { \tlist_if_empty:nF {#6}{ #2 #5{#3#6#4} } }
}
\def_new:Npn \clist_put_left:Nn {
  \clist_put_aux:NNnnNn \tlp_set:Nn \tlp_put_left:Nn {} ,
}
\def_new:Npn \clist_put_left:cn {\exp_args:Nc \clist_put_left:Nn}
\def_new:Npn \clist_put_left:No {\exp_args:NNo\clist_put_left:Nn}
\def_new:Npn \clist_put_left:Nx {\exp_args:Nnx\clist_put_left:Nn}
\def_new:Npn \clist_gput_left:Nn {
  \clist_put_aux:NNnnNn \tlp_gset:Nn \tlp_gput_left:Nn {} ,
}
\def_new:Npn \clist_put_right:Nn {
  \clist_put_aux:NNnnNn \tlp_set:Nn \tlp_put_right:Nn , {}
}
\def_new:Npn \clist_put_right:cn {\exp_args:Nc \clist_put_right:Nn}
\def_new:Npn \clist_put_right:No {\exp_args:Nno\clist_put_right:Nn}
\def_new:Npn \clist_put_right:Nx {\exp_args:Nnx\clist_put_right:Nn}
\def_new:Npn \clist_gput_right:Nn {
  \clist_put_aux:NNnnNn \tlp_set:Nn \tlp_put_right:Nn , {}
}
\def_new:Npn \clist_gput_right:No {\exp_args:NNo \clist_gput_right:Nn}
\def_new:Npn \clist_gput_right:cn {\exp_args:Nc  \clist_gput_right:Nn}
\def_new:Npn \clist_gput_right:co {\exp_args:Nco \clist_gput_right:Nn}
\def_new:Npn \clist_gput_right:cc {\exp_args:Ncc \clist_gput_right:Nn}
\def_new:Npn \clist_gput_right:NC {\exp_args:NNC \clist_gput_right:Nn}
\def_new:Npn \clist_map_function:NN #1#2{
  \clist_if_empty:NF #1
  {
    \exp_after:NN \clist_map_function_aux:Nw
    \exp_after:NN #2 #1 , \q_nil , \q_stop
  }
}
\def_new:Npn \clist_map_function:cN{\exp_args:Nc\clist_map_function:NN}
\def_new:Npn \clist_map_function:nN #1#2{
  \tlist_if_empty:nF {#1}
  { \clist_map_function_aux:Nw #2 #1 , \q_nil , \q_stop }
}
\def_new:Npn \clist_map_function_aux:Nw #1#2,{
  \quark_if_nil:nT{#2} \clist_map_break:w
  #1{#2}
  \clist_map_function_aux:Nw #1
}
\let_new:NN \clist_map_break:w \use_none_delimit_by_q_stop:w
\int_new:N \l_clist_inline_level_int
\def_new:Npn \clist_map_inline:Nn #1#2{
  \clist_if_empty:NF #1
  {
    \int_incr:N \l_clist_inline_level_int
    \def:cpn {clist_map_inline_ \int_use:N \l_clist_inline_level_int :n}
    ##1{#2}
    \exp_args:NcE \clist_map_function_aux:Nw
    {clist_map_inline_ \int_use:N \l_clist_inline_level_int :n}
    #1 , \q_nil , \q_stop
    \int_decr:N \l_clist_inline_level_int
  }
}
\def_new:Npn \clist_map_inline:cn{\exp_args:Nc\clist_map_inline:Nn}
\def_new:Npn \clist_map_inline:nn #1#2{
  \tlist_if_empty:nF {#1}
  {
    \int_incr:N \l_clist_inline_level_int
    \def:cpn {clist_map_inline_ \int_use:N \l_clist_inline_level_int :n}
    ##1{#2}
    \exp_args:Nc \clist_map_function_aux:Nw
    {clist_map_inline_ \int_use:N \l_clist_inline_level_int :n}
    #1 , \q_nil , \q_stop
    \int_decr:N \l_clist_inline_level_int
  }
}
\def_new:Npn \clist_map_variable:nNn #1#2#3{
  \tlist_if_empty:nF{#1}
  {
    \clist_map_variable_aux:Nnw #2 {#3} #1 , \q_nil , \q_stop
  }
}
\def_new:Npn \clist_map_variable:NNn {\exp_args:No \clist_map_variable:nNn}
\def_new:Npn \clist_map_variable:cNn {\exp_args:Nc \clist_map_variable:NNn}
\def_new:Npn \clist_map_variable_aux:Nnw #1#2#3,{
  \def:Npn #1{#3}
  \quark_if_nil:NT #1 \clist_map_break:w
  #2 \clist_map_variable_aux:Nnw #1{#2}
}
\def_new:Npn \clist_concat_aux:NNNN #1#2#3#4{
  \toks_set:No \l_tmpa_toks {#3}
  \toks_set:No \l_tmpb_toks {#4}
  #1 #2 {
    \toks_use:N \l_tmpa_toks
    \toks_if_empty:NF \l_tmpa_toks {\toks_if_empty:NF \l_tmpb_toks ,}
    \toks_use:N \l_tmpb_toks
  }
}
\def_new:Npn \clist_concat:NNN {\clist_concat_aux:NNNN \tlp_set:Nx}
\def_new:Npn \clist_gconcat:NNN {\clist_concat_aux:NNNN \tlp_gset:Nx}
\def_new:Npn \clist_gconcat:NNc{\exp_args:Nnnc\clist_gconcat:NNN}
\def_new:Npn \clist_gconcat:ccc{\exp_args:Nccc\clist_gconcat:NNN}
\def:Npn \clist_remove_duplicates_aux:NN #1#2 {
  \clist_clear:N \l_clist_remove_duplicates_clist
  \clist_map_function:NN #2 \clist_remove_duplicates_aux:n
  #1 #2 \l_clist_remove_duplicates_clist
}
\def:Npn \clist_remove_duplicates_aux:n #1 {
  \clist_if_in:NnTF \l_clist_remove_duplicates_clist {#1} {}
  {\clist_put_right:Nn \l_clist_remove_duplicates_clist {#1}}
}
\def_new:Npn \clist_remove_duplicates:N {
  \clist_remove_duplicates_aux:NN \clist_set_eq:NN
}
\def_new:Npn \clist_gremove_duplicates:N {
  \clist_remove_duplicates_aux:NN \clist_gset_eq:NN
}
\clist_new:N \l_clist_remove_duplicates_clist
\def_new:Npn \clist_use:N #1 {
  \if_meaning:NN #1 \scan_stop:
    \err_latex_bug:x {Comma~list~ `\token_to_string:N #1'~
                      has~ an~ erroneous~ structure!}
  \else:
    \exp_after:NN #1
  \fi:
}
\def_new:Npn \clist_use:c {\exp_args:Nc \clist_use:N}
\def_new:Npn \clist_if_in:NnTF #1#2{
  \def:Npn \tmp:w ##1 ,#2, ##2##3\q_stop{
    \if_meaning:NN\q_no_value##2
      \exp_after:NN\use_arg_ii:nn
    \else:
      \exp_after:NN\use_arg_i:nn
    \fi:
  }
  \exp_after:NN \tmp:w
  \exp_after:NN , #1, #2, \q_no_value \q_stop
}
\def_new:Npn \clist_if_in:NoTF {\exp_args:NNo \clist_if_in:NnTF}
\def_new:Npn \clist_if_in:coTF {\exp_args:Nco \clist_if_in:NnTF}
\def_new:Npn \clist_if_in:cnTF {\exp_args:Nc \clist_if_in:NnTF}
\let_new:NN \clist_push:Nn \clist_put_left:Nn
\let_new:NN \clist_push:No \clist_put_left:No
\let_new:NN \clist_push:cn \clist_put_left:cn
\def_new:Npn \clist_pop:NN {\clist_pop_aux:nnNN \tlp_set:Nn \tlp_set:Nn}
\def_new:Npn \clist_pop:cN {\exp_args:Nc \clist_pop:NN}
\let_new:NN \clist_gpush:Nn \clist_gput_left:Nn
\def_new:Npn \clist_gpush:No {\exp_args:NNo \clist_gpush:Nn}
\def_new:Npn \clist_gpush:cn {\exp_args:Nc \clist_gpush:Nn}
\def_new:Npn \clist_gpop:NN {\clist_pop_aux:nnNN \tlp_gset:Nn \tlp_set:Nn}
\def_new:Npn \clist_gpop:cN {\exp_args:Nc \clist_gpop:NN}
\let_new:NN \clist_top:NN \clist_get:NN
\let_new:NN \clist_top:cN \clist_get:cN
%% File: l3prop.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3prop.dtx 581 2006-12-12 12:28:27Z morten $
          {L3 Experimental Property Lists}
\def_new:Npn \prop_new:N #1{\toks_new:N #1}
\def_new:Npn \prop_new:c {\exp_args:Nc \prop_new:N}
\let_new:NN \prop_clear:N \toks_clear:N
\def_new:Npn \prop_clear:c {\exp_args:Nc\prop_clear:N}
\let_new:NN \prop_gclear:N \toks_gclear:N
\def_new:Npn \prop_gclear:c {\exp_args:Nc\prop_gclear:N}
\let_new:NN \prop_use:N \toks_use:N
\def_long_new:Npn \prop_split_aux:NNn #1#2#3{
  \def:Npn \tmp:w ##1#2##2##3\q_stop {#3{##1}{##2}{##3}}
  \exp_after:NN\tmp:w \prop_use:N#1#2\q_no_value \q_stop}
\def_long_new:NNn \prop_get:NNN 2{
  \prop_split_aux:NNn #1#2\prop_get_aux:w}
\def_long_new:NNn \prop_get_aux:w 4{\toks_set:Nn#4{#2}}
\def_new:Npn \prop_get:cNN { \exp_args:Nc \prop_get:NNN }
\def_long_new:NNn \prop_gget:NNN 2{
  \prop_split_aux:NNn #1#2\prop_gget_aux:w}
\def_new:Npn \prop_gget:NcN {\exp_args:NNc \prop_gget:NNN}
\def_new:Npn \prop_gget:cNN {\exp_args:Nc \prop_gget:NNN}
\def_long_new:NNn \prop_gget_aux:w 4{\toks_gset:Nn#4{#2}}
\def_long_new:NNn \prop_get_gdel:NNN 3{
  \prop_split_aux:NNn #1#2{\prop_get_del_aux:w #3{\toks_gset:Nn #1}#2}}
\def_long_new:NNn \prop_get_del_aux:w 6{
  \quark_if_no_value:nF{#5} {
    \def:Npn \tmp:w ##1#3\q_no_value {#2{#4##1}}
    \tmp:w #6}
}
\def_long_new:NNn \prop_put:NNn 2{
  \prop_split_aux:NNn #1#2{
    \toks_clear:N #1
    \prop_put_aux:w {\toks_put_right:Nn #1}#2}
}
\def_new:Npn \prop_put:ccn {\exp_args:Ncc \prop_put:NNn }
\def_long_new:NNn \prop_gput:NNn 2{
  \prop_split_aux:NNn #1#2{
    \toks_gclear:N #1
    \prop_put_aux:w {\toks_gput_right:Nn #1}#2}
}
\def_new:Npn \prop_gput:NNo {\exp_args:NNNo \prop_gput:NNn}
\def_new:Npn \prop_gput:NNx {\exp_args:Nnnx \prop_gput:NNn}
\def_new:Npn \prop_gput:NOx {\exp_args:Nnox \prop_gput:NNn}
\def_new:Npn \prop_gput:NOo {\exp_args:NNOo \prop_gput:NNn}
\def_new:Npn \prop_gput:Ncn {\exp_args:NNc  \prop_gput:NNn }
\def_new:Npn \prop_gput:OOo {\exp_args:NOOo \prop_gput:NNn}
\def_new:Npn \prop_gput:cNn {\exp_args:Nc \prop_gput:NNn}
\def_new:Npn \prop_gput:ccn {\exp_args:Ncc \prop_gput:NNn}
\def_new:Npn \prop_gput:cco {\exp_args:Ncco \prop_gput:NNn}
\def_new:Npn \prop_gput:ccx {\exp_args:Nccx \prop_gput:NNn}
\def_long_new:NNn \prop_put_aux:w 6{
  #1{#2{#6}#3}
  \quark_if_no_value:nF {#4}
  {
    \def:Npn \tmp:w ##1#2\q_no_value {#1{##1}}
    \tmp:w #5
  }
}
\def_long_new:NNn \prop_del:NN 2{
  \prop_split_aux:NNn #1#2{\prop_del_aux:w {\toks_set:Nn #1}#2}}
\def_long_new:NNn \prop_gdel:NN 2{
  \prop_split_aux:NNn #1#2{\prop_del_aux:w {\toks_gset:Nn #1}#2}}
\def_long_new:NNn \prop_del_aux:w 5{\quark_if_no_value:nF {#4}
   {\def:Npn \tmp:w ##1#2\q_no_value {#1{#3##1}}\tmp:w #5}}
\def_new:NNn \prop_if_in:NNTF 2{
  \prop_split_aux:NNn #1#2\prop_if_in_aux:w}
\def_new:Npn \prop_if_in:NOTF {\exp_args:Nno \prop_if_in:NNTF}
\def_new:Npn \prop_if_in:ccTF {\exp_args:Ncc \prop_if_in:NNTF}
\def_new:NNn \prop_if_in_aux:w 3{\quark_if_no_value:nFT {#2}}
\def_long_new:NNn \prop_gput_if_new:NNn 2{
  \prop_split_aux:NNn #1#2{\prop_put_if_new_aux:w #1#2}}
\def_long_new:NNn \prop_put_if_new_aux:w 6{
  \quark_if_no_value:nT {#4}{#1{#2{#6}#3}}}
\let_new:NN \prop_set_eq:NN  \toks_set_eq:NN
\let_new:NN \prop_set_eq:Nc \toks_set_eq:Nc
\let_new:NN \prop_set_eq:cN  \toks_set_eq:cN
\let_new:NN \prop_set_eq:cc \toks_set_eq:cc
\let_new:NN \prop_gset_eq:NN  \toks_gset_eq:NN
\let_new:NN \prop_gset_eq:Nc \toks_gset_eq:Nc
\let_new:NN \prop_gset_eq:cN  \toks_gset_eq:cN
\let_new:NN \prop_gset_eq:cc \toks_gset_eq:cc
\let_new:NN \prop_if_empty_p:N \toks_if_empty_p:N
\let_new:NN \prop_if_empty_p:c \toks_if_empty_p:c
\let_new:NN \prop_if_empty:NTF \toks_if_empty:NTF
\let_new:NN \prop_if_empty:NT  \toks_if_empty:NT
\let_new:NN \prop_if_empty:NF  \toks_if_empty:NF
\let_new:NN \prop_if_empty:cTF \toks_if_empty:cTF
\let_new:NN \prop_if_empty:cT  \toks_if_empty:cTF
\let_new:NN \prop_if_empty:cF  \toks_if_empty:cF
\def_new:NNn \prop_if_eq:NNTF 2 {
  \tlist_if_eq:xxTF{\prop_use:N #1}{\prop_use:N #2}
}
\def_new:NNn \prop_if_eq:NNT 2 {
  \tlist_if_eq:xxT{\prop_use:N #1}{\prop_use:N #2}
}
\def_new:NNn \prop_if_eq:NNF 2 {
  \tlist_if_eq:xxF{\prop_use:N #1}{\prop_use:N #2}
}
\def_new:Npn \prop_if_eq:NcTF {\exp_args:NNc \prop_if_eq:NNTF}
\def_new:Npn \prop_if_eq:NcT {\exp_args:NNc \prop_if_eq:NNT}
\def_new:Npn \prop_if_eq:NcF {\exp_args:NNc \prop_if_eq:NNF}
\def_new:Npn \prop_if_eq:cNTF {\exp_args:Nc \prop_if_eq:NNTF}
\def_new:Npn \prop_if_eq:cNT {\exp_args:Nc \prop_if_eq:NNT}
\def_new:Npn \prop_if_eq:cNF {\exp_args:Nc \prop_if_eq:NNF}
\def_new:Npn \prop_if_eq:ccTF {\exp_args:Ncc \prop_if_eq:NNTF}
\def_new:Npn \prop_if_eq:ccT {\exp_args:Ncc \prop_if_eq:NNT}
\def_new:Npn \prop_if_eq:ccF {\exp_args:Ncc \prop_if_eq:NNF}
\def_new:Npn \prop_map_function:NN #1#2{
    \exp_after:NN \prop_map_function_aux:NNn
    \exp_after:NN #2 \prop_use:N #1 \q_nil \q_no_value \q_stop
}
\def_new:Npn \prop_map_function_aux:NNn #1#2#3{
  \if_meaning:NN \q_nil #1
    \exp_after:NN \prop_map_break:w
  \fi:
  #1#2{#3}
  \prop_map_function_aux:NNn #1
}
\def_new:Npn \prop_map_function:cN {\exp_args:Nc \prop_map_function:NN }
\def_new:Npn \prop_map_function:cc {\exp_args:Ncc \prop_map_function:NN}
\num_new:N \l_prop_inline_level_num
\def_new:Npn \prop_map_inline:Nn #1#2 {
  \num_incr:N \l_prop_inline_level_num
  \def_long:cpn {prop_map_inline_ \num_use:N \l_prop_inline_level_num :n}
    ##1##2{#2}
  \exp_args:NcE \prop_map_function:N
    {prop_map_inline_ \num_use:N \l_prop_inline_level_num :n}
    \prop_use:N #1
  \q_nil \q_no_value \q_stop
  \num_decr:N \l_prop_inline_level_num
}
\def_new:Npn \prop_map_inline:cN { \exp_args:Nc \prop_map_inline:NN }

\let_new:NN \prop_map_break:w \use_none_delimit_by_q_stop:w
%% File: l3token.dtx Copyright (C) 2005-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3token.dtx 578 2006-11-21 18:13:24Z morten $
       {L3 Experimental token investigation and manipulation}
\let_new:NN \char_set_catcode:w \tex_catcode:D
\def_new:Npn \char_set_catcode:nn #1#2{
  \char_set_catcode:w #1 = \int_eval:n{#2}
}
\def_new:Npn \char_value_catcode:w {\int_use:N\tex_catcode:D}
\def_new:Npn \char_value_catcode:n #1{\char_value_catcode:w \int_eval:n{#1}}
\def_new:Npn \char_show_value_catcode:w {\tex_showthe:D\tex_catcode:D}
\def_new:Npn \char_show_value_catcode:n #1{
  \char_show_value_catcode:w \int_eval:n{#1}}
\let_new:NN \char_set_lccode:w \tex_lccode:D
\def_new:Npn \char_set_lccode:nn #1#2{
  \char_set_lccode:w #1 = \int_eval:n{#2}
}
\def_new:Npn \char_value_lccode:w {\int_use:N\tex_lccode:D}
\def_new:Npn \char_value_lccode:n #1{\char_value_lccode:w \int_eval:n{#1}}
\def_new:Npn \char_show_value_lccode:w {\tex_showthe:D\tex_lccode:D}
\def_new:Npn \char_show_value_lccode:n #1{
  \char_show_value_lccode:w \int_eval:n{#1}}
\let_new:NN \char_set_uccode:w \tex_uccode:D
\def_new:Npn \char_set_uccode:nn #1#2{
  \char_set_uccode:w #1 = \int_eval:n{#2}
}
\def_new:Npn \char_value_uccode:w {\int_use:N\tex_uccode:D}
\def_new:Npn \char_value_uccode:n #1{\char_value_uccode:w \int_eval:n{#1}}
\def_new:Npn \char_show_value_uccode:w {\tex_showthe:D\tex_uccode:D}
\def_new:Npn \char_show_value_uccode:n #1{
  \char_show_value_uccode:w \int_eval:n{#1}}
\let_new:NN \char_set_sfcode:w \tex_sfcode:D
\def_new:Npn \char_set_sfcode:nn #1#2{
  \char_set_sfcode:w #1 = \int_eval:n{#2}
}
\def_new:Npn \char_value_sfcode:w {\int_use:N\tex_uccode:D}
\def_new:Npn \char_value_sfcode:n #1{\char_value_sfcode:w \int_eval:n{#1}}
\def_new:Npn \char_show_value_sfcode:w {\tex_showthe:D\tex_sfcode:D}
\def_new:Npn \char_show_value_sfcode:n #1{
  \char_show_value_sfcode:w \int_eval:n{#1}}
\def_new:Npn \token_new:Nn #1#2{\glet_new:NN #1#2}
\let_new:NN \c_group_begin_token {
\let_new:NN \c_group_end_token }
\group_begin:
\char_set_catcode:nn{`\*}{3}
\token_new:Nn \c_math_shift_token {*}
\char_set_catcode:nn{`\*}{4}
\token_new:Nn \c_alignment_tab_token {*}
\token_new:Nn \c_parameter_token {#}
\token_new:Nn \c_math_superscript_token {^}
\char_set_catcode:nn{`\*}{8}
\token_new:Nn \c_math_subscript_token {*}
\token_new:Nn \c_space_token {~}
\token_new:Nn \c_letter_token {a}
\token_new:Nn \c_other_char_token {1}
\char_set_catcode:nn{`\*}{13}
\token_new:Nn \c_active_char_token {*}
\group_end:
\def_new:Npn \token_if_group_begin_p:N #1{
  \if_catcode:w \exp_not:N #1\c_group_begin_token
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_group_begin:N} #1{
  \if:w\token_if_group_begin_p:N #1}
\def_new:Npn \token_if_group_end_p:N #1{
  \if_catcode:w \exp_not:N #1\c_group_end_token
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_group_end:N} #1{
  \if:w\token_if_group_end_p:N #1}
\def_new:Npn \token_if_math_shift_p:N #1{
  \if_catcode:w \exp_not:N #1\c_math_shift_token
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_math_shift:N} #1{
  \if:w\token_if_math_shift_p:N#1}
\def_new:Npn \token_if_alignment_tab_p:N #1{
  \if_catcode:w \exp_not:N #1\c_alignment_tab_token
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_alignment_tab:N} #1{
  \if:w\token_if_alignment_tab_p:N#1}
\def_new:Npn \token_if_parameter_p:N #1{
  \exp_after:NN\if_catcode:w \cs:w c_parameter_token\cs_end:\exp_not:N #1
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_parameter:N} #1{
  \if:w\token_if_parameter_p:N#1}
\def_new:Npn \token_if_math_superscript_p:N #1{
  \if_catcode:w \exp_not:N #1\c_math_superscript_token
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_math_superscript:N} #1{
  \if:w\token_if_math_superscript_p:N #1}
\def_new:Npn \token_if_math_subscript_p:N #1{
  \if_catcode:w \exp_not:N #1\c_math_subscript_token
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_math_subscript:N} #1{
  \if:w\token_if_math_subscript_p:N #1}
\def_new:Npn \token_if_space_p:N #1{
  \if_catcode:w \exp_not:N #1\c_space_token
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_space:N} #1{
  \if:w\token_if_space_p:N #1}
\def_new:Npn \token_if_letter_p:N #1{
  \if_catcode:w \exp_not:N #1\c_letter_token
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_letter:N} #1{
  \if:w\token_if_letter_p:N #1}
\def_new:Npn \token_if_other_char_p:N #1{
  \if_catcode:w \exp_not:N #1\c_other_char_token
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_other_char:N} #1{
  \if:w\token_if_other_char_p:N #1}
\def_new:Npn \token_if_active_char_p:N #1{
  \if_catcode:w \exp_not:N #1\c_active_char_token
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_active_char:N} #1{
  \if:w\token_if_active_char_p:N #1}
\def_new:Npn \token_if_eq_meaning_p:NN #1#2 {
  \if_meaning:NN  #1  #2
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_eq_meaning:NN}#1#2{
  \if_meaning:NN  #1  #2}
\def_new:Npn \token_if_eq_catcode_p:NN #1#2 {
  \if_catcode:w \exp_not:N #1 \exp_not:N #2
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_eq_catcode:NN}#1#2{
  \if:w\token_if_eq_catcode_p:NN#1#2}
\def_new:Npn \token_if_charcode_eq_p:NN #1#2 {
  \if_charcode:w \exp_not:N #1 \exp_not:N #2
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_eq_charcode:NN}#1#2{
  \if:w\token_if_eq_charcode_p:NN#1#2}
\def_new:Npn \token_if_macro_p:N #1 {
  \exp_after:NN \token_if_macro_p_aux:w \token_to_meaning:N #1 -> \q_nil
}
\def_new:Npn \token_if_macro_p_aux:w #1 -> #2 \q_nil{
  \if:w \tlist_if_empty_p:n{#2} \c_false \else: \c_true \fi:
}
\def_test_function_new:npn {token_if_macro:N} #1{\if:w\token_if_macro_p:N#1}
\def_new:Npn \token_if_cs_p:N {\token_if_eq_catcode_p:NN \scan_stop:}
\def_test_function_new:npn {token_if_cs:N} #1{
  \if:w \token_if_eq_catcode_p:NN \scan_stop: #1}
\def_new:Npn \token_if_expandable_p:N #1{
  \exp_after:NN \if_token_eq:NN \exp_not:N #1 \scan_stop:
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn {token_if_expandable:N} #1{
  \if:w\token_if_expandable_p:N#1}
\group_begin:
  \char_set_lccode:nn {`\X}{`\n}
  \char_set_lccode:nn {`\Y}{`\t}
  \char_set_lccode:nn {`\Z}{`\d}
  \char_set_lccode:nn {`\?}{`\\}
  \tlist_map_inline:nn{\X\Y\Z\M\T\C\H\A\R\O\U\S\K\I\P\L\G\P\E}
    {\char_set_catcode:nn {`#1}{12}}
\tlist_to_lowercase:n{
  \group_end:
\def_new:Npn \token_if_chardef_p:N #1 {
  \exp_after:NN \token_if_chardef_p_aux:w
  \token_to_meaning:N #1?CHAR"\q_nil
}
\def_new:Npn \token_if_chardef_p_aux:w #1?CHAR"#2\q_nil{
  \tlist_if_empty_p:n{#1}
}
\def_new:Npn \token_if_mathchardef_p:N #1 {
  \exp_after:NN \token_if_mathchardef_p_aux:w
  \token_to_meaning:N #1?MAYHCHAR"\q_nil
}
\def_new:Npn \token_if_mathchardef_p_aux:w #1?MAYHCHAR"#2\q_nil{
  \tlist_if_empty_p:n{#1}
}
\def:Npn \token_if_int_register_p:N #1{
  \if_meaning:NN \tex_countdef:D #1
    \c_false
  \else:
    \exp_after:NN \token_if_int_register_p_aux:w
      \token_to_meaning:N #1?COUXY\q_nil
  \fi:
}
\def_new:Npn \token_if_int_register_p_aux:w #1?COUXY#2\q_nil{
  \tlist_if_empty_p:n{#1}
}
\def:Npn \token_if_skip_register_p:N #1{
  \if_meaning:NN \tex_skipdef:D #1
  \c_false
  \else:
  \exp_after:NN \token_if_skip_register_p_aux:w
  \token_to_meaning:N #1?SKIP\q_nil
  \fi:
}
\def_new:Npn \token_if_skip_register_p_aux:w #1?SKIP#2\q_nil{
  \tlist_if_empty_p:n{#1}
}
\def:Npn \token_if_dim_register_p:N #1{
  \if_meaning:NN \tex_dimendef:D #1
    \c_false
  \else:
    \exp_after:NN \token_if_dim_register_p_aux:w
    \token_to_meaning:N #1?ZIMEX\q_nil
  \fi:
}
\def_new:Npn \token_if_dim_register_p_aux:w #1?ZIMEX#2\q_nil{
  \tlist_if_empty_p:n{#1}
}
\def:Npn \token_if_toks_register_p:N #1{
  \if_meaning:NN \tex_toksdef:D #1
    \c_false
  \else:
    \exp_after:NN \token_if_toks_register_p_aux:w
    \token_to_meaning:N #1?YOKS\q_nil
  \fi:
}
\def_new:Npn \token_if_toks_register_p_aux:w #1?YOKS#2\q_nil{
  \tlist_if_empty_p:n{#1}
}
\def_new:Npn \token_if_protected_macro_p:N #1 {
  \exp_after:NN \token_if_protected_macro_p_aux:w
  \token_to_meaning:N #1?PROYECYEZ~MACRO\q_nil
}
\def_new:Npn \token_if_protected_macro_p_aux:w #1?PROYECYEZ~MACRO#2\q_nil{
  \tlist_if_empty_p:n{#1}
}
\def_new:Npn \token_if_long_macro_p:N #1 {
  \exp_after:NN \token_if_long_macro_p_aux:w
  \token_to_meaning:N #1?LOXG~MACRO\q_nil
}
\def_new:Npn \token_if_long_macro_p_aux:w #1?LOXG~MACRO#2\q_nil{
  \tlist_if_empty_p:n{#1}
}
\def_new:Npn \token_if_protected_long_macro_p:N #1 {
  \exp_after:NN \token_if_protected_long_macro_p_aux:w
  \token_to_meaning:N #1?PROYECYEZ~?LOXG~MACRO\q_nil
}
\def_new:Npn \token_if_protected_long_macro_p_aux:w #1
  ?PROYECYEZ~?LOXG~MACRO#2\q_nil{
  \tlist_if_empty_p:n{#1}
}
}
\def_test_function_new:npn {token_if_chardef:N} {\if:w \token_if_chardef_p:N}
\def_test_function_new:npn {token_if_mathchardef:N} {
  \if:w \token_if_mathchardef_p:N}
\def_test_function_new:npn {token_if_long_macro:N} {
  \if:w \token_if_long_macro_p:N}
\def_test_function_new:npn {token_if_protected_macro:N} {
  \if:w \token_if_protected_macro_p:N}
\def_test_function_new:npn {token_if_protected_long_macro:N} {
  \if:w \token_if_protected_long_macro_p:N}
\def_test_function_new:npn {token_if_dim_register:N} {
  \if:w \token_if_dim_register_p:N}
\def_test_function_new:npn {token_if_skip_register:N} {
  \if:w \token_if_skip_register_p:N}
\def_test_function_new:npn {token_if_int_register:N} {
  \if:w \token_if_int_register_p:N}
\def_test_function_new:npn {token_if_toks_register:N} {
  \if:w \token_if_toks_register_p:N}
\group_begin:
\char_set_lccode:nn {`\?}{`\:}
\char_set_catcode:nn{`\M}{12}
\char_set_catcode:nn{`\A}{12}
\char_set_catcode:nn{`\C}{12}
\char_set_catcode:nn{`\R}{12}
\char_set_catcode:nn{`\O}{12}
\tlist_to_lowercase:n{
  \group_end:
  \def_new:Npn \token_get_prefix_arg_replacement_aux:w #1MACRO?#2->#3\q_nil#4{
    #4{#1}{#2}{#3}
  }
  \def_new:Npn\token_get_prefix_spec:N #1{
    \token_if_macro:NTF #1{
      \exp_after:NN \token_get_prefix_arg_replacement_aux:w
      \token_to_meaning:N #1\q_nil\use_arg_i:nnn
    }{\scan_stop:}
  }
  \def_new:Npn\token_get_arg_spec:N #1{
    \token_if_macro:NTF #1{
      \exp_after:NN \token_get_prefix_arg_replacement_aux:w
      \token_to_meaning:N #1\q_nil\use_arg_ii:nnn
    }{\scan_stop:}
  }
  \def_new:Npn\token_get_replacement_spec:N #1{
    \token_if_macro:NTF #1{
      \exp_after:NN \token_get_prefix_arg_replacement_aux:w
      \token_to_meaning:N #1\q_nil\use_arg_iii:nnn
    }{\scan_stop:}
  }
}
\def_new:Npn \token_if_primitive_p:N #1{
  \if:w \token_if_cs_p:N #1\scan_stop:
    \if:w \token_if_macro_p:N #1
      \c_false
    \else:
      \token_if_primitive_p_aux:N #1
    \fi:
  \else:
    \if:w \token_if_active_p:N #1
      \if:w \token_if_macro_p:N #1
        \c_false
      \else:
        \token_if_primitive_p_aux:N #1
      \fi:
    \else:
      \c_false
    \fi:
  \fi:
}
\def_new:Npn \token_if_primitive_p_aux:N #1{
  \if:w \token_if_chardef_p:N #1 \c_false
  \else:
    \if:w \token_if_mathchardef_p:N #1 \c_false
    \else:
      \if:w \token_if_int_register_p:N #1 \c_false
      \else:
        \if:w \token_if_skip_register_p:N #1 \c_false
        \else:
          \if:w \token_if_dim_register_p:N #1 \c_false
          \else:
            \if:w   \token_if_toks_register_p:N #1 \c_false
            \else:
              \c_true
            \fi:
          \fi:
        \fi:
      \fi:
    \fi:
  \fi:
}
\def_test_function_new:npn {token_if_primitive:N} #1{
  \if:w\token_if_primitive_p:N#1}
\token_new:Nn \l_peek_token {?}
\token_new:Nn \g_peek_token {?}
\token_new:Nn \l_peek_search_token {?}
\def_new:Npn \peek_after:NN {\tex_futurelet:D \l_peek_token }
\def_new:Npn \peek_gafter:NN {
  \pref_global:D \tex_futurelet:D \g_peek_token
}
\tlp_new:Nn \l_peek_true_tlp {}
\tlp_new:Nn \l_peek_false_tlp {}
\def_new:Npn \peek_tmp:w{}
\tlp_new:Nn \l_peek_search_tlp{}
\def_long_new:Npn \peek_token_generic:NNTF #1#2#3#4{
  \let:NN \l_peek_search_token #2
  \tlp_set:Nn \l_peek_search_tlp {#2}
  \tlp_set:Nx \l_peek_true_tlp {\exp_not:n{\group_align_safe_end: #3}}
  \tlp_set:Nx \l_peek_false_tlp {\exp_not:n{\group_align_safe_end: #4}}
  \group_align_safe_begin:
    \peek_after:NN #1
}
\def_long_new:Npn \peek_token_remove_generic:NNTF #1#2#3#4{
  \let:NN \l_peek_search_token #2
  \tlp_set:Nn \l_peek_search_tlp {#2}
  \tlp_set:Nx \l_peek_true_aux_tlp { \exp_not:n{ #3 } }
  \tlp_set_eq:NN \l_peek_true_tlp \c_peek_true_remove_next_tlp
  \tlp_set:Nx \l_peek_false_tlp {\exp_not:n{\group_align_safe_end: #4}}
  \group_align_safe_begin:
    \peek_after:NN #1
}
\tlp_new:Nn \l_peek_true_aux_tlp {}
\tlp_new:Nn \c_peek_true_remove_next_tlp {\group_align_safe_end:
  \tex_afterassignment:D \l_peek_true_aux_tlp \let:NN \peek_tmp:w
}
\def_new:Npn \peek_execute_branches_meaning: {
  \if_meaning:NN \l_peek_token \l_peek_search_token
    \exp_after:NN \l_peek_true_tlp
  \else:
    \exp_after:NN \l_peek_false_tlp
  \fi:
}
\def_new:Npn \peek_execute_branches_catcode: {
  \if_catcode:w \exp_not:N\l_peek_token \exp_not:N\l_peek_search_token
    \exp_after:NN \l_peek_true_tlp
  \else:
    \exp_after:NN \l_peek_false_tlp
  \fi:
}
\def_new:Npn \peek_execute_branches_charcode: {
  \prg_if_predicate:nTF {
    \prg_if_predicate_or_p:nn
    {\token_if_eq_catcode_p:NN \l_peek_token \c_group_begin_token}
    {\token_if_eq_meaning_p:NN \l_peek_token \c_space_token}
  }
  { \l_peek_false_tlp  }
  { \exp_after:NN \peek_execute_branches_charcode_aux:NN \l_peek_search_tlp }
}
\def_long_new:Npn \peek_execute_branches_charcode_aux:NN #1#2{
  \if_charcode:w \exp_not:N #1\exp_not:N#2
    \exp_after:NN \l_peek_true_tlp
  \else:
    \exp_after:NN \l_peek_false_tlp
  \fi:
  #2
}
\def_new:Npn \peek_meaning:NTF {
  \peek_token_generic:NNTF \peek_execute_branches_meaning:
}
\def_new:Npn \peek_meaning_ignore_spaces:NTF {
  \let:NN \peek_execute_branches: \peek_execute_branches_meaning:
  \peek_token_generic:NNTF \peek_ignore_spaces_execute_branches:
}
\def_new:Npn \peek_meaning_remove:NTF {
  \peek_token_remove_generic:NNTF \peek_execute_branches_meaning:
}
\def_new:Npn \peek_meaning_remove_ignore_spaces:NTF {
  \let:NN \peek_execute_branches: \peek_execute_branches_meaning:
  \peek_token_remove_generic:NNTF \peek_ignore_spaces_execute_branches:
}
\def_new:Npn \peek_catcode:NTF {
  \peek_token_generic:NNTF \peek_execute_branches_catcode:
}
\def_new:Npn \peek_catcode_ignore_spaces:NTF {
  \let:NN \peek_execute_branches: \peek_execute_branches_catcode:
  \peek_token_generic:NNTF \peek_ignore_spaces_execute_branches:
}
\def_new:Npn \peek_catcode_remove:NTF {
  \peek_token_remove_generic:NNTF \peek_execute_branches_catcode:
}
\def_new:Npn \peek_catcode_remove_ignore_spaces:NTF {
  \let:NN \peek_execute_branches: \peek_execute_branches_catcode:
  \peek_token_remove_generic:NNTF \peek_ignore_spaces_execute_branches:
}
\def_new:Npn \peek_charcode:NTF {
  \peek_token_generic:NNTF \peek_execute_branches_charcode:
}
\def_new:Npn \peek_charcode_ignore_spaces:NTF {
  \let:NN \peek_execute_branches: \peek_execute_branches_charcode:
  \peek_token_generic:NNTF \peek_ignore_spaces_execute_branches:
}
\def_new:Npn \peek_charcode_remove:NTF {
  \peek_token_remove_generic:NNTF \peek_execute_branches_charcode:
}

\def_new:Npn \peek_charcode_remove_ignore_spaces:NTF {
  \let:NN \peek_execute_branches: \peek_execute_branches_charcode:
  \peek_token_remove_generic:NNTF \peek_ignore_spaces_execute_branches:
}
\def_new:Npn \peek_ignore_spaces_aux: {
  \peek_after:NN \peek_ignore_spaces_execute_branches:
}
\def_new:Npn \peek_ignore_spaces_execute_branches: {
  \token_if_eq_meaning:NNTF \l_peek_token \c_space_token
  {  \tex_afterassignment:D \peek_ignore_spaces_aux:
     \let:NN \peek_tmp:w
  }
  \peek_execute_branches:
}
%% File: l3vers.dtx Copyright (C) 1990-2005 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3vers.dtx 573 2006-08-21 20:59:37Z morten $
       {L3 Experimental LaTeX format version}
\def:Npn\c_format_name{Experimental~ LaTeX3}
\def:Npn\c_format_date{2005/12/25}
\const_new:Nn \c_fmt_too_old{12}
\def:Npn\chk_format_age:w #1/#2/#3\q_stop{
  \num_compare:nNnT{(\tex_year:D-#1)*12+\tex_month:D-#2}>\c_fmt_too_old
  {\iow_expanded_term:n{^^J
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J
  !~~You~are~attempting~to~make~an~experimental~LaTeX3~format~from^^J
  !~~source~files~that~are~more~than~
     \num_use:N\num_eval:n{\c_fmt_too_old}~months~old.^^J
  !^^J
  !~~If~you~enter~<return>~to~scroll~past~this~message~then~the~format^^J
  !~~will~be~built,~but~please~consider~obtaining~newer~source~files^^J
  !~~before~continuing~to~build~an~experimental~LaTeX3~format.^^J
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J
  }
  \tex_errhelp:D{
    To~avoid~this~error~message,~obtain~new~Experimental~LaTeX3~sources.}
  \tex_errmessage:D{
    Experimental~LaTeX3~source~files~are~more~than~
    \num_use:N\num_eval:n{\c_fmt_too_old}~months~old!}
  }
}
\exp_after:NN\chk_format_age:w\c_format_date\q_stop
\cs_gundefine:N \chk_format_age:w
\tex_everyjob:D{\io_put_term:x{\c_format_name,~<\c_format_date>}}
\io_put_term:x{\c_format_name,~<\c_format_date>}
%% File: l3skip.dtx Copyright (C) 2005-2006 Frank Mittelbach, LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3skip.dtx 573 2006-08-21 20:59:37Z morten $
       {L3 Experimental skip registers}
\alloc_setup_type:nnn {skip} \c_zero \c_max_register_num
\def_new:Npn\skip_new:N   #1 {\alloc_reg:NnNN g {skip} \tex_skipdef:D #1 }
\def_new:Npn\skip_new_l:N #1 {\alloc_reg:NnNN l {skip} \tex_skipdef:D #1 }
\def_new:Npn \skip_new:c {\exp_args:Nc \skip_new:N}
\def_new:Npn \skip_set:Nn #1#2{#1\skip_eval:n{#2}
}
\def_new:Npn \skip_gset:Nn {
 \pref_global:D
   \skip_set:Nn }
\def_new:Npn \skip_set:cn {\exp_args:Nc \skip_set:Nn }
\def_new:Npn \skip_gset:cn {\exp_args:Nc \skip_gset:Nn }
\def_new:Npn \skip_zero:N #1{#1\c_zero_skip \scan_stop:
}
\def_new:Npn \skip_gzero:N {
 \pref_global:D
   \skip_zero:N}
\def_new:Npn \skip_zero:c  {\exp_args:Nc \skip_zero:N}
\def_new:Npn \skip_gzero:c {\exp_args:Nc \skip_gzero:N}
\def_new:Npn \skip_add:Nn #1#2{
    \tex_advance:D#1 by \skip_eval:n{#2}
}
\def_new:Npn\skip_add:cn{\exp_args:Nc\skip_add:Nn}
\def_new:Npn \skip_sub:Nn #1#2{
    \tex_advance:D#1-\skip_eval:n{#2}
}
\def_new:Npn \skip_gadd:Nn {
 \pref_global:D
   \skip_add:Nn }
\def_new:Npn \skip_gsub:Nn {
 \pref_global:D
   \skip_sub:Nn }
\let_new:NN \skip_horizontal:N \tex_hskip:D
\def_new:Npn \skip_horizontal:c {\exp_args:Nc\skip_horizontal:N}
\def_new:Npn \skip_horizontal:n #1{\skip_horizontal:N \skip_eval:n{#1}}
\let_new:NN \skip_vertical:N \tex_vskip:D
\def_new:Npn \skip_vertital:c {\exp_args:Nc\skip_vertical:N}
\def_new:Npn \skip_vertical:n #1{\skip_vertical:N \skip_eval:n{#1}}
\let_new:NN \skip_use:N \tex_the:D
\def_new:Npn \skip_use:c #1{\exp_args:Nc\skip_use:N}
\def_new:Npn \skip_eval:n #1 {\etex_glueexpr:D #1 \scan_stop:}
%%\chk_new_cs:N \l_tmpa_skip
%%\tex_skipdef:D\l_tmpa_skip 255  %currently taken up by \skip@
\skip_new:N \l_tmpa_skip
\skip_new:N \l_tmpb_skip
\skip_new:N \l_tmpc_skip
\skip_new:N \g_tmpa_skip
\skip_new:N \g_tmpb_skip
\skip_new:N \c_zero_skip
\skip_set:Nn \c_zero_skip {0pt}
\skip_new:N \c_max_skip
\skip_set:Nn \c_max_skip {16383.99999pt}
\def_new:Npn \skip_infinite_glue:nTF #1{
  \prg_logic_test:nTF {
    \prg_logic_or_p:nn
      { \int_compare_p:nNn {\etex_gluestretchorder:D #1 } > \c_zero }
      { \int_compare_p:nNn {\etex_glueshrinkorder:D #1 } > \c_zero }
  }
}
\def_new:Npn \skip_split_finite_else_action:nnNN #1#2#3#4{
  \skip_infinite_glue:nTF {#1}
  {
    #3 = \c_zero_skip
    #4 = \c_zero_skip
    #2
  }
  {
    #3 = \etex_gluestretch:D #1 \scan_stop:
    #4 = \etex_glueshrink:D  #1 \scan_stop:
  }
}
\alloc_setup_type:nnn {dimen} \c_zero \c_max_register_num
\def_new:Npn \dim_new:N   #1 {\alloc_reg:NnNN g {dimen} \tex_dimendef:D #1 }
\def_new:Npn \dim_new_l:N #1 {\alloc_reg:NnNN l {dimen} \tex_dimendef:D #1 }
\def_new:Npn \dim_new:c {\exp_args:Nc \dim_new:N}
\def_new:Npn \dim_set:Nn #1#2{#1~ \dim_eval:n{#2}}
\def_new:Npn \dim_gset:Nn {\pref_global:D \dim_set:Nn }
\def_new:Npn \dim_set:cn {\exp_args:Nc \dim_set:Nn }
\def_new:Npn \dim_set:Nc {\exp_args:NNc \dim_set:Nn }
\def_new:Npn \dim_gset:cn {\exp_args:Nc \dim_gset:Nn }
\def_new:Npn \dim_gset:Nc {\exp_args:NNc \dim_gset:Nn }
\def_new:Npn \dim_gset:cc {\exp_args:Ncc \dim_gset:Nn }
\def_new:Npn \dim_zero:N #1{#1\c_zero_skip}
\def_new:Npn \dim_gzero:N {\pref_global:D \dim_zero:N}
\def_new:Npn \dim_zero:c  {\exp_args:Nc \dim_zero:N}
\def_new:Npn \dim_gzero:c {\exp_args:Nc \dim_gzero:N}
\def_new:Npn \dim_add:Nn #1#2{
    \tex_advance:D#1 by \dim_eval:n{#2}\scan_stop:
}
\def_new:Npn\dim_add:cn{\exp_args:Nc\dim_add:Nn}
\def_new:Npn\dim_add:Nc{\exp_args:NNc\dim_add:Nn}
\def_new:Npn \dim_gadd:Nn { \pref_global:D \dim_add:Nn }
\def_new:Npn \dim_sub:Nn #1#2{\tex_advance:D#1-#2\scan_stop:}
\def_new:Npn\dim_sub:cn{\exp_args:Nc\dim_sub:Nn}
\def_new:Npn\dim_sub:Nc{\exp_args:NNc\dim_sub:Nn}
\def_new:Npn \dim_gsub:Nn {\pref_global:D \dim_sub:Nn }
\let_new:NN \dim_use:N \tex_the:D
\def_new:Npn \dim_use:c {\exp_args:Nc\dim_use:N}
\dim_new:N \l_tmpa_dim
\dim_new:N \l_tmpb_dim
\dim_new:N \l_tmpc_dim
\dim_new:N \l_tmpd_dim
\dim_new:N \g_tmpa_dim
\dim_new:N \g_tmpb_dim
\let_new:NN \c_zero_dim \c_zero_skip
\let_new:NN \c_max_dim \c_max_skip
\def_new:Npn \dim_eval:n #1 {\etex_dimexpr:D #1 \scan_stop:}
\let_new:NN \if_dim:w \tex_ifdim:D
\def_new:Npn \dim_compare:nNnTF #1#2#3{
  \if_dim:w \dim_eval:n {#1} #2 \dim_eval:n {#3}
    \exp_after:NN \use_arg_i:nn
  \else:
    \exp_after:NN \use_arg_ii:nn
  \fi:
}
\def_new:Npn \dim_compare:nNnT #1#2#3{
  \if_dim:w \dim_eval:n {#1} #2 \dim_eval:n {#3}
    \exp_after:NN \use_arg_ii:nn
  \fi:
  \use_none:n
}
\def_new:Npn \dim_compare:nNnF #1#2#3{
  \if_dim:w \dim_eval:n {#1} #2 \dim_eval:n {#3}
    \exp_after:NN \use_none:n
  \else:
    \exp_after:NN \use_arg_i:n
  \fi:
}
\def_new:Npn \dim_compare_p:nNn #1#2#3{
  \if_dim:w \dim_eval:n {#1} #2 \dim_eval:n {#3}
    \c_true
  \else:
    \c_false
  \fi:
}
\def_new:Npn \dim_while:nNnT #1#2#3#4{
  \dim_compare:nNnT {#1}#2{#3}{#4 \dim_while:nNnT {#1}#2{#3}{#4}}
}
\def_new:Npn \dim_while:nNnF #1#2#3#4{
  \dim_compare:nNnF {#1}#2{#3}{#4 \dim_while:nNnF {#1}#2{#3}{#4}}
}
\def_new:Npn \dim_dowhile:nNnT #1#2#3#4{
  #4 \dim_compare:nNnT {#1}#2{#3}{\dim_dowhile:nNnT {#1}#2{#3}{#4}}
}
\def_new:Npn \dim_dowhile:nNnF #1#2#3#4{
  #4 \dim_compare:nNnF {#1}#2{#3}{\dim_dowhile:nNnF {#1}#2{#3}{#4}}
}
\alloc_setup_type:nnn {muskip} \c_zero \c_max_register_num
\def_new:Npn \muskip_new:N   #1{\alloc_reg:NnNN g {muskip} \tex_muskipdef:D #1}
\def_new:Npn \muskip_new_l:N #1{\alloc_reg:NnNN l {muskip} \tex_muskipdef:D #1}
\def_new:Npn \muskip_set:Nn#1#2{#1\etex_muexpr:D#2\scan_stop:}
\def_new:Npn \muskip_gset:Nn{\pref_global:D\muskip_set:Nn}
\def_new:Npn \muskip_add:Nn#1#2{\tex_advance:D#1\etex_muexpr:D#2\scan_stop:}
\def_new:Npn \muskip_gadd:Nn{\pref_global:D\muskip_add:Nn}
\def_new:Npn \muskip_sub:Nn#1#2{\tex_advance:D#1-\etex_muexpr:D#2\scan_stop:}
\def_new:Npn \muskip_gsub:Nn{\pref_global:D\muskip_sub:Nn}
%% File: l3toks.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3toks.dtx 580 2006-11-26 15:56:47Z morten $
          {L3 Experimental Token Registers}
\alloc_setup_type:nnn {toks} \c_zero \c_max_register_num
\def_new:Npn \toks_new:N   #1{\alloc_reg:NnNN g {toks} \tex_toksdef:D #1}
\def_new:Npn \toks_new_l:N #1{\alloc_reg:NnNN l {toks} \tex_toksdef:D #1}
\def_new:Npn \toks_new:c {\exp_args:Nc\toks_new:N}
\def_new:Npn \toks_clear:N #1{#1\c_empty_toks
}
\def_new:Npn \toks_gclear:N {
 \pref_global:D
   \toks_clear:N}
\let_new:NN \toks_use:N \the_internal:D
\def_new:Npn \toks_use:c {\exp_args:Nc\toks_use:N}
\def_new:Npn \toks_use_clear:N#1{
   \exp_after:NN
     \toks_clear:N
   \exp_after:NN
        #1
     \toks_use:N#1}
\def_new:Npn \toks_use_gclear:N{
 \pref_global:D
   \toks_use_clear:N}
\def_new:Npn \toks_put_left:Nn #1{
  \exp_after:NN\toks_put_left_aux:w\exp_after:NN\q_mark
                        \toks_use:N #1\q_stop #1}
\def_new:Npn \toks_put_left:No {\exp_args:NNo \toks_put_left:Nn}
\def_new:Npn \toks_gput_left:Nn {
 \pref_global:D
   \toks_put_left:Nn}
\def_new:Npn \toks_gput_left:Nx {\exp_args:NNx \toks_gput_left:Nn}
\def_long_new:Npn \toks_put_left_aux:w #1\q_stop #2#3{
  #2\exp_after:NN{\use_arg_i:nn{#3}#1}
}
\def_long_new:Npn \toks_put_right:Nn #1#2{#1\exp_after:NN{\toks_use:N #1#2}
}
\def_new:Npn \toks_gput_right:Nn {
 \pref_global:D
   \toks_put_right:Nn}
\def_long_new:Npn\toks_put_right:No#1#2{#1\exp_after:NN\exp_after:NN
\exp_after:NN{\exp_after:NN\toks_use:N\exp_after:NN #1#2}}
\def_long_new:Npn\toks_put_right:Nd#1#2{
  \exp_after:NN\toks_put_right:No\exp_after:NN#1\exp_after:NN{#2}}
\def_long_new:Npn \toks_put_right:Nf #1#2{
  #1\exp_after:NN\exp_after:NN\exp_after:NN{
    \exp_after:NN\toks_use:N\exp_after:NN #1\int_to_roman:w -`0#2}}
\def_new:Npn \toks_put_right:Nx {\exp_args:NNx \toks_put_right:Nn }
\def_new:Npn \toks_gput_right:No {\exp_args:NNo\toks_gput_right:Nn}
\def_new:Npn \toks_gput_right:Nx {\exp_args:NNx\toks_gput_right:Nn}
 \let_new:NN \toks_set:Nn\use_noop:
 \def_long_new:Npn \toks_set:No#1#2{#1\exp_after:NN{#2}}
 \def_long_new:Npn \toks_set:Nd#1#2{
 #1\exp_after:NN\exp_after:NN\exp_after:NN{#2}}
\def_new:Npn \toks_set:Nx {\exp_args:NNx \toks_set:Nn}
\def_long_new:Npn\toks_set:Nf #1#2{
  #1\exp_after:NN{\int_to_roman:w -`0#2}}
\def_new:Npn \toks_set:cf {\exp_args:Nc\toks_set:Nf}
\def_new:Npn \toks_set:cn {\exp_args:Nc\toks_set:Nn}
\def_new:Npn \toks_set:co {\exp_args:Nc\toks_set:No}
\def_new:Npn \toks_set:cx {\exp_args:Nc\toks_set:Nx}
 \let_new:NN \toks_gset:Nn\pref_global:D
\def_new:Npn \toks_gset:No {\exp_args:NNo \toks_gset:Nn}
\def_new:Npn \toks_gset:Nx {\exp_args:NNx \toks_gset:Nn}
\def_new:Npn \toks_gset:cn {\exp_args:Nc \toks_gset:Nn}
\def_new:Npn \toks_gset:co {\exp_args:Nc \toks_gset:No}
\def_new:Npn \toks_gset:cx {\exp_args:Nc \toks_gset:Nx}
 \let_new:NN \toks_set_eq:NN  \use_noop:
 \let_new:NN \toks_gset_eq:NN \pref_global:D
\def_new:Npn \toks_set_eq:Nc {\exp_args:NNc\toks_set_eq:NN}
\def_new:Npn \toks_set_eq:cN {\exp_args:Nc\toks_set_eq:NN}
\def_new:Npn \toks_set_eq:cc {\exp_args:Ncc\toks_set_eq:NN}
\def_new:Npn \toks_gset_eq:Nc {\exp_args:NNc\toks_gset_eq:NN}
\def_new:Npn \toks_gset_eq:cN {\exp_args:Nc\toks_gset_eq:NN}
\def_new:Npn \toks_gset_eq:cc {\exp_args:Ncc\toks_gset_eq:NN}
\def_new:Npn\toks_if_empty_p:N#1{
  \if:w \tlist_if_empty_p:o{\toks_use:N #1}
    \c_true
  \else:
    \c_false
  \fi:
}
\def_test_function_new:npn{toks_if_empty:N}#1{\if:w \toks_if_empty_p:N #1}
\def_new:Npn\toks_if_empty:cTF{\exp_args:Nc\toks_if_empty:NTF}
\def_new:Npn\toks_if_empty:cT{\exp_args:Nc\toks_if_empty:NT}
\def_new:Npn\toks_if_empty:cF{\exp_args:Nc\toks_if_empty:NF}
\def_new:NNn \toks_if_eq:NNTF 2 {
  \tlist_if_eq:xxTF{\toks_use:N #1}{\toks_use:N #2}
}
\def_new:NNn \toks_if_eq:NNT 2 {
  \tlist_if_eq:xxT{\toks_use:N #1}{\toks_use:N #2}
}
\def_new:NNn \toks_if_eq:NNF 2 {
  \tlist_if_eq:xxF{\toks_use:N #1}{\toks_use:N #2}
}
\def_new:Npn \toks_if_eq:NcTF {\exp_args:NNc \toks_if_eq:NNTF}
\def_new:Npn \toks_if_eq:NcT {\exp_args:NNc \toks_if_eq:NNT}
\def_new:Npn \toks_if_eq:NcF {\exp_args:NNc \toks_if_eq:NNF}
\def_new:Npn \toks_if_eq:cNTF {\exp_args:Nc \toks_if_eq:NNTF}
\def_new:Npn \toks_if_eq:cNT {\exp_args:Nc \toks_if_eq:NNT}
\def_new:Npn \toks_if_eq:cNF {\exp_args:Nc \toks_if_eq:NNF}
\def_new:Npn \toks_if_eq:ccTF {\exp_args:Ncc \toks_if_eq:NNTF}
\def_new:Npn \toks_if_eq:ccT {\exp_args:Ncc \toks_if_eq:NNT}
\def_new:Npn \toks_if_eq:ccF {\exp_args:Ncc \toks_if_eq:NNF}
\tex_toksdef:D \l_tmpa_toks = 255
\seq_put_right:Nn \g_toks_allocation_seq {255}
\toks_new:N \l_tmpb_toks
\toks_new:N \l_tmpc_toks
\toks_new:N \g_tmpa_toks
\toks_new:N \g_tmpb_toks
\toks_new:N \g_tmpc_toks
\toks_new:N \c_empty_toks
\def_new:Npn \toks_remove_extra_brace_group:N #1{
  \exp_after:NN \toks_remove_extra_brace_group_aux:NNw
  \exp_after:NN \toks_set:Nn \exp_after:NN #1
  \toks_use:N#1\q_nil
}
\def_long_new:Npn\toks_remove_extra_brace_group_aux:NNw #1#2#3\q_nil{#1#2{#3}}
%% File: l3messages.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3messages.dtx 573 2006-08-21 20:59:37Z morten $
          {L3 Experimental LaTeX Messages module}
\tlp_new:Nn \g_file_curr_name_tlp {no~file}
\let_new:NN \err_message:x \tex_errmessage:D
\def_new:Npn \text_put_sp: {~}
\def_new:Npn \text_put_four_sp: {\text_put_sp: \text_put_sp:
                                 \text_put_sp: \text_put_sp: }
\def:Npn\cmd_arg_list_build#1{
  \toks_clear:N\l_tmpb_toks
  \int_set:Nn \l_tmpa_int {#1}
  \int_while:nNnT \l_tmpa_int > \c_zero {
    \toks_put_left:No \l_tmpb_toks {\the_internal:D\l_tmpa_int}
    \toks_put_left:Nn \l_tmpb_toks {##}
    \int_decr:N\l_tmpa_int
  }
  \def:Npx\l_cmd_arg_list{\the_internal:D\l_tmpb_toks}
}
\def:Npn\cmd_declare:Nnn#1[#2]{
  \cmd_arg_list_build{#2}
  \exp_args:NNO\def:Npn#1\l_cmd_arg_list
}
\def_new:Npn \io_show_file_lineno:{
  on~line~\the_internal:D\tex_inputlineno:D\text_put_sp:~of~
  file~\g_file_curr_name_tlp}
\let:NwN \g_err_help_toks \tex_errhelp:D
\def_new:Npn \l_err_label_token {}
\int_set:Nn\tex_errorcontextlines:D\c_minus_one
\def_new:Npn \err_info:nn #1#2{
  \def:Npn\err_newline:{\iow_newline#2}
  \io_put_log:x {#1~\io_show_file_lineno:}}
\def_new:Npn \err_warn:nn #1#2{
  \def:Npn\err_newline:{\iow_newline#2}
  \io_put_term:x {#1~\io_show_file_lineno:}}
\def_new:Npn \err_info_noline:nn #1#2{
  \def:Npn\err_newline:{\iow_newline#2}
  \io_put_log:x {#1}}
\def_new:Npn \err_warn_noline:nn #1#2{
  \def:Npn\err_newline:{\iow_newline#2}
  \io_put_term:x {#1}}
\def_new:Npn \err_interrupt:NNw #1#2{\let:NwN \l_err_label_token #2
     \group_begin:
       \let:NwN \par\use_noop:
       \CodeStop
       \NamesStart:
       %\clearshortrefmaps
       \tex_input:D #1~\err_display_aux:w}
\def_new:Npn \err_fatal:nn #1#2{
  \def:Npn\err_newline:{\iow_newline#2}
  \io_put_term:x {#1~\io_show_file_lineno:}
  \tex_end:D
  }
\def_new:Npn \err_fatal_noline:nn #1#2{
  \def:Npn\err_newline:{\iow_newline#2}
  \io_put_term:x {#1}
  \tex_end:D
  }
\def_new:Npn \err_newline: {^^J}
\iow_new:N \c_iow_err_stream
\tlp_new:Nn \g_err_curr_fname{}
\def_new:Npn \err_file_new:Nn #1#2{
   \tlp_if_empty:NF\g_err_curr_fname
      {\err_latex_bug:x{Unclosed~error~file~`\g_err_curr_fname'}}
   \iow_open:Nn \c_iow_err_stream {#2}
   \err_kernel_info:n{Errorfile~`#2'~opened~for~output}
   \tlp_gset:Nn \g_err_curr_fname{#2}
   \tlp_new:Nn #1{#2}}
\def_new:Npn \err_file_close:N#1{
  \tlp_if_eq:NNF#1\g_err_curr_fname
     {\err_latex_bug:x{You~closed~the~wrong~error~file~`#1'.~
         Open~is~`\g_err_curr_fname'.}}
  \iow_long_unexpanded:Nn \c_iow_err_stream {\err_latex_bug:x{Didn't~find~the~
        correct~error~message~to~show.\iow_newline
        Was~searching~for~a~function~
        with~the~following~meaning:\iow_newline
          \token_to_string:N\token_to_meaning:N
          \token_to_string:N\l_err_label_token}
      \group_end:}
  \iow_close:N \c_iow_err_stream
  \err_kernel_info:n{Errorfile~`\g_err_curr_fname'~closed}
  \tlp_gset_eq:NN\g_err_curr_fname\c_empty_tlp
}
\def_new:Npn \err_interrupt_new:NNNnnn #1{
  \group_begin: \tex_catcode:D`\#\c_other_char_code
  \if_meaning:NN#1\g_err_curr_fname
  \else:
      \err_latex_bug:x{Error~text~goes~to~wrong~err~file:~
          `\g_err_curr_fname'~is~open~but~you~requested~
          `#1'}
  \fi:
  \err_interrupt_new_aux:w}
\def_long_new:Npn \err_interrupt_new_aux:w #1#2#3#4#5{
  \iow_long_unexpanded:Nn \c_iow_err_stream
        {\err_msgline_aux:NNnnn #1#2{#3}{#4}{#5}\use_noop:}
  \group_end:}
\def_new:Npn \err_msgline_aux:NNnnn #1#2#3#4#5{
  \if_meaning:NN#1\l_err_label_token
        \cmd_declare:Nnn\err_display_aux:w [#2]{
           \group_end:
           \toks_gset:Nx\g_err_help_toks{#4}
           \io_put_term:x{LaTeX~error~\io_show_file_lineno:.\iow_newline
               \text_put_sp:\text_put_four_sp: \text_put_sp:
               See~LaTeX~manual~for~explanation.\iow_newline
               \text_put_sp:\text_put_four_sp: \text_put_sp:
               Type~\text_put_sp: H~<return>~\text_put_sp: for~
               immediate~help.}
           \err_message:x{#3}
           #5}
        \tex_endinput:D
   \fi:}
\def_new:Npn \err_display_aux:w {}
\def_new:Npn \err_kernel_interrupt:Nw {\err_interrupt:NNw \c_kernel_err_tlp}
\def_new:Npn \err_kernel_interrupt_new:NNnnn {
        \err_interrupt_new:NNNnnn \c_kernel_err_tlp}
\def_new:Npn \err_kernel_info:n #1 {
  \err_info:nn {LaTeX~Info:~#1}
               {\text_put_four_sp:\text_put_four_sp:\text_put_four_sp:}
  }
\def_new:Npn \err_kernel_warn:n #1 {
  \err_warn:nn {LaTeX~Warning:~#1}
               {\text_put_sp:\text_put_sp:\text_put_sp:
                \text_put_four_sp:\text_put_four_sp:\text_put_four_sp:}
  }
\def_new:Npn \err_kernel_fatal:n #1 {
  \err_fatal:nn {LaTeX~Fatal:~#1}
                {\text_put_sp:
                 \text_put_four_sp:\text_put_four_sp:\text_put_four_sp:}
  }
\def_new:Npn \err_kernel_info_noline:n #1 {
  \err_info_noline:nn {LaTeX~Info:~#1}
               {\text_put_four_sp:\text_put_four_sp:\text_put_four_sp:}
  }
\def_new:Npn \err_kernel_warn_noline:n #1 {
  \err_warn_noline:nn {LaTeX~Warning:~#1}
               {\text_put_sp:\text_put_sp:\text_put_sp:
                \text_put_four_sp:\text_put_four_sp:\text_put_four_sp:}
  }
\def_new:Npn \err_kernel_fatal_noline:n #1 {
  \err_fatal_noline:nn {LaTeX~Fatal:~#1}
                {\text_put_sp:
                 \text_put_four_sp:\text_put_four_sp:\text_put_four_sp:}
  }
\err_file_new:Nn \c_kernel_err_tlp {ltxkernel.err}
%% File: l3box.dtx Copyright (C) 2005-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3box.dtx 573 2006-08-21 20:59:37Z morten $
          {L3 Experimental Box module}
\alloc_setup_type:nnn {box} \c_zero \c_max_register_num
\seq_put_right:Nn \g_box_allocation_seq {255}
\def_new:Npn \box_new:N   #1 {\alloc_reg:NnNN g {box} \tex_mathchardef:D #1}
\def_new:Npn \box_new_l:N #1 {\alloc_reg:NnNN l {box} \tex_mathchardef:D #1}
\def_new:Npn \box_new:c {\exp_args:Nc \box_new:N}
\let_new:NN \if_hbox:N        \tex_ifhbox:D
\let_new:NN \if_vbox:N        \tex_ifvbox:D
\let_new:NN \if_box_empty:N   \tex_ifvoid:D
\def_test_function_new:npn {box_if_empty:N}#1{\if_box_empty:N #1}
\def_new:Npn \box_if_empty:cTF {\exp_args:Nc \box_if_empty:NTF}
\def_new:Npn \box_if_empty:cT {\exp_args:Nc \box_if_empty:NT}
\def_new:Npn \box_if_empty:cF {\exp_args:Nc \box_if_empty:NF}
\def_new:Npn \box_set_eq:NN #1#2 {\tex_setbox:D #1 \tex_box:D #2}
\def_new:Npn \box_set_eq:cN {\exp_args:Nc \box_set_eq:NN}
\def_new:Npn \box_set_eq:Nc {\exp_args:NNc \box_set_eq:NN}
\def_new:Npn \box_set_eq:cc {\exp_args:Ncc \box_set_eq:NN}
\def_new:Npn \box_gset_eq:NN {\pref_global:D\box_set_eq:NN}
\def_new:Npn \box_gset_eq:cN {\exp_args:Nc \box_gset_eq:NN}
\def_new:Npn \box_gset_eq:Nc {\exp_args:NNc \box_gset_eq:NN}
\def_new:Npn \box_gset_eq:cc {\exp_args:Ncc \box_gset_eq:NN}
\let_new:NN \R_previous_box \tex_lastbox:D
\def_new:Npn \box_set_to_previous:N #1{\tex_setbox:D#1\R_previous_box}
\def_new:Npn \box_set_to_previous:c {\exp_args:Nc \box_set_to_previous:N}
\def_new:Npn \box_gset_to_previous:N {\pref_global:D \box_set_to_previous:N}
\def_new:Npn \box_gset_to_previous:c {\exp_args:Nc \box_gset_to_previous:N}
\def_long_new:Npn \box_move_left:nn #1#2{\tex_moveleft:D\dim_eval:n{#1}{#2}}
\def_long_new:Npn \box_move_right:nn #1#2{\tex_moveright:D\dim_eval:n{#1}{#2}}
\def_long_new:Npn \box_move_up:nn #1#2{\tex_raise:D\dim_eval:n{#1}{#2}}
\def_long_new:Npn \box_move_down:nn #1#2{\tex_lower:D\dim_eval:n{#1}{#2}}
\def_new:Npn \box_clear:N #1{\box_set_eq:NN #1 \c_empty_box }
\def_new:Npn \box_clear:c {\exp_args:Nc \box_clear:N }
\def_new:Npn \box_gclear:N {\pref_global:D\box_clear:N}
\def_new:Npn \box_gclear:c {\exp_args:Nc \box_gclear:c }
\let_new:NN \box_ht:N \tex_ht:D
\def_new:Npn \box_ht:c {\exp_args:Nc \box_ht:N}
\let_new:NN \box_dp:N \tex_dp:D
\def_new:Npn \box_dp:c {\exp_args:Nc \box_dp:N}
\let_new:NN \box_wd:N \tex_wd:D
\def_new:Npn \box_wd:c {\exp_args:Nc \box_wd:N}
\let_new:NN \box_use_clear:N \tex_box:D
\def_new:Npn \box_use_clear:c {\exp_args:Nc \box_use_clear:N}
\let_new:NN \box_use:N \tex_copy:D
\def_new:Npn \box_use:c {\exp_args:Nc \box_use:N}
\let:NN \box_show:N \tex_showbox:D
\def_new:Npn \box_show:c {\exp_args:Nc \box_show:N}
\box_new:N \c_empty_box
\box_new:N \l_tmpa_box
\box_new:N \l_tmpb_box
\def_new:Npn \vbox:n {\tex_vbox:D \scan_stop:}
\def_long_new:Npn \vbox_set:Nn #1#2 {\tex_setbox:D #1 \tex_vbox:D {#2}}
\def_new:Npn \vbox_set:cn {\exp_args:Nc \vbox_set:Nn}
\def_new:Npn \vbox_gset:Nn  {\pref_global:D \vbox_set:Nn}
\def_new:Npn \vbox_gset:cn {\exp_args:Nc \vbox_gset:Nn}
\def_long_new:Npn \vbox_set_to_ht:Nnn #1#2#3 {
  \tex_setbox:D #1 \tex_vbox:D to #2 {#3}}
\def_new:Npn \vbox_set_to_ht:cnn{\exp_args:Nc \vbox_set_to_ht:Nnn }
\def_new:Npn \vbox_gset_to_ht:Nnn {\pref_global:D \vbox_set_to_ht:Nnn }
\def_new:Npn \vbox_gset_to_ht:cnn{\exp_args:Nc \vbox_gset_to_ht:Nnn }
\def_new:Npn \vbox_gset_to_ht:ccn {\exp_args:Ncc \vbox_gset_to_ht:Nnn}
\def_new:Npn \vbox_set_inline_begin:N  #1 {
  \tex_setbox:D #1 \tex_vbox:D \c_group_begin_token }
\let_new:NN \vbox_set_inline_end: \c_group_end_token
\def_new:Npn \vbox_gset_inline_begin:N {
  \pref_global:D \vbox_set_inline_begin:N }
\let_new:NN \vbox_gset_inline_end: \c_group_end_token
\def_long_new:Npn \vbox_to_ht:nn #1#2{\tex_vbox:D to \dim_eval:n{#1}{#2}}
\def_long_new:Npn \vbox_to_zero:n #1 {\tex_vbox:D to \c_zero_dim {#1}}
\def_new:Npn \vbox_set_split_to_ht:NNn #1#2#3{
  \tex_setbox:D #1 \tex_vsplit:D #2 to #3
}
\let_new:NN \vbox_unpack:N \tex_unvcopy:D
\def_new:Npn \vbox_unpack:c {\exp_args:Nc \vbox_unpack:N}
\let_new:NN \vbox_unpack_clear:N \tex_unvbox:D
\def_new:Npn \vbox_unpack_clear:c {\exp_args:Nc \vbox_unpack_clear:N}
\def_new:Npn \hbox:n {\tex_hbox:D \scan_stop:}
\def_long_new:Npn \hbox_set:Nn #1#2 {\tex_setbox:D #1 \tex_hbox:D {#2}}
\def_new:Npn \hbox_set:cn {\exp_args:Nc \hbox_set:Nn}
\def_new:Npn \hbox_gset:Nn  {\pref_global:D \hbox_set:Nn}
\def_new:Npn \hbox_gset:cn {\exp_args:Nc \hbox_gset:Nn}
\def_long_new:Npn \hbox_set_to_wd:Nnn #1#2#3 {
  \tex_setbox:D #1 \tex_hbox:D to \dim_eval:n{#2} {#3}}
\def_new:Npn \hbox_set_to_wd:cnn{\exp_args:Nc \hbox_set_to_wd:Nnn }
\def_new:Npn \hbox_gset_to_wd:Nnn {\pref_global:D \hbox_set_to_wd:Nnn }
\def_new:Npn \hbox_gset_to_wd:cnn{\exp_args:Nc \hbox_gset_to_wd:Nnn }
\def_new:Npn \hbox_set_inline_begin:N  #1 {
  \tex_setbox:D #1 \tex_hbox:D \c_group_begin_token }
\let_new:NN \hbox_set_inline_end: \c_group_end_token
\def_new:Npn \hbox_gset_inline_begin:N {
  \pref_global:D \hbox_set_inline_begin:N }
\let_new:NN \hbox_gset_inline_end: \c_group_end_token
\def_long_new:Npn \hbox_to_wd:nn #1#2 {\tex_hbox:D to #1 {#2}}
\def_long_new:Npn \hbox_to_zero:n #1 {\tex_hbox:D to \c_zero_skip {#1}}
\let_new:NN \hbox_unpack:N \tex_unhcopy:D
\def_new:Npn \hbox_unpack:c {\exp_args:Nc \hbox_unpack:N}
\let_new:NN \hbox_unpack_clear:N \tex_unhbox:D
\def_new:Npn \hbox_unpack_clear:c {\exp_args:Nc \hbox_unpack_clear:N}
%% File: l3precom.dtx Copyright (C) 1990-2006 Frank Mittelbach, LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3precom.dtx 573 2006-08-21 20:59:37Z morten $
  {L3 Experimental precompilation module}
\iow_new:N\c_cs_dump_stream
\tlp_new:Nn\g_cs_dump_name_tlp{}
\seq_new:N\g_cs_dump_seq
\def_new:Npn\cs_record_name:N#1{
\seq_gput_left:Nn
  \g_cs_dump_seq#1}
\def_new:Npn\cs_record_name:c{\exp_args:Nc\cs_record_name:N}
\def_new:Npn\cs_dump:{
\iow_expanded_term:n{Precompiling~style~into~(\g_cs_dump_name_tlp)}
\iow_open:Nn\c_cs_dump_stream{\g_cs_dump_name_tlp}
\iow_expanded:Nn\c_cs_dump_stream
{\group_begin:
\tex_catcode:D`\token_to_string:N\*=11\scan_stop:
\token_to_string:N\CodeStart
}
\seq_map_inline:Nn
\g_cs_dump_seq
{\tex_message:D{.}
\iow_expanded:Nn\c_cs_dump_stream
     {\exp_not:n{\gdef:Npn ##1}
         {\tlp_to_str:N##1}}
}
\iow_expanded:Nn \c_cs_dump_stream {\exp_not:n{\num_gset:Nn
                \g_gen_sym_num}
                {\num_use:N\g_gen_sym_num}^^J
\exp_not:n{\num_gset:Nn \g_ggen_sym_num}
                {\num_use:N\g_ggen_sym_num}}
\iow_expanded:Nn
\c_cs_dump_stream
{\group_end:}
\iow_close:N\c_cs_dump_stream
\tex_message:D{~finished}
}
\def_new:Npn\cs_load_dump:n#1{
\file_not_found:nTF{#1.cmp}
{\tlp_gset:Nn\g_cs_dump_name_tlp{#1.cmp}}
{\input{#1.cmp}
\let:NN\cs_dump:\fi:
\if_false:}}
\num_new:N\g_gen_sym_num \num_gset:Nn\g_gen_sym_num{0}
\num_new:N\g_ggen_sym_num \num_gset:Nn\g_ggen_sym_num{0}
\def_new:Npn\cs_gen_sym:N#1{
\num_gincr:N\g_gen_sym_num
\tlp_set:Nc#1{l*\tex_romannumeral:D\num_use:N\g_gen_sym_num}
\exp_after:NN\cs_record_name:N#1
\exp_after:NN\tlp_clear_new:N#1}
\def_new:Npn\cs_ggen_sym:N#1{
\num_gincr:N\g_ggen_sym_num
\tlp_set:Nc#1{g*\tex_romannumeral:D\num_use:N\g_ggen_sym_num}
\exp_after:NN\cs_record_name:N#1
\exp_after:NN\tlp_clear_new:N#1}
%% File: l3prg.dtx Copyright (C) 2005-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3prg.dtx 574 2006-08-21 23:30:10Z morten $
       {L3 Experimental control structures}
\def_new:Npn \mode_vertical_p: {
  \if_mode_vertical: \c_true \else: \c_false\fi:}
\def_test_function_new:npn{mode_vertical:}{\if_mode_vertical:}
\def_new:Npn \mode_horizontal_p: {
  \if_mode_horizontal: \c_true \else: \c_false\fi:}
\def_test_function_new:npn{mode_horizontal:}{\if_mode_horizontal:}
\def_new:Npn \mode_inner_p: {
  \if_mode_inner: \c_true \else: \c_false\fi:}
\def_test_function_new:npn{mode_inner:}{\if_mode_inner:}
\def_test_function_new:npn{mode_math:} {
  \scan_align_safe_stop:  \if_mode_math: }
\def_new:Npn \group_align_safe_begin: {\if_false:{\fi:\if_num:w0=`}\fi:}
\def_new:Npn \group_align_safe_end:   {\if_num:w0=`{\fi:\if_false:}\fi:}
\def_new:Npn \scan_align_safe_stop: {
  \num_compare:nNnT \etex_currentgrouptype:D = \c_six
  {
    \num_compare:nNnF \etex_lastnodetype:D = \c_zero
    {
      \num_compare:nNnF \etex_lastnodetype:D = \c_seven
        \scan_stop:
    }
  }
}
\def_new:Npn \prg_replicate:nn #1{
  \cs:w use_noop:
  \exp_after:NN\prg_replicate_first_aux:N
  \int_use:N \int_eval:n{#1} \cs_end:
  \cs_end:
}
\def_new:Npn \prg_replicate_aux:N#1{
  \cs:w prg_replicate_#1:n\prg_replicate_aux:N
}
\def_new:Npn \prg_replicate_first_aux:N#1{
  \cs:w prg_replicate_first_#1:n\prg_replicate_aux:N
}
\def_new:Npn      \prg_replicate_ :n #1{}% no, this is not a typo!
\def_long_new:cpn {prg_replicate_0:n}#1{\cs_end:{#1#1#1#1#1#1#1#1#1#1}}
\def_long_new:cpn {prg_replicate_1:n}#1{\cs_end:{#1#1#1#1#1#1#1#1#1#1}#1}
\def_long_new:cpn {prg_replicate_2:n}#1{\cs_end:{#1#1#1#1#1#1#1#1#1#1}#1#1}
\def_long_new:cpn {prg_replicate_3:n}#1{
  \cs_end:{#1#1#1#1#1#1#1#1#1#1}#1#1#1}
\def_long_new:cpn {prg_replicate_4:n}#1{
  \cs_end:{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1}
\def_long_new:cpn {prg_replicate_5:n}#1{
  \cs_end:{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1#1}
\def_long_new:cpn {prg_replicate_6:n}#1{
  \cs_end:{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1#1#1}
\def_long_new:cpn {prg_replicate_7:n}#1{
  \cs_end:{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1#1#1#1}
\def_long_new:cpn {prg_replicate_8:n}#1{
  \cs_end:{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1#1#1#1#1}
\def_long_new:cpn {prg_replicate_9:n}#1{
  \cs_end:{#1#1#1#1#1#1#1#1#1#1}#1#1#1#1#1#1#1#1#1}
\def_long_new:cpn {prg_replicate_first_0:n}#1{\cs_end: }
\def_long_new:cpn {prg_replicate_first_1:n}#1{\cs_end: #1}
\def_long_new:cpn {prg_replicate_first_2:n}#1{\cs_end: #1#1}
\def_long_new:cpn {prg_replicate_first_3:n}#1{\cs_end: #1#1#1}
\def_long_new:cpn {prg_replicate_first_4:n}#1{\cs_end: #1#1#1#1}
\def_long_new:cpn {prg_replicate_first_5:n}#1{\cs_end: #1#1#1#1#1}
\def_long_new:cpn {prg_replicate_first_6:n}#1{\cs_end: #1#1#1#1#1#1}
\def_long_new:cpn {prg_replicate_first_7:n}#1{\cs_end: #1#1#1#1#1#1#1}
\def_long_new:cpn {prg_replicate_first_8:n}#1{\cs_end: #1#1#1#1#1#1#1#1}
\def_long_new:cpn {prg_replicate_first_9:n}#1{\cs_end: #1#1#1#1#1#1#1#1#1}
\def_long_new:NNn \prg_stepwise_function:nnnN 2{
  \num_compare:nNnTF{#2}<\c_zero
  {\exp_args:No\prg_stepwise_function_decr:nnnN }
  {\exp_args:No\prg_stepwise_function_incr:nnnN }
  {\int_use:N\int_eval:n{#1}}{#2}
}
\def_long_new:NNn \prg_stepwise_function_incr:nnnN 4{
  \num_compare:nNnF {#1}>{#3}
  {
    #4{#1}
    \exp_args:No \prg_stepwise_function_incr:nnnN
    {\int_use:N\int_eval:n{#1 + #2}}
    {#2}{#3}{#4}
  }
}
\def_long_new:NNn \prg_stepwise_function_decr:nnnN 4{
  \num_compare:nNnF {#1}<{#3}
  {
    #4{#1}
    \exp_args:No \prg_stepwise_function_decr:nnnN
    {\int_use:N\int_eval:n{#1 + #2}}
    {#2}{#3}{#4}
  }
}
\int_new:N\l_prg_inline_level_int
\def_long_new:NNn\prg_stepwise_inline:nnnn 4{
  \int_incr:N \l_prg_inline_level_int
  \def:cpn{prg_stepwise_inline_\int_use:N\l_prg_inline_level_int :n}##1{#4}
  \num_compare:nNnTF {#2}<\c_zero
  {\exp_args:Nco \prg_stepwise_inline_decr:Nnnn }
  {\exp_args:Nco \prg_stepwise_inline_incr:Nnnn }
  {prg_stepwise_inline_\int_use:N\l_prg_inline_level_int :n}
  {\int_use:N\int_eval:n{#1}} {#2} {#3}
  \int_decr:N \l_prg_inline_level_int
}
\def_long_new:NNn \prg_stepwise_inline_incr:Nnnn 4{
  \num_compare:nNnF {#2}>{#4}
  {
    #1{#2}
    \exp_args:NNo \prg_stepwise_inline_incr:Nnnn #1
    {\int_use:N\int_eval:n{#2 + #3}} {#3}{#4}
  }
}
\def_long_new:NNn \prg_stepwise_inline_decr:Nnnn 4{
  \num_compare:nNnF {#2}<{#4}
  {
    #1{#2}
    \exp_args:NNo \prg_stepwise_inline_decr:Nnnn #1
    {\int_use:N\int_eval:n{#2 + #3}} {#3}{#4}
  }
}
\def_long_new:NNn \prg_stepwise_variable:nnnNn 2 {
  \num_compare:nNnTF {#2}<\c_zero
  {\exp_args:No\prg_stepwise_variable_decr:nnnNn}
  {\exp_args:No\prg_stepwise_variable_incr:nnnNn}
  {\int_use:N\int_eval:n{#1}}{#2}
}
\def_long_new:NNn \prg_stepwise_variable_incr:nnnNn 5 {
  \num_compare:nNnF {#1}>{#3}
  {
    \def:Npn #4{#1} #5
    \exp_args:No \prg_stepwise_variable_incr:nnnNn
    {\int_use:N\int_eval:n{#1 + #2}}{#2}{#3}#4{#5}
  }
}
\def_long_new:NNn \prg_stepwise_variable_decr:nnnNn 5 {
  \num_compare:nNnF {#1}<{#3}
  {
    \def:Npn #4{#1} #5
    \exp_args:No \prg_stepwise_variable_decr:nnnNn
    {\int_use:N\int_eval:n{#1 + #2}}{#2}{#3}#4{#5}
  }
}
\def_new:Npn \bool_new:N #1   { \let_new:NN #1 \c_false }
\def_new:Npn \bool_new:c #1   { \let_new:cN #1 \c_false }
\def_new:Npn \bool_set_true:N   #1 { \let:NN  #1 \c_true }
\def_new:Npn \bool_set_true:c   #1 { \let:cN  #1 \c_true }
\def_new:Npn \bool_set_false:N  #1 { \let:NN  #1 \c_false }
\def_new:Npn \bool_set_false:c  #1 { \let:cN  #1 \c_false }
\def_new:Npn \bool_gset_true:N   #1 { \glet:NN  #1 \c_true }
\def_new:Npn \bool_gset_true:c   #1 { \glet:cN  #1 \c_true }
\def_new:Npn \bool_gset_false:N  #1 { \glet:NN  #1 \c_false }
\def_new:Npn \bool_gset_false:c  #1 { \glet:cN  #1 \c_false }
\let_new:NN \bool_set_eq:NN \let:NN
\let_new:NN \bool_set_eq:Nc \let:Nc
\let_new:NN \bool_set_eq:cN \let:cN
\let_new:NN \bool_set_eq:cc \let:cc
\let_new:NN \bool_gset_eq:NN \glet:NN
\let_new:NN \bool_gset_eq:Nc \glet:Nc
\let_new:NN \bool_gset_eq:cN \glet:cN
\let_new:NN \bool_gset_eq:cc \glet:cc
\bool_new:N \l_tmpa_bool
\bool_new:N \g_tmpa_bool
\def_test_function_new:npn{bool_if:N}#1{\if:w #1}
\def_new:Npn \bool_if:cTF{\exp_args:Nc\bool_if:NTF}
\def_new:Npn \bool_if:cT{\exp_args:Nc\bool_if:NT}
\def_new:Npn \bool_if:cF{\exp_args:Nc\bool_if:NF}
\def_new:Npn \bool_if_p:N #1 { #1 }
\let_new:NN \bool_if_p:c \cs_use:c
\def_long_new:Npn \bool_whiledo:NT #1 #2 {
  \bool_if:NT #1 {#2 \bool_whiledo:NT #1 {#2}}
}
\def_new:Npn \bool_whiledo:cT{\exp_args:Nc\bool_whiledo:NT}
\def_long_new:Npn \bool_whiledo:NF #1 #2 {
  \bool_if:NF #1 {#2 \bool_whiledo:NF #1 {#2}}
}
\def_new:Npn \bool_whiledo:cF{\exp_args:Nc\bool_whiledo:NF}
\def_long_new:Npn \bool_dowhile:NT #1 #2 {
  #2 \bool_if:NT #1 {\bool_dowhile:NT #1 {#2}}
}
\def_new:Npn \bool_dowhile:cT{\exp_args:Nc\bool_dowhile:NT}
\def_long_new:Npn \bool_dowhile:NF #1 #2 {
  #2 \bool_if:NF #1 {\bool_dowhile:NF #1 {#2}}
}
\def_new:Npn \bool_dowhiledo:cF{\exp_args:Nc\bool_dowhile:cF}
\def_new:Npn \bool_double_if:NNnnnn#1#2{
  \if_case:w \num_eval:w #1\scan_stop:
    \if_case:w \num_eval:w #2\scan_stop:
      \exp_after:NN\exp_after:NN\exp_after:NN \use_arg_i:nnnn
    \else:
      \exp_after:NN\exp_after:NN\exp_after:NN \use_arg_ii:nnnn
    \fi:
  \else:
    \if_case:w \num_eval:w #2\scan_stop:
      \exp_after:NN\exp_after:NN\exp_after:NN \use_arg_iii:nnnn
    \else:
      \exp_after:NN\exp_after:NN\exp_after:NN \use_arg_iv:nnnn
    \fi:
  \fi:
}
\def_new:Npn \bool_double_if:cNnnnn{\exp_args:Nc\bool_double_if:NNnnnn}
\def_new:Npn \bool_double_if:Ncnnnn{\exp_args:NNc\bool_double_if:NNnnnn}
\def_new:Npn \bool_double_if:ccnnnn{\exp_args:Ncc\bool_double_if:NNnnnn}
\def_long_new:Npn \prg_whiledo:nT #1#2{
  #1 {#2 \prg_whiledo:nT {#1}{#2}}
}
\def_long_new:Npn \prg_whiledo:nF #1#2{
  #1 {#2 \prg_whiledo:nF {#1}{#2}}
}
\def_long_new:Npn \prg_dowhile:nT #1#2{
  #2 #1 {\prg_dowhile:nT {#1}{#2}}
}
\def_long_new:Npn \prg_dowhile:nF #1#2{
  #2 #1 {\prg_dowhile:nF {#1}{#2}}
}
\let_new:NN \prg_if_predicate:nTF \bool_if:NTF
\let_new:NN \prg_if_predicate:nT  \bool_if:NT
\let_new:NN \prg_if_predicate:nF  \bool_if:NF
\def_new:Npn \prg_if_predicate_or_p:nn #1#2{
  \if_num:w #1#2<\c_hundred_one
    \c_true
  \else:
    \c_false
  \fi:
}
\def_new:Npn \prg_if_predicate_and_p:nn #1#2{
  \if_case:w #1#2 ~
    \c_true
  \else:
    \c_false
  \fi:
}
\def_new:Npn \prg_if_predicate_not_p:n #1{
  \if_case:w #1 ~
    \c_false
  \or:
    \c_true
  \fi:
}
\def_long_new:Npn \prg_if_predicate_ands_p:n #1{
  \exp_after:NN \prg_if_predicate_andor_aux:NNN \exp_after:NN \c_true
  \int_to_roman:w -`0 #1 \scan_stop: \scan_stop:
}
\def_long_new:Npn \prg_if_predicate_ors_p:n #1{
  \exp_after:NN \prg_if_predicate_andor_aux:NNN \exp_after:NN \c_false
  \int_to_roman:w -`0 #1 \scan_stop: \scan_stop:
}
\def_new:Npn \prg_if_predicate_andor_aux:NNN #1#2#3{
  \token_if_eq_meaning:NNTF \scan_stop: #2
  { #1 }
  {
    \int_compare:nNnTF #3 = #1
    { \exp_after:NN \prg_if_predicate_andor_aux:NNN }
    { \exp_after:NN \prg_if_predicate_andor_break:NNN }
    \exp_after:NN #1 \int_to_roman:w -`0
  }
}
\def_new:Npn \prg_if_predicate_andor_break:NNN #1#2#3{
  \token_if_eq_meaning:NNTF \scan_stop: #2
  { \if:w #1\c_false\else:\c_true\fi: }
  {
    \exp_after:NN \prg_if_predicate_andor_break:NNN \exp_after:NN #1
    \int_to_roman:w -`0
  }
}
\def_new:NNn \prg_define_quicksort:nnn 3 {
  \def_long:cNx{#1_quicksort:n}1{
    \exp_not:c{#1_quicksort_start_partition:w} ##1
    \exp_not:n{#2\q_nil#3\q_stop}
  }
  \def_long:cNx{#1_quicksort_braced:n}1{
    \exp_not:c{#1_quicksort_start_partition_braced:n} ##1
    \exp_not:N\q_nil\exp_not:N\q_stop
  }
  \def_long:cpx {#1_quicksort_start_partition:w} #2 ##1 #3{
    \exp_not:N \quark_if_nil:nT {##1}\exp_not:N \use_none_delimit_by_q_stop:w
    \exp_not:c{#1_quicksort_do_partition_i:nnnw} {##1}{}{}
  }
  \def_long:cNx {#1_quicksort_start_partition_braced:n} 1 {
    \exp_not:N \quark_if_nil:nT {##1}\exp_not:N \use_none_delimit_by_q_stop:w
    \exp_not:c{#1_quicksort_do_partition_i_braced:nnnn} {##1}{}{}
  }
  \def_long:cpx {#1_quicksort_do_partition_i:nnnw} ##1##2##3 #2 ##4 #3 {
    \exp_not:N \quark_if_nil:nTF {##4} \exp_not:c {#1_do_quicksort_braced:nnnnw}
    {
      \exp_not:c{#1_quicksort_compare:nnTF}{##1}{##4}
      \exp_not:c{#1_quicksort_partition_greater_ii:nnnn}
      \exp_not:c{#1_quicksort_partition_less_ii:nnnn}
    }
    {##1}{##2}{##3}{##4}
  }
  \def_long:cNx {#1_quicksort_do_partition_i_braced:nnnn} 4 {
    \exp_not:N \quark_if_nil:nTF {##4} \exp_not:c {#1_do_quicksort_braced:nnnnw}
    {
      \exp_not:c{#1_quicksort_compare:nnTF}{##1}{##4}
      \exp_not:c{#1_quicksort_partition_greater_ii_braced:nnnn}
      \exp_not:c{#1_quicksort_partition_less_ii_braced:nnnn}
    }
    {##1}{##2}{##3}{##4}
  }
  \def_long:cpx {#1_quicksort_do_partition_ii:nnnw} ##1##2##3 #2 ##4 #3 {
    \exp_not:N \quark_if_nil:nTF {##4} \exp_not:c {#1_do_quicksort_braced:nnnnw}
    {
      \exp_not:c{#1_quicksort_compare:nnTF}{##4}{##1}
      \exp_not:c{#1_quicksort_partition_less_i:nnnn}
      \exp_not:c{#1_quicksort_partition_greater_i:nnnn}
    }
    {##1}{##2}{##3}{##4}
  }
  \def_long:cNx {#1_quicksort_do_partition_ii_braced:nnnn} 4 {
    \exp_not:N \quark_if_nil:nTF {##4} \exp_not:c {#1_do_quicksort_braced:nnnnw}
    {
      \exp_not:c{#1_quicksort_compare:nnTF}{##4}{##1}
      \exp_not:c{#1_quicksort_partition_less_i_braced:nnnn}
      \exp_not:c{#1_quicksort_partition_greater_i_braced:nnnn}
    }
    {##1}{##2}{##3}{##4}
  }
  \def_long:cNx {#1_quicksort_partition_less_i:nnnn} 4{
    \exp_not:c{#1_quicksort_do_partition_i:nnnw}{##1}{##2}{{##4}##3}}
  \def_long:cNx {#1_quicksort_partition_less_ii:nnnn} 4{
    \exp_not:c{#1_quicksort_do_partition_ii:nnnw}{##1}{##2}{##3{##4}}}
  \def_long:cNx {#1_quicksort_partition_greater_i:nnnn} 4{
    \exp_not:c{#1_quicksort_do_partition_i:nnnw}{##1}{{##4}##2}{##3}}
  \def_long:cNx {#1_quicksort_partition_greater_ii:nnnn} 4{
    \exp_not:c{#1_quicksort_do_partition_ii:nnnw}{##1}{##2{##4}}{##3}}
  \def_long:cNx {#1_quicksort_partition_less_i_braced:nnnn} 4{
    \exp_not:c{#1_quicksort_do_partition_i_braced:nnnn}{##1}{##2}{{##4}##3}}
  \def_long:cNx {#1_quicksort_partition_less_ii_braced:nnnn} 4{
    \exp_not:c{#1_quicksort_do_partition_ii_braced:nnnn}{##1}{##2}{##3{##4}}}
  \def_long:cNx {#1_quicksort_partition_greater_i_braced:nnnn} 4{
    \exp_not:c{#1_quicksort_do_partition_i_braced:nnnn}{##1}{{##4}##2}{##3}}
  \def_long:cNx {#1_quicksort_partition_greater_ii_braced:nnnn} 4{
    \exp_not:c{#1_quicksort_do_partition_ii_braced:nnnn}{##1}{##2{##4}}{##3}}
  \def_long:cpx {#1_do_quicksort_braced:nnnnw} ##1##2##3##4\q_stop {
    \exp_not:c{#1_quicksort_braced:n}{##2}
    \exp_not:c{#1_quicksort_function:n}{##1}
    \exp_not:c{#1_quicksort_braced:n}{##3}
  }
}
\prg_define_quicksort:nnn {prg}{}{}
\let:NN \prg_quicksort_function:n \ERROR
\let:NN \prg_quicksort_compare:nnTF \ERROR
%% File: l3xref.dtx Copyright (C) 2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3xref.dtx 579 2006-11-25 23:38:03Z morten $
       {L3 Experimental cross referencing}
\prop_new:N \g_xref_all_curr_immediate_fields_plist
\prop_new:N \g_xref_all_curr_deferred_fields_plist
\def_new:Npn \xref_new:nn {\xref_new_aux:nnn{immediate}}
\def_new:Npn \xref_deferred_new:nn {\xref_new_aux:nnn{deferred}}
\def_new:Npn \xref_new_aux:nnn #1#2#3{
  \prop_gput:ccx {g_xref_all_curr_ #1 _fields_plist}
  { xref_ #2 _key }
  { \exp_not:c {l_xref_curr_#2_tlp }}
  \def_protected:cpn { xref_#2_key }{}
  \tlp_new:cn{l_xref_curr_#2_tlp}{#3}
  \toks_set:Nx \l_tmpa_toks {
    \exp_not:n { \def:cpn {xref_get_value_#2_aux:w} ##1 }
    \exp_not:c { xref_#2_key }
  }
  \toks_use:N \l_tmpa_toks ##2 ##3\q_nil {##2}
}
\def_new:Npn \xref_get_value:nn #1#2 {
  \cs_if_really_free:cTF{g_xref_#2_plist}
  {??}
  {
    \exp_args:NcNc \exp_after:NN {xref_get_value_#1_aux:w}
    \prop_use:N {g_xref_#2_plist}
    \q_nil
  }
}
\def:NNn \exp_after:cc 2 {
  \exp_after:NN \exp_after:NN
  \cs:w #1\exp_after:NN\cs_end: \cs:w #2\cs_end:
}
\def_protected_new:Npn \xref_define_label:nn {
  \group_begin:
    \char_set_catcode:nn {`\ }\c_ten
    \xref_define_label_aux:nn
}
\def_new:Npn \xref_define_label_aux:nn #1#2 {
    \cs_if_really_free:cTF{g_xref_#1_plist}
    {\prop_new:c{g_xref_#1_plist}}{\WARNING}
    \toks_gset:cn{g_xref_#1_plist}{#2}
  \group_end:
}
\def:Npn \xref_set_label:n #1{
  \def:Npx \tmp:w{\prop_use:N\g_xref_all_curr_immediate_fields_plist}
  \exp_args:NNx\iow_deferred_expanded:Nn \xref_write{
    \xref_define_label:nn {#1} {
      \tmp:w
      \prop_use:N \g_xref_all_curr_deferred_fields_plist
    }
  }
}
\iow_new:N \xref_write
%% File: l3final.dtx Copyright (C) 1990-2006 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/cgi-bin/cvsweb.cgi/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
\GetIdInfo$Id: l3final.dtx 573 2006-08-21 20:59:37Z morten $
          {L3 Experimental final module}
\err_file_close:N\c_kernel_err_tlp
\tex_dump:D
%% 
%%
%% End of file `lbase.ltx'.
