texlive[41526] Master: olsak-misc (21jun16)

commits+karl at tug.org commits+karl at tug.org
Thu Jun 23 00:28:57 CEST 2016


Revision: 41526
          http://tug.org/svn/texlive?view=revision&revision=41526
Author:   karl
Date:     2016-06-23 00:28:57 +0200 (Thu, 23 Jun 2016)
Log Message:
-----------
olsak-misc (21jun16)

Modified Paths:
--------------
    trunk/Master/tlpkg/libexec/ctan2tds
    trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/generic/olsak-misc/
    trunk/Master/texmf-dist/doc/generic/olsak-misc/README
    trunk/Master/texmf-dist/doc/generic/olsak-misc/booklet.tex
    trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv-pu.tex
    trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv-word.tex
    trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv.tex
    trunk/Master/texmf-dist/doc/generic/olsak-misc/eparam.tex
    trunk/Master/texmf-dist/doc/generic/olsak-misc/fun-coffee.tex
    trunk/Master/texmf-dist/doc/generic/olsak-misc/openclose.tex
    trunk/Master/texmf-dist/doc/generic/olsak-misc/seplist.tex
    trunk/Master/texmf-dist/tex/generic/olsak-misc/
    trunk/Master/texmf-dist/tex/generic/olsak-misc/qrcode.tex
    trunk/Master/texmf-dist/tex/generic/olsak-misc/scanbase.tex
    trunk/Master/texmf-dist/tex/generic/olsak-misc/scancsv.tex
    trunk/Master/texmf-dist/tex/generic/olsak-misc/xmlparser.tex
    trunk/Master/tlpkg/tlpsrc/olsak-misc.tlpsrc

Added: trunk/Master/texmf-dist/doc/generic/olsak-misc/README
===================================================================
--- trunk/Master/texmf-dist/doc/generic/olsak-misc/README	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/olsak-misc/README	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,29 @@
+This is a collection with various single-file plain TeX macros
+written by Petr Olsak
+
+The documentation is included in each file separately.
+
+README       ... this file
+booklet.tex  ... re-orders PDF pages and collects them for booklet printing 
+cnv.tex      ... conversion of texts
+cnv-pu.tex   ... example of usage of cnv.tex --- pdf outlines in Unicode
+cnv-word.tex ... example of usage of cnv.tex --- word to word conversion
+eparam.tex   ... Full expansion during parameter scanning
+fun-coffee.tex . generates splotches in the document
+openclose.tex .. repairs balanced text between \Open ...\Close pair
+qrcode.tex   ... QR code generated at TeX level
+scanbase.tex ... parser of text-style mysql outputs
+scancsv.tex  ... parser of CSV format
+seplist.tex  ... macros with alternative separators of a parameter
+xmlparser.tex .. parser of XML language
+
+History:
+-------
+1996--2016         ... files are created and released at
+                       http://petr.olsak.net/ftp/olsak/makra/
+<Jun. 2016> ver.1  ... files contributed to CTAN as one "bundle" olsak-misc
+
+License:
+-------
+All files mentioned here are in Public domain.
+


Property changes on: trunk/Master/texmf-dist/doc/generic/olsak-misc/README
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/olsak-misc/booklet.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/olsak-misc/booklet.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/olsak-misc/booklet.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,38 @@
+% booklet.tex  ... re-orders PDF pages and collets them for booklet printing 
+
+% This macro is used as an example in the book
+% Petr Olsak: Typograficky system TeX, pages 102, 103.
+
+% Usage: change the first definition \def\document{your-document}
+% without PDF extension and process: pdftex booklet.
+% Then use duplex printing over the short side.
+
+\ifx\document\undefined
+   \def\document {navrh-rozpoctu} % Name of processed document without suffix
+\fi
+\nopagenumbers % we need no pagenumbers
+\pdfpagewidth=297mm \pdfpageheight=210mm % sheet = format A4 landscape
+\pdfhorigin=0pt \pdfvorigin=0pt          % Knuth's origin-point shifted
+\def\pageswidth{width.5\pdfpagewidth}    % page width = 1/2 of sheet width 
+
+\pdfximage \pageswidth {\document.pdf}   % First page is read in order to
+\mathchardef\firstpage=\pdflastximage    % detect \pdflastximagepages
+
+\def\putpage#1{% put the page number #1 into sheet
+   \ifnum#1>\pdflastximagepages \hbox{\vrule\pageswidth}\else % empty page
+      \ifnum#1=1 \pdfrefximage\firstpage                   % first page   
+      \else \pdfximage \pageswidth page#1 {\document.pdf}% % normal page
+            \pdfrefximage\pdflastximage
+      \fi\fi}
+
+\newcount\aL \newcount\aR \newcount\bL \newcount\bR
+\aL=\pdflastximagepages
+\advance\aL by3 \divide\aL by4 \multiply\aL by4  % rounding to 4N up 
+\aR=1  \bL=2 \bR=\aL \advance\bR by-1            % little calculations
+\loop
+   \hbox{\putpage\aL \putpage\aR}\vfil\break     % faceside of the sheet
+   \hbox{\putpage\bL \putpage\bR}\vfil\break     % underside of the sheet
+   \advance\aR by2  \advance\aL by-2
+   \advance\bR by-2 \advance\bL by2
+   \ifnum \aL>\aR \repeat
+\end


Property changes on: trunk/Master/texmf-dist/doc/generic/olsak-misc/booklet.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv-pu.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv-pu.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv-pu.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,266 @@
+
+% cnv-pu.tex -- The conversion table for UNICODE output for PFD outlines 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% April 2005                                                  Petr Olsak
+
+% You can use cnv.tex + this table with your macros in plain if you
+% need to save the PDF outlines in UNICODE octal strings.
+
+% You can use cnv.tex + this table with hyperref in LaTeX if you don't
+% want to use the inputenc package. Eight-bit tokens are used as single
+% non-active accented characters from the alphabet of your language. 
+% In such a case you can type:
+%
+% \usepackage{czech}     % IL2 font encoding is declared here
+%                        % You can use another package which defines
+%                        % \encodingdefault.
+% \input cnv-pu.tex      % font encoding declared before is used here
+% \usepackage{hyperref}  
+% \def\pdfstringdef #1#2{% \pdfstringdef re-definition
+%    \bgroup \escapechar=`\\%
+%    \def\cnvtable{pu}\cnvin{#2}%
+%    \xdef #1{\string\376\string\377\cnvout}\egroup }
+
+% Sorry, the following conversion table is not considered to be definite.
+% If you add some usual conversion rules, please, send the result to
+% the author <petr at olsak.net>. I'll be very pleased to add your additions
+% to my cnv.tex distribution. 
+
+\ifx\cnvin\undefined  \input cnv \fi
+
+\bgroup
+
+\let\predefmethod=\gdef
+\let\findefmethod=\xdef
+\let\cnvaccentmethod=\gdef
+
+\def\declchar #1#2#3     {\findef {#1} {#2#3}}
+\def\declaccent #1#2#3#4 {\cnvaccent #1#2{#3#4}}
+
+\def\0{\string\0} \def\1{\string\1} \def\2{\string\2} \def\3{\string\3}
+
+\gdef\cnvdefault #1{}         % undeclared tokens will be removed
+\xdef\cnvadefault {\000\077}  % undeclared accents are converted to "?"
+
+\def\cnvtable{pu}  % PdfUnicode conversion table
+
+\declchar  { }  \000\040
+\declchar  !    \000\041
+\declchar  "    \000\042
+\declchar  #    \000\043
+\declchar  \#   \000\043
+%\declchar  $   \000\044
+\declchar  \$   \000\044
+\declchar  \%   \000\045
+\declchar  &    \000\046
+\declchar  \&   \000\046
+\declchar  '    \000\047
+\declchar  (    \000\050
+\declchar  )    \000\051
+\declchar  *    \000\052
+\declchar  +    \000\053
+\declchar  ,    \000\054
+\declchar  -    \000\055
+\declchar  .    \000\056
+\declchar  /    \000\057
+\declchar  0    \000\060
+\declchar  1    \000\061
+\declchar  2    \000\062
+\declchar  3    \000\063
+\declchar  4    \000\064
+\declchar  5    \000\065
+\declchar  6    \000\066
+\declchar  7    \000\067
+\declchar  8    \000\070
+\declchar  9    \000\071
+\declchar  :    \000\072
+\declchar  ;    \000\073
+\declchar  <    \000\074
+\declchar  =    \000\075
+\declchar  >    \000\076
+\declchar  ?    \000\077
+\declchar  @    \000@
+\declchar  A    \000A
+\declchar  B    \000B
+\declchar  C    \000C
+\declchar  D    \000D
+\declchar  E    \000E
+\declchar  F    \000F
+\declchar  G    \000G
+\declchar  H    \000H
+\declchar  I    \000I
+\declchar  J    \000J
+\declchar  K    \000K
+\declchar  L    \000L
+\declchar  M    \000M
+\declchar  N    \000N
+\declchar  O    \000O
+\declchar  P    \000P
+\declchar  Q    \000Q
+\declchar  R    \000R
+\declchar  S    \000S
+\declchar  T    \000T
+\declchar  U    \000U
+\declchar  V    \000V
+\declchar  W    \000W
+\declchar  X    \000X
+\declchar  Y    \000Y
+\declchar  Z    \000Z
+\declchar  [    \000\133
+\declchar  \\   \000\134
+\declchar  ]    \000\135
+\declchar  ^    \000\136
+\declchar  _    \000\137
+\declchar  `    \000\140
+\declchar  a    \000a
+\declchar  b    \000b
+\declchar  c    \000c
+\declchar  d    \000d
+\declchar  e    \000e
+\declchar  f    \000f
+\declchar  g    \000g
+\declchar  h    \000h
+\declchar  i    \000i
+\declchar  j    \000j
+\declchar  k    \000k
+\declchar  l    \000l
+\declchar  m    \000m
+\declchar  n    \000n
+\declchar  o    \000o
+\declchar  p    \000p
+\declchar  q    \000q
+\declchar  r    \000r
+\declchar  s    \000s
+\declchar  t    \000t
+\declchar  u    \000u
+\declchar  v    \000v
+\declchar  w    \000w
+\declchar  x    \000x
+\declchar  y    \000y
+\declchar  z    \000z
+\declchar  \{   \000\173
+\declchar  |    \000\174
+\declchar  \}   \000\175
+\declchar  \~   \000\176
+\declchar  ~    \000\040
+
+\declchar  \O   \000\330
+\declchar  \o   \000\370
+\declchar  \AA  \000\305
+\declchar  \aa  \000\345
+\declchar  \AE  \000\306
+\declchar  \ae  \000\346
+\declchar  \OE  \001\122
+\declchar  \oe  \001\123
+\declchar  \ss  \000\337
+\declchar  \L   \001\101
+\declchar  \l   \001\102
+
+% etc...
+
+\predef \TeX    {TeX}
+\predef \LaTeX  {La\TeX}
+\predef \LaTeXe {\LaTeX2e}
+\predef \eTeX   {e-\TeX}
+\predef \MF     {Metafont}
+\predef \MP     {Metapost}
+
+\predef \uv #1{\clqq #1\crqq}
+
+\declchar \clqq  \000\214
+\declchar \crqq  \000\215
+
+% etc...
+
+% The \declaccent macro depends on the expansion of \'a etc.
+% If these sequences expand to a single token then this token is stored
+% to the conversion table too: it means that \'a and a native a-acute
+% are both converted to \000\341.
+% In order to prepare the \'a (etc) expansion we need to test if we are
+% in LaTeX (\fontencoding is defined) or not. In non-LaTeX case, we run the
+% \csaccents macro (or \relax if not defined). This macro redefines \'
+% (etc.) macros as expandable in csplain format.
+
+\ifx\fontencoding\undefined
+   \csname csaccents\endcsname
+\else
+   \fontencoding{\encodingdefault}\selectfont
+\fi
+
+\declaccent  \' A  \000\301
+\declaccent  \' a  \000\341
+\declaccent  \` A  \000\300
+\declaccent  \` a  \000\340
+\declaccent  \" A  \000\304
+\declaccent  \" a  \000\344
+\declaccent  \v C  \001\014
+\declaccent  \v c  \001\015
+\declaccent  \v D  \001\016
+\declaccent  \v d  \001\017
+\declaccent  \' E  \000\311
+\declaccent  \' e  \000\351
+\declaccent  \v E  \001\032
+\declaccent  \v e  \001\033
+\declaccent  \" E  \000\313
+\declaccent  \" e  \000\353
+\declaccent  \' I  \000\315
+\declaccent  \' i  \000\355
+\declaccent  \' L  \001\071
+\declaccent  \' l  \001\072
+\declaccent  \v L  \001\075
+\declaccent  \v l  \001\076
+\declaccent  \v N  \001\107
+\declaccent  \v n  \001\110
+\declaccent  \^ O  \000\324
+\declaccent  \^ o  \000\364
+\declaccent  \' O  \000\323
+\declaccent  \' o  \000\363
+\declaccent  \" O  \000\326
+\declaccent  \" o  \000\366
+\declaccent  \' R  \001\124
+\declaccent  \' r  \001\125
+\declaccent  \v R  \001\130
+\declaccent  \v r  \001\131
+\declaccent  \v S  \001\140
+\declaccent  \v s  \001\141
+\declaccent  \v T  \001\144
+\declaccent  \v t  \001\145
+\declaccent  \r U  \001\156
+\declaccent  \r u  \001\157
+\declaccent  \' U  \000\332
+\declaccent  \' u  \000\372
+\declaccent  \" U  \000\334
+\declaccent  \" u  \000\374
+\declaccent  \' Y  \000\335
+\declaccent  \' y  \000\375
+\declaccent  \v Z  \001\175
+\declaccent  \v z  \001\176
+
+% dirty trick: LaTeX has a bad conception in \@sect macro: this macro
+% mixes the \ifnum calculation with the real text of the section
+% in one parameter of \addtocontentsline. We need to expand the \ifnum
+% but not expand the other text:
+
+\predef \ifnum #1\fi {\cnvexpandtext{\ifnum#1\fi}}
+
+% -- and --- ligatures:
+
+\predef -{\cnvexec \futurelet \nextchar \testtwodash}
+\gdef\testtwodash {\ifx-\nextchar \expandafter \twodash
+   \else \expandafter \cnvnext \expandafter \onedash \fi}
+\gdef\twodash #1{\futurelet \nextchar \testthreedash}
+\gdef\testthreedash {\ifx-\nextchar \expandafter \threedash
+   \else \expandafter \cnvnext \expandafter \twodash \fi}
+\gdef\threedash #1{\cnvnext \threedash}
+\findef\onedash   {\000\055}  % normal minus
+\findef\twodash   {\000\205}  % endash
+\findef\threedash {\000\204}  % emdash
+
+\egroup
+
+
+
+
+
+
+


Property changes on: trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv-pu.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv-word.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv-word.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv-word.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,154 @@
+% cnv-word.tex --- an example of the usage of cnv.tex: word to word converting
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% April 2005                                                 Petr Olsak
+
+\input cnv
+
+% This file is a complex example of the usage of cnv.tex macro.
+% The macros presented here give the possibility to declare word to word
+% conversion a of given string. Each occurence of declared words will be
+% converted to the declared outputs.
+
+% Double percent: "%%" is a prefix of technical comments. 
+% Please, read the "user" comments (prefixed by one "%") first.
+
+%% \wtest is an internal macro which tests if the given {pattern} matches
+%% the begin of the input stream. If it is true then other \wtests
+%% are ignored and a given {output} is stored to \cnvout. The input
+%% stream is reduced by the pattern. Else input stream is restored 
+%% and the next \wtest is run. We suppose the following parameters:
+%% \wtest{pattern}{output}\wtest{pattern}{output}...\endwtest{letter}input stream\END
+
+%% The main idea of \wtest is to declare the macro \trywtest by:
+%% \def\trywtest #1pattern#2\end and run it by:
+%% \trywtest input-stream\END pattern\end. If #1 is empty then pattern
+%% matches.
+
+\gdef\wtest #1#2#3\endwtest#4#5\END {\def\wout{#2}\def\otherwtests{#3}%
+   \def\inputstream{#5}%
+   \def\trywtest ##1#1##2\end {\def\tmp{##1}%
+       \def\tmpa{#1}\ifx\tmpa\empty \def\tmp{}\fi % empty pattern
+       \ifx\tmp\empty % found!
+          \def\next{\cnvstoree{\expandafter \cnvout \wout}%
+                    \expandafter \cnvcontinue \inputstream\END}%
+       \else          % not found!
+          \def\next{\expandafter\otherwtests\expandafter\endwtest
+                    \expandafter{\expandafter#4\expandafter}% 
+                    \inputstream \END}%
+       \fi \next}
+   \def\cnvcontinue #1{\cnvnext}%
+   \expandafter\trywtest \inputstream \END#1\end
+}
+
+%% \stringdef {<letter><pattern>}  {<output>}
+%% adds to the internal cnv macro \E:<letter>:<table> the next part of
+%% the type "\wtest{pattern}{output}" The \E:<letter>:<table> looks like:
+%% \cnvexec \wtest{pattern1}{output1}\wtest{pattern2}{output2}...\endwtest{<letter>}
+%% The new "\wtest{pattern}{output}" is added at the end of \wtests
+%% string before \endwtest{letter}.
+
+\def\wstringdef #1#2 #3{%
+   \expandafter\ifx \csname E:\string#1:\cnvtable\endcsname \relax
+      \def\tmp{}%
+   \else
+      \expandafter\expandafter\expandafter 
+      \wstoretmp \csname E:\string#1:\cnvtable\endcsname
+   \fi
+   \expandafter \def
+   \csname E:\string#1:\cnvtable \expandafter\endcsname \expandafter 
+       {\expandafter \cnvexec \tmp \wtest{#2}{#3}\endwtest{#1}}
+}
+\def\wstoretmp \cnvexec #1\endwtest#2{\def\tmp{#1}}
+\def\stringdef #1#2{\wstringdef #1 {#2}}
+
+%% If all wtests fail then \endwtest{<letter>} is processed. It adds
+%% the <letter> itself to the \cnvout. 
+
+\def\endwtest#1{\def\tmp{#1}%
+   \ifx\tmp\inSPACE \cnvstoree{\expandafter \cnvout \space}%
+   \else \cnvstore{\cnvout #1}
+   \fi\cnvnext}
+\def\inSPACE{\SPACE}
+
+%% The \wconvert{<input token list>} does the main conversion. It runs
+%% \cnvin twice (with different tables). First conversion converts the
+%% spaces to \SPACE tokens and braces to \BGROUP and \EGROUP tokens. The
+%% reason is that now we can read \SPACE and converted braces to #1 parameter
+%% without changes. This is needed in \wtest macro. No matter that
+%% \SPACE is undefined. We never process it by normal \TeX{} expansion.
+
+%% The second conversion (with table 2) does the real word to word conversion and 
+%% returns the \SPACE \BGROUP and \EGROUP to the desired output. 
+
+\def\wconvert #1{%
+   \def\cnvtable{1}\cnvin{#1}
+   \def\cnvtable{2}%
+   \expandafter \cnvin \expandafter {\cnvout \END}}
+
+%% Table 1: only converts spaces and braces
+
+\def\cnvtable{1}
+\findef { } {\SPACE}
+
+%% Table 2: the \END mark is ignored and \SPACE is converted back to space
+
+\def\cnvtable{2}
+\findef \END    {}
+\findef \SPACE  { }
+
+%% We have to keep the \BGROUP and \EGROUP unchanged. Unfortunately,
+%% the declaration:
+%%
+%% \let\findefmethod=\edef
+%% \findef \BGROUP {{\iffalse}\fi}
+%% \findef \EGROUP {\iffalse{\fi}}
+%%
+%% does not work because the cnv macro fails: the \output macro needs
+%% to be balanced text everytime during conversion process. It means 
+%% that there is impossible to return the input tokens of catcode 1
+%% and 2 to their original maening. We can return them to their original 
+%% meaning only if the \cnvout can be normally expanded. In such a case,
+%% we can write after \wconvert is done:
+%%
+%% \bgroup \def\BGROUP {{\iffalse}\fi} \def\EGROUP {\iffalse{\fi}}
+%%         \xdef \cnvout{\cnvout} \egroup 
+
+% Users can declare the "word to word" conversion here. Each string declared at
+% the left hand side will be converted to the output at the right hand side.
+% If there are more left side strings with the same initial letter then
+% the table is read in this order during the conversion. It means
+% that the last declaration in the following example is irrelevant:
+% if the string begins by "th" then the result of conversion is "TH"
+% and the last declaration of "the" is ignored.
+
+\stringdef  {input}      {output}
+\stringdef  {this}       {THIS}
+\stringdef  {test}       {TEST}
+\stringdef  {th}         {TH}
+\stringdef  {the}        {THE}
+
+% Now, we can try this declaration.
+
+\wconvert {this is a test of the motherboard input}
+\message  {"\cnvout"}
+
+% The result is: "THIS is a TEST of THe moTHerboard output".
+
+% Users have to use the \SPACE or \BGROUP or \EGROUP instead of real tokens
+% of catcode 10, 1 and 2 at the left hand side of the declaration:
+
+\stringdef {\SPACE the}  { !THE!}
+
+\wconvert {this is a test of the motherboard input}
+\message  {output: "\meaning\cnvout"}
+
+\end
+
+
+
+
+
+
+
+
+


Property changes on: trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv-word.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,541 @@
+
+% cnv.tex -- macro for string conversion
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% April 2005                                         Petr Olsak
+
+
+% \cnvin {<input text>} converts <input text> to <output text>.
+% This output is stored in \cnvout macro.
+
+% For more information see the end of this file.
+% The comments after %% (double percent sign) are intended for macro 
+% programmers. See "simple" documentation at the end of this file first.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% we cannot read this macro twice:
+
+\ifx\cnvin\undefined \else \endinput \fi  
+
+%% \predef <token> defines macro \E:<token>:<table>
+%% \findef <token> defines macro \T:<token>:<table>
+
+\def\predef #1{\expandafter \predefmethod \csname E:\string#1:\cnvtable\endcsname}
+\def\findef #1#2{\expandafter \findefmethod \csname T:\string#1:\cnvtable\endcsname {#2}}
+
+%% \cnvaccent <command> <char> {<output>} does following:
+%% 1. it defines \E:<command>:<table> #1 as {\runcnvaccent \A:<command>:#1:<table>}
+%%    (\runcnvaccent implements the test if accented letter is undeclared, see below)
+%% 2. it defines \A:<command>:<char>:<table> as {<output>}
+%% 3. if "<command> <char>" is one <token> after expansion, then 
+%%    it defines \T:<token>:<table> as {<output>}
+       
+\def\cnvaccent #1#2#3{\expandafter \cnvaccentmethod \csname E:\string#1:\cnvtable\endcsname ##1%
+       {\cnvexpand \expandafter \runcnvaccent \csname A:\string#1:\string##1:\cnvtable\endcsname}%
+   \expandafter \findefmethod \csname A:\string#1:\string#2:\cnvtable\endcsname {#3}%
+   \edef \tmp{#1{#2}}%
+   \expandafter \cnvtestaccent \tmp \cnvtestaccent
+   \ifx\nextchar\empty \expandafter \findefmethod \csname T:\tmp:\cnvtable\endcsname {#3}\fi
+}
+\def\cnvtestaccent {\futurelet \nextchar \docnvtestaccent}
+\def\docnvtestaccent #1#2\cnvtestaccent{\ifx\nextchar \bgroup
+   \else \def\nextchar{#2}\fi}
+
+%% main macro:
+
+\long\def\cnvin #1{\def\cnvout{}\cnvnext #1\cnvend}
+
+%% \cnvnext: we test the next token by \futurelet because it may be a space
+%% or a brace:
+
+\def\cnvnext {\futurelet \nextchar \docnvnext}
+\def\docnvnext {\let\next=\cnvtoken
+   \ifx \nextchar\cnvend        \let\next=\relax \fi
+   \ifx \nextchar\spacetoken    \let\next=\cnvspace \fi   
+   \ifx \nextchar\cnvbgroup     \let\next=\cnvopenbrace \fi
+   \ifx \nextchar\cnvegroup     \let\next=\cnvclosebrace \fi
+   \ifx \nextchar\runcnvaccent  \let\next=\relax \fi
+   \ifx \nextchar\cnvexec       \let\next=\relax \fi
+   \ifx \nextchar\cnvexpand     \let\next=\relax \fi
+   \ifx \nextchar\cnvexpandtext \let\next=\relax \fi
+   \next}
+
+%% \cnvend: end of conversion. We define it as \outer because
+%% the parameter of user macros cannot scan this token.
+
+\outer\def\cnvend{\let\nextchar=\relax}
+
+%% \cnvbgroup, \cnvegroup: We suppose that these sequences will have
+%% the constant meaning (user may change the \bgroup, \egroup meaning).
+
+\let\cnvbgroup={  \let\BGROUP={  \let\EGROUP=}  \let\cnvegroup=}
+
+%% \spacetoken is the control sequence equal to space token (catcode 10):
+
+{\def\\{\global\let\spacetoken= }\\ }
+
+%% \cnvtoken: next <token> is scannable in #1 parameter
+%% It expands to \E:<token>:<table> (if defined) else
+%% it stores contents of \T:<token>:<table> to \cnvout (if defined) else
+%% it stores <token> to \cnvout using \cnvdefault macro.
+
+\def\cnvtoken #1{\def\tmpc{#1}\docnvtoken}
+\def\docnvtoken{%   
+   \expandafter \ifx \csname E:\expandafter\string\tmpc:\cnvtable\endcsname \relax 
+      \expandafter \ifx \csname T:\expandafter\string\tmpc:\cnvtable\endcsname \relax 
+         \ifx\tmpc\space \cnvstoree{\expandafter \cnvout \tmpc}%
+         \else \cnvstoreee {\expandafter \expandafter \expandafter \cnvout
+                            \expandafter \cnvdefault \tmpc}%
+         \fi
+      \else
+         \cnvstoreee {\expandafter \expandafter \expandafter 
+             \cnvout \csname T:\expandafter\string\tmpc:\cnvtable\endcsname}%
+      \fi
+      \expandafter \cnvnext
+   \else
+      \expandafter \expandafter \expandafter \cnvnext 
+      \csname E:\expandafter\string\tmpc:\cnvtable\expandafter \endcsname
+   \fi}
+
+%% \cnvspace, \cnvopenbrace, \cnvclosebrace: the next token is unreadable
+%% by #1 macro parameter. We define \tmpc, remove the next token
+%% and run \docnvtoken macro.
+
+\def\cnvspace      {\def\tmpc{ }\afterassignment       \docnvtoken \let\next= }
+\def\cnvopenbrace  {\def\tmpc{\BGROUP}\afterassignment \docnvtoken \let\next= }
+\def\cnvclosebrace {\def\tmpc{\EGROUP}\afterassignment \docnvtoken \let\next= }
+
+%% \runcnvaccent: next token #1 is \A:<command>:<char>:<table>.
+%% It stores the contents of \A:<command>:<char>:<table> to \cnvout
+%% (if defined) else it stores \cnvadefault to \cnvout.
+
+\def\runcnvaccent #1{\ifx #1\relax 
+      \cnvstoree {\expandafter \cnvout \cnvadefault}%
+   \else 
+      \cnvstoree {\expandafter \cnvout #1}%
+   \fi \cnvnext}
+
+%% \cnvexec: we switch off the conversion until \cnvnext
+%% The contents of this macro means: do nothing, but we need
+%% somewhat special contents in order to distinguish it by \ifx.
+
+\long\def\cnvexec {\empty\relax\relax}
+
+%% \cnvexpand, \cnvexpandtext: see the documentation at the end of this file
+
+\def\cnvexpand {\expandafter \cnvnext}
+\def\cnvexpandtext #1{\edef\tmp{#1}\expandafter \cnvnext \tmp}
+
+%% \cnvstoreee: macro appends the desired contens to \cnvout.
+%% We cannot expand the \cnvout by \edef because the expandable tokens can be
+%% included here. So we need to do some \expandafter gymnastics.
+
+\def\cnvstore   {\expandafter \def \expandafter \cnvout \expandafter}
+\def\cnvstoree  {\expandafter \cnvstore  \expandafter}
+\def\cnvstoreee {\expandafter \cnvstoree \expandafter}
+
+%% Implicit values:
+
+\def\cnvcopy{}
+\let\cnvdefault=\cnvcopy
+\def\cnvadefault{?}
+\def\cnvtable{}
+
+\let\predefmethod=\gdef
+\let\findefmethod=\gdef
+\let\cnvaccentmethod=\gdef
+
+\endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+---> english documentation: see the end of this file
+
+Po provedení příkazu \cnvin {<seznam tokenů>}
+je v makru \cnvout ukryt konvertovaný seznam tokenů.
+
+Konverze se provádí bez obvyklé expanze <seznamu tokenů> a je jedno, jaké
+kategorie jednotlivé tokeny mají. Konverze probíhá ve dvou průchodech:
+
+1. Kontrolovaná částečná expanze jednotlivých tokenů. Po jejím
+   provedení se konverze vrací k výsledku expanze a konvertuje jej
+   znovu. Tokeny, které takto expandují, se v konverzní tabulce
+   deklarují pomocí \predef. Tokeny, které nejsou takto deklarovány,
+   při konverzi neexpandují (ačkoli při běžné expanzi třeba expandují).
+2. Finální konverze tokenu: token je konvertován podle deklarace
+   makrem \findef na výstupní posloupnost tokenů, ke kterým se už
+   konverze nevrací.
+
+Tokeny, které podléhají konverzi, mohou mít libovolnou kategorii. Není
+tedy nutné, aby se jednalo o kontrolní sekvence.
+
+Deklarace tokenů pomocí \predef a \findef jsou zcela nezávislé na
+"skutečném významu" tokenu. Jedná-li se o kontrolní sekvenci, bude
+se tato kontrolní sekvence při běžném zpracování \TeX{}em chovat
+běžným způsobem ačkoli má pro konverzi deklarován pomocí \predef nebo
+\findef odlišný význam.
+
+Deklarace pomocí \predef může mít běžné parametry a separátory (#1#2 atd.)
+
+Každý token může mít jen jeden význam deklarovaný pomocí \predef nebo
+\findef. Je-li token deklarován obojím způsobem, má při konverzi přednost
+\predef. Je-li token deklarován opakovaně stejným deklarátorem, platí 
+poslední deklarace.
+
+Pokud se má konvertovat token, který nemá žádnou deklaraci, pak je
+výsledek závislý na hodnotě makra s jedním parametrem \cnvdefault.  
+Implicitně je \cnvdefault definováno tak, že se nedeklarovaný token
+kopíruje beze změny do výstupu. Uživatel má tyto další možnosti:
+
+\def\cnvdefault #1{<out>} % každý nedeklarovaný token se konvertuje
+   			  % na společný <out>
+\def\cnvdefault #1{}      % nedeklarovaný token tiše zmizí
+
+Příklad hypotetické konverzní tabulky:
+
+\predef  \TeX  {TeX}
+\predef  \uv #1{\leva #1\prava}
+\predef  X{AB}
+\findef A {:XX:\TeX:}
+\cnvin{Tady je \uv{\TeX}}
+
+V \cnvout máme text: "Tady je \leva Te:XX:\TeX:B\prava". Obsah \cnvout
+můžeme zkontrolovat pomocí \message{\meaning\cnvout}. 
+
+Jak probíhala konverze:
+
+\uv{\TeX} => \leva \TeX \prava
+\TeX => TeX
+        TeX => TeAB
+               TeAB => Te:XX:\TeX:B  ... a toto už se nekonvertuje.
+
+Protože při \predef je možné deklarovat parametry makra, nesmí za
+deklarovaným tokenem být mezera (viz \predef X{AB} v ukázce).
+Na druhé straně při deklaraci pomocí \findef je možné mezi tokenem a
+tělem makra vložit nepovinnou mezeru.
+
+Při konverzi tokenu deklarovaného pomocí \predef provede \TeX{}
+expanzi tokenu jako by to bylo makro. Provede ale jen první úrovneň
+expanze  (tj. jako při \expandafter, nikoli jako při \edef).
+
+Tokeny kategorie 10, 1 a 2 (mezera a svorky) se zpracovávají mírně
+odlišným způsobem, než ostatní tokeny. To znamená, že jsem trochu
+kecal, když jsem dříve ujistil čtenáře, že konverze je na kategoriích
+zcela nezávislá. Pokud je konverze mezery nedeklarovaná, pak se mezera
+nemění bez závislosti na hodnotě makra \cnvdefault. Konverzi mezery
+můžeme deklarovat například takto:
+
+\findef { } {<výstup pro mezeru>}
+nebo
+\predef { }{<makro pro mezeru>}
+
+Otevírací svorka, která ma kategorii 1, se interně promění v sekvenci 
+\BGROUP a pokud není pro ní deklarována konverze, je zpracována pomocí
+\cnvdefault jako každý jiný nedeklarovaný token. Podobně zavírací
+svorka, která má kategorii 2, se promění v \EGROUP. Konverzi pro tyto
+tokeny můžeme deklarovat jednoduše například:
+
+\findef \BGROUP {<výstup pro otevírací svorku>}
+\findef \EGROUP {<výstup pro zavírací svorku>}
+nebo
+\predef \BGROUP {<makro pro otevírací svorku>}
+\predef \EGROUP {<makro pro zavírací svorku>}
+
+Bohužel, makro \cnvin není implicitně schopno rozlišit mezi skutečnou
+svorkou (kategorie 1 nebo 2) a zástupnou kontrolní sekvencí \bgroup,
+\egroup. Obé je interně převedeno na \BGROUP, \EGROUP a následně
+zpracováno. Chceme-li mezi svorkami a zástupnými kontrolními
+sekvencemi rozlišovat, musíme před konverzí změnit (aspoň přechodně)
+význam \bgroup, \egroup:
+
+{\let\bgroup=\relax \let\egroup=\relax \cnvin{...} ...}
+
+Pro možnost deklarace konverze akcentovaných znaků zapsaných 
+v \TeX{}ové notaci je k dispozici ještě další deklarační makro:
+
+\cnvaccent <sekvence> <znak>  {<výstup>}.
+
+Toto makro zařídí, aby se akcentované řídicí sekvence ve tvaru
+<sekvence> <znak> i ve tvaru <sekvence> {<znak>} konvertovaly na
+odpovídající <výstup>. Navíc se makro \cnvaccent při ukládání
+informací do konverzní tabulky pokusí expandovat "<sekvence> <znak>" a
+je-li výsledkem jediný <token>, provede ještě \findef <token> {<výstup>}. 
+Tím je zaručeno, že na stejný <výstup> se konvertuje i akcentovaný 
+znak, pokud je zapsán na vstupu "přímo" bez použití \TeX{}ové notace.
+
+Jakmile \cnvaccent deklaruje <sekvenci> jako sekvenci pro akcent, pak
+je sledován i výskyt neexistujícího akcentu vytvořeného touto
+<sekvencí>. Takový výskyt se konvertuje na obsah makra bez parametru 
+\cnvadefault. Nechť například:
+
+\cnvaccent \v c {<výstup pro č>}
+
+a nechť chybí deklarace \v u. V takovém případě se \v c konvertuje na
+odpovídající výstyp zatímco \v u se konvertuje na obsah makra
+\cnvadefault. Implicitně je \def\cnvadefault{?}.
+
+Příkazy \predef, \findef a \cnvaccent interně definují výsledek
+konverze pomocí \gdef. Pokud chceme použít jinou metodu, můžeme před
+jejich použitím psát například \let\findefmethod=\xdef.
+Tím dosáhneme, že makra ve \findef se před zapamatováním expandují.
+Nebo třeba \let\predefmethod=\def způsobí, že deklarace \predef
+budou lokální vrámci skupiny.
+
+Existují tři příkazy, které mají při konverzi speciální význam:
+\cnvexec, \cnvexpandtext a \cnvexpand.
+
+Příkaz \cnvexec způsobí provedení následujících příkazů expand procesorem i 
+hlavním procesorem \TeX{}u. Zbytek vstupu pro konverzi je připraven ve
+vstupní frontě. Konverze pokračuje až v okamžiku, kdy je
+zpracován příkaz \cnvnext. Následující token za tímto příkazem podléhá
+konverzi.
+
+Příkaz \cnvexpand <token> způsobí, že <token> bude expandován běžným
+způsobem do první úrovně expanze a výsledek této expanze bude dále
+konvertován. Příkaz je implementován jako \cnvexec\expandafter\cnvnext.
+
+Příkaz \cnvexpandtext {<text>} způsobí, že se <text> zcela expanduje běžným
+způsobem (jako při \edef) a pak se na takto expandovaný <text> provede
+konverze.
+
+Při načítání konverzní tabulky musí být obsah makra \cnvtable stejný
+jako při jejím použití v době konverze příkazem \cnvin. Změnou makra
+\cnvtable můžeme deklarovat více nezávislých tabulek a pak mezi nimi 
+v době konverze přepínat. Implicitní hodnota makra \cnvtable je prázdné
+makro. 
+
+
+PŘÍKLADY
+--------
+
+V souboru cnv-pu.tex je deklarována konverzní tabulka, pomocí níž je
+možné konvertovat texty do PDF záložek v UNICODE. Výhodou tohoto
+řešení je, že nedochází k expanzi textu a že je možno nastavit pro
+konverzi jakýkoli znak, ačkoli tyto znaky nejsou aktivní.
+
+V rámci konverzí zdrojového textu TeXu můžeme narazit na problém
+obvyklé TeXové ligatury -- a ---, kterou bychom chtěli konvertovat na
+odpovídající výstup. Toto můžeme provést následujícím makrem:
+
+\predef -{\cnvexec \futurelet \nextchar \testtwodash}
+\def\testtwodash {\ifx-\nextchar \expandafter \twodash
+   \else \expandafter \cnvnext \expandafter \onedash \fi}
+\def\twodash #1{\futurelet \nextchar \testthreedash}
+\def\testthreedash {\ifx-\nextchar \expandafter \threedash
+   \else \expandafter \cnvnext \expandafter \twodash \fi}
+\def\threedash #1{\cnvnext \threedash}
+\findef\onedash   {<simple minus>}
+\findef\twodash   {<en-dash>}
+\findef\threedash {<em-dash>}
+
+Sofistikovanější příklad na konverzi celých úseků slov na jiný výstup
+(tj. nejen jednotlivých znaků) je uveden v souboru cnv-word.tex.
+Za použití maker z tohoto příkladu pak problém ligatur -- a ---
+lze deklarovat jednoduše:
+
+\stringdef  {---} {<em-dash>}
+\stringdef  {--}  {<en-dash>}
+\stringdef  {-}   {<simple minus>}
+
+=======================================================================
+English documentation:
+
+
+After applying \cnvin{<list of tokens>} the converted list of tokens is
+saved in \cnvout macro.
+
+The conversion is done without the standard expansion of <list of tokens> 
+and is independet of catcodes of converted tokens.
+The conversion process is done in two steps:
+
+1. Controlled partial expansion of tokens. The conversion process is
+   returned back to the result of this expansion and converts it once
+   more.  Only tokens declared by \predef in the conversion table are
+   expanded this way, other tokens not defined this way are not
+   expanded (even if these tokens are expandable in the normal \TeX{}
+   meaning).
+2. Final conversion of token: token is converted to the output string
+   of tokens following to the declaration by \findef macro. The
+   conversion process does not return to this output anymore.
+
+The tokens subject to conversion can have an arbitrary catcode. Not only control
+sequences can be converted.
+
+The declarations of tokens by \predef and \findef are quite
+independent of the normal meaning of these tokens. It means that in case of
+control sequences these sequences will behave during the usual processing
+by \TeX{} in a usual way although for the purpose of conversion their meaning
+can be changed using \predef or \findef.
+
+You can use normal parameters and separators (#1#2 etc.) when \predef
+is used. 
+
+Each token can have only one meaning declared by \predef or \postdef.
+It the token is declared by boths declarators, then \predef is
+preferred. If the token is declared by the same declarator twice (or
+more times), then the last declaration is valid.
+
+If a token is to be converted which is not declared (by \predef nor
+\findef), then the conversion process does the default conversion
+which is determined by \cnvdefault macro (with one parameter: it is
+the coverted token).  By default the token is simply copied to the
+oputput but you can redefine the \cnvdefault macro in the following
+way:
+
+\def\cnvdefault #1{<out>} % each undeclared token is converted to the
+                          % common <out> 
+\def\cnvdefault #1{}      % undeclared token is silently ignored
+
+Now, the simple hypothetic example follows:
+
+\predef  \TeX  {TeX}
+\predef  \uv #1{\leva #1\prava}
+\predef  X{AB}
+\findef A {:XX:\TeX:}
+\cnvin{This is \uv{\TeX}}
+
+The text "This is \leva Te:XX:\TeX:B\prava" is stored in \cnvout after
+\cnvin command is processed.  The contents of \cnvout can be checked
+with \message{\meaning\cnvout}.
+
+The explanation of the conversion in this example:
+
+\uv{\TeX} => \leva \TeX \prava
+\TeX => TeX
+        TeX => TeAB
+               TeAB => Te:XX:\TeX:B  ... and this is kept untouched.
+
+As parameters can be used with \predef declaration you must not
+write redundant space after the declared token (see \predef X{AB}).
+On the other hand, the optional space is allowed between the token
+and the body of the macro in \findef declaration. 
+
+During conversion process \TeX{} treats the token declared with
+\predef as a real macro. Only first level of expansion is done before
+conversion process returns back to expanded material (similar to
+\expandafter primitive, not \edef).
+
+The tokens of catcode 10, 1 and 2 (space and braces) are processed in
+a slightly different way. It means that a small lie was told when the
+catcode independency of the conversion process mentioned above had
+been declared. If space conversion is not declared, then it is copied
+without conversion and without dependency on \cnvdefault macro. You
+can declare the conversion of the space e.g. as follows:
+
+\findef { } {<output for space>}
+or
+\predef { }{<macro for space>}
+
+Opening brace with catcode 1 is changed to a control sequence \BGROUP
+internally. If this control sequence is not declared, then it is
+processed by \cnvdefault as any other undeclared token. Similarly,
+closing brace with catcode 2 is changed by \EGROUP during conversion
+process. We can declare the conversion rules for these tokens by:
+
+\findef \BGROUP {<output for open brace>}
+\findef \EGROUP {<output for close brace>}
+or
+\predef \BGROUP {<macro for open brace>}
+\predef \EGROUP {<makcro for close brace>}
+
+Unfortunately, macro \cnvin cannot implicitely distinguish between a
+real brace of catcode 1 or 2 and an alternate control sequence \bgroup
+or \egroup.  Both are converted internally to \BGROUP, \EGROUP and
+processed in the same way. If you need to distinguish between them,
+then you need to set (locally) another meaning to \bgroup, \egroup
+before \cnvin is invoked:
+
+{\let\bgroup=\relax \let\egroup=\relax \cnvin{...} ...}
+
+You can declare the conversion of accented letters written by standard
+\TeX{} sequences. To do this, you can use the declaration macro:
+
+\cnvaccent <sequence> <char>  {<output>}.
+
+This macro arranges that the accented control sequences in the form
+<sequence> <char> or <sequence> {<char>} will be converted to
+<output>.  Moreover, when storing an information to a conversion table
+the \cnvaccent macro tries to expand the "<sequence> <char>" by normal
+\TeX{} rules. If the output of this expansion is one <token>, then
+\cnvaccent does internally more work: \findef <token> {<output>}.
+This guarantees that even an accented character will be converted
+to the same <output> if it is written in the input "directly" without 
+\TeX{} notation.
+
+When \cnvaccent declares <sequence> as a sequnce for an accent, then the
+occurence of a non-existing accent created with this <sequence> is watched.
+Such an occurence is converted to the contents of the macro \cnvadefault
+without parameters.
+For example:
+
+\cnvaccent \v c {<output for ccaron>}
+
+and suppose that \v u is not declared. In such a case the \v c is
+converted to the corresponding output, but \v u is converted to the contents of
+\cnvadefault macro. By default there is \def\cnvadefault{?}.
+
+The commands  \predef, \findef and \cnvaccent define internally the result
+of the conversion using \gdef primitive If we want to use another method,
+we can put e.g. \let\findefmethod=\xdef before the use of macros.
+This causes that all bodies of \predef will be expanded before saving them
+to the conversion table. Similarly \let\predefmethod=\def results in \predef
+will work only locally.
+
+There are three commands with special meaning in conversion process:
+\cnvexec, \cnvexpandtext and \cnvexpand.
+
+The \cnvexec command causes the following command is processed both by
+\TeX{} expand processor and main processor.
+The rest of an unconverted input is ready in the input stream.
+The conversion process continues at the moment the \cnvnext command is processed.
+The following token behind this command is submitted to conversion.
+
+The \cnvexpand <token> command expands <token> at first level of
+expansion and the expanded result is converted again. The \cnvexpand
+is implemented by \cnvexec\expandafter\cnvnext.
+
+The \cnvexpandtext {<text>} expands <text> totally in a usual way
+(like by \edef) and the result of this expansion is converted again.
+
+The contents of \cnvtable macro has to be the same both during the declaration
+of the conversion table (by \predef, etc.) and during the conversion process
+itself (by \cnvin). You can change the contents of \cnvtable macro if
+you need to declare more independent conversion tables. Then you can
+switch among these tables before using \cnvin command.
+By default there is \def\cnvtable{}.
+
+
+EXAMPLES
+--------
+
+There is an example in cnv-pu.tex file. The conversion table which
+declares the conversion from TeX text to UNICODE text used in PDF
+outlines is declared here. The advantage of this solution is that we
+need not to expand the converted text and we can declare the
+conversion for each character, not only for active characters. 
+
+There is a common problem with the conversion of TeX ligatures -- and
+--- to the desired output. This task can be solved by the following
+macro:
+
+\predef -{\cnvexec \futurelet \nextchar \testtwodash}
+\def\testtwodash {\ifx-\nextchar \expandafter \twodash
+   \else \expandafter \cnvnext \expandafter \onedash \fi}
+\def\twodash #1{\futurelet \nextchar \testthreedash}
+\def\testthreedash {\ifx-\nextchar \expandafter \threedash
+   \else \expandafter \cnvnext \expandafter \twodash \fi}
+\def\threedash #1{\cnvnext \threedash}
+\findef\onedash   {<simple minus>}
+\findef\twodash   {<en-dash>}
+\findef\threedash {<em-dash>}
+
+A more sophisticated example of word to word conversion (not only
+single letters) is presented in cnv-word.tex file. If you use macros
+from this example, then you can solve the problem of -- and ---
+ligatures simply:
+
+\stringdef  {---} {<em-dash>}
+\stringdef  {--}  {<en-dash>}
+\stringdef  {-}   {<simple minus>}
+
+=======================================================


Property changes on: trunk/Master/texmf-dist/doc/generic/olsak-misc/cnv.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/olsak-misc/eparam.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/olsak-misc/eparam.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/olsak-misc/eparam.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,177 @@
+% eparam.tex
+%%%%%%%%%%%%%%%%%%%%
+% Petr Olsak 2014
+
+% This macro enables full expansion during parameter scanning. 
+% The usage:
+% \def\macro#1{macro with #1}
+% \eparam\macro prameter-text
+%
+% The delimiters for the parameter are {...} or \start...\stop or
+% combination {...\stop, \start...}, where \start is declared by \eparamopen
+% and \stop is declared by \eparamclose. See more information at the end of
+% this file or at
+% http://tex.stackexchange.com/questions/196776/arguments-possibly-delimited-by-bgroup-and-egroup
+
+
+\def\tmp{% all expandable primitives (only from classical TeX, you can add others):
+  \botmark \csname \else \endcsname \endinput \expandafter \fi \firstmark \fontname
+  \if \ifcase \ifcat \ifdim \ifeof \iffalse \ifhbox \ifhmode \ifinner 
+  \ifmmode \ifnum \ifodd \iftrue \ifvbox \ifvmode \ifvoid \ifx
+  \input \jobname \meaning \noexpand \number \or \romannumeral
+  \splitbotmark \splitfirstmark \string \the \topmark
+}
+\def\skipmm#1->{}  \def\showmm#1->{#1}
+\edef\textmm{\expandafter\showmm\meaning\empty}
+\edef\expandprimitives{\expandafter\skipmm\meaning\tmp}
+
+\def\isinlist#1#2#3{% from opmac.tex
+   \def\tmp##1#2##2\end{\def\tmp{##2}%
+   \ifx\tmp\empty \csname iffalse\expandafter\endcsname \else
+                  \csname iftrue\expandafter\endcsname \fi}% end of \def\tmp
+   \expandafter\tmp#1\endlistsep#2\end
+}
+\def\isexpanded#1#2{% \isexpanded X\iftrue the X is expandable primitive or macro\fi
+   \edef\tmpb{\meaning#1\space}%
+   \expandafter\isinlist\expandafter\tmpb\expandafter{\textmm}%
+   \iftrue \csname iftrue\expandafter\endcsname\else
+      \def\nexxt{\expandafter\isinlist\expandafter\expandprimitives\expandafter{\tmpb}.}%
+      \expandafter\nexxt\fi
+}
+\def\eparamopen#1{\def\eparamopenA{\let#1=\eparamopenA}}
+\def\eparamclose#1{\def\eparamcloseA{\let#1=\eparamcloseA}}
+
+\newtoks\eparamT
+\def\eparam#1{\begingroup
+  \toks0={#1}\let\bgroup=\relax \let\egroup=\relax
+  \let\ifIamInGroup=\iffalse
+  \ifx\eparamopenA\undefined \def\eparamopenA{^\eparam^}\else \eparamopenA\fi
+  \ifx\eparamcloseA\undefined \def\eparamcloseA{^\eparam^}\else \eparamcloseA\fi
+  \eparamT={}\eparamA
+}
+\def\eparamA{\futurelet\tmpc\eparamB}
+\def\eparamB{\let\next=\eparamD
+   \isexpanded\tmpc\iftrue \def\next{\expandafter\eparamA}\fi
+   \ifx\tmpc\bgroupOri \let\next=\eparamC \let\nexxt=\eparamD \fi
+   \ifx\tmpc\eparamopenA  \let\next=\eparamC \let\nexxt=\eparamD \fi
+   \next
+}
+\def\eparamC{\afterassignment\nexxt \let\next= }
+\def\eparamD{\futurelet\tmpc\eparamE}
+\def\eparamE{\let\next=\eparamN
+   \isexpanded\tmpc\iftrue \def\next{\expandafter\eparamD}\fi
+   \ifx\tmpc\spacetoken \let\next=\eparamC \let\nexxt=\eparamD \eparamX{ }\fi
+   \ifx\tmpc\eparamcloseA \ifIamInGroup \let\next=\eparamN
+                          \else \let\next=\eparamC \let\nexxt=\eparamF \fi\fi
+   \ifx\tmpc\egroupOri \let\next=\eparamC \let\nexxt=\eparamF \fi
+   \ifx\tmpc\bgroupOri \let\next=\eparamC \let\nexxt=\eparamG \fi
+   \next
+}
+\def\eparamN#1{\eparamX#1\eparamD}
+\def\eparamG{\begingroup \let\ifIamInGroup=\iftrue \eparamT={}\eparamD}
+\def\eparamF{\ifIamInGroup \let\next=\eparamY \else \let\next=\eparamZ \fi \next}
+\long\def\eparamX#1{\eparamT\expandafter{\the\eparamT#1}}
+\def\eparamY{\expandafter\endgroup
+   \expandafter\eparamT\expandafter\expandafter\expandafter
+      {\expandafter\the\expandafter\eparamT\expandafter{\the\eparamT}}%
+   \eparamD
+}
+\def\eparamZ{\expandafter\endgroup\the\toks0\expandafter{\the\eparamT}}
+
+\let\bgroupOri=\bgroup
+\let\egroupOri=\egroup
+\def\tmp/{\let\spacetoken= }\tmp/ %
+
+\endinput
+
+tests:
+
+\def\macro#1{\toks0={#1}\message{the parameter is "\the\toks0"}}
+
+\eparam\macro {abc}  % the parameter is "abc"
+
+\def\x{ww}
+\eparam\macro {ab\x c}          % the parameter is "abwwc"
+\eparam\macro {a b\the\pageno c} % the parameter is "ab1c"
+\eparam\macro {ab\ifx\x\x true\else false\fi c}        % the parameter is "abtruec"
+\eparam\macro {ab\ifnum\folio=1 true\else false\fi c}  % the parameter is "abtruec"
+\eparam\macro {ab\ifcase\pageno oo\or one\or two\fi c} % the parameter is "abonec"
+
+\eparamopen\start \eparamclose\stop
+
+\eparam\macro {abc\stop        % the parameter is "abc"
+\eparam\macro \start abc\stop  % the parameter is "abc"
+\eparam\macro \start abc}      % the parameter is "abc"
+
+\eparam\macro abc}     % the parameter is "abc"
+\eparam\macro abc\stop % the parameter is "abc"
+
+\eparam\macro \start abc{uf\stop fu}ee\stop  % the parameter is "abc{uf\stop fu}ee"
+
+\def\y{end\stop}
+
+\eparam\macro {a\x\y   % the parameter is "awwend"
+
+\eparam {\def\aha#1#2}\start params: #1 and #2\stop
+
+\eparamopen\bgroup \eparamclose\egroup
+\eparam {\def\foo#1#2}\bgroup Something with #1 and #2\egroup
+
+\message{\meaning\foo}
+
+\end
+
+The question gives me a sense if it is read from its end: *give
+the possibility of creating a macro which expands its parameter during
+parameter scanning*. Then the variants `}` or `\egroup` as a delimiter of the
+parameter is serviceable.
+
+I've created the `\eparam` macro with this syntax:
+
+    \def\mymacro #1{the #1 parameter is declared as undelimited}
+    ...
+    \eparam\mymacro parameter-text
+
+The `parameter-text` is equal to `real-parameter-text` enclosed by braces or  
+by another control sequences declared by `\eparamopen` and \eparamclose`.
+Example:
+
+    \eparamopen\start  \eparamclose\stop
+    \eparam\mymacro {real-parameter-text}
+    \eparam\mymacro \start real-parameter-text\stop
+    \eparam\mymacro \start real-parameter-text}
+    \eparam\mymacro {real-parameter-text\stop
+
+The main point of the `\eparam` is that this is **Expanded Parameter**. 
+The `real-parameter-text` is expanded during parameter scanning like
+by `\edef`. This means that all expandable primitives and macros are
+expanded during the parameter is read. Unexpandable primitives does nothing
+in this time (like `\edef`) so you can do reassigmnent of registers/macros
+inside this parameter but without any effect for parameter scaninng.
+This is main difference between this case and the `\hbox {...}` primitive
+syntax.
+
+There is one difference between `\edef` and parameter scanning:
+undefined control sequences do nothing (like unexpandable primitives)
+during parameter scanning. The error can be occur only when the parameter is
+used (no during parameter scanning).
+
+The separator declared by `\eparamclose` can be hidden in a macro. Example:
+
+    \def\x{-text\stop}
+    \eparam\mymacro {real-parameter\x
+
+The first open brace or delimiter given by `\eparamopen` is optional. I.e.
+you can omit it:
+
+    \eparam\mymacro real-parameter-text\stop
+
+The parameter is always balanced. This means that the delimiter declared by
+`\eparamclose` does no effect inside inner braces pair (like normal
+parameter scanning):
+
+    \eparam \start text{inside \stop braces}text\stop
+    % the parameter is: "text{inside \stop braces}text"
+
+The implementation (or wipet's sorcery :) and little tests follow.
+ 
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/doc/generic/olsak-misc/eparam.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/olsak-misc/fun-coffee.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/olsak-misc/fun-coffee.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/olsak-misc/fun-coffee.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,4941 @@
+%%%   fun-coffee.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Source from Hanno Rein converted by Petr Olsak for direct \pdfliteral
+% April 2015
+
+% This macro file provides an essential feature to TeX that has been missing
+% for too long. It adds a coffee stain to your documents. A lot of time can
+% be saved by printing stains directly on the page rather than adding it
+% manually.
+
+% See more information at http://hanno-rein.de/archives/349
+
+% Usage. After \input fun-coffee you can put the image by
+% \coffeeA or \coffeeB or \coffeeC or \coffeeD.
+
+% You can set the size of images by \def\coffeescale{factor}, for example:
+% \def\coffeescale{.5}\coffeeA. The default factor is 1.
+
+% Technical note: direct \pdfliteral works in pdfTeX with PDF output or in
+% LuaTeX. If you need to use it in XeTeX then you can \input opmac or you
+% can define: \def\pdfliteral#1{\special{pdf:literal #1}}. No special
+% packages are needed. No PSTricks, no TikZ, etc.
+
+\def\coffeescale{1}
+
+\def\coffeeA{\pdfliteral{%
+   q \coffeescale\space 0 0 \coffeescale\space 0 0 cm
+   .5 0 0 .5 0 -440 cm 
+   0.80 0.68 0.60 rg
+   375 410 m
+   373 411 368 413 364 415 c
+   350 421 356 424 385 426 c
+   408 427 410 428 420 434 c
+   425 438 432 442 435 443 c
+   438 444 445 447 450 451 c
+   456 454 463 457 466 458 c
+   474 460 495 476 516 497 c
+   526 507 533 517 538 527 c
+   542 535 547 544 549 546 c
+   559 557 563 567 563 581 c
+   563 593 564 596 570 601 c
+   578 610 583 611 588 606 c
+   594 601 593 589 586 562 c
+   574 521 559 496 525 461 c
+   499 434 478 422 443 413 c
+   427 409 379 407 375 410 c
+   h f
+   142 605 m
+   138 609 138 614 139 642 c
+   140 674 142 686 152 707 c
+   154 712 158 722 160 728 c
+   165 746 174 762 179 763 c
+   181 764 183 768 184 771 c
+   186 778 213 807 230 818 c
+   261 838 278 848 297 853 c
+   332 864 364 866 401 860 c
+   424 857 438 852 462 841 c
+   496 824 518 810 530 796 c
+   533 792 541 783 549 776 c
+   564 760 572 747 575 730 c
+   577 724 580 714 583 708 c
+   591 692 594 677 594 658 c
+   594 643 593 640 588 631 c
+   581 619 577 618 577 627 c
+   577 632 576 639 574 644 c
+   573 650 569 662 566 671 c
+   564 681 561 690 560 692 c
+   559 694 558 698 558 700 c
+   558 702 553 710 547 716 c
+   540 724 535 732 533 739 c
+   531 746 527 754 523 757 c
+   520 761 517 764 517 766 c
+   517 769 490 795 478 803 c
+   450 822 415 832 368 835 c
+   336 836 330 836 302 828 c
+   286 823 251 806 243 799 c
+   239 796 231 789 225 784 c
+   219 779 212 772 208 769 c
+   204 765 199 762 196 762 c
+   189 761 189 761 193 756 c
+   196 753 196 752 190 744 c
+   175 724 167 699 164 664 c
+   163 649 161 635 160 632 c
+   158 628 158 622 159 616 c
+   162 604 159 599 151 599 c
+   147 599 144 601 142 605 c
+   h f
+   533 839 m
+   532 841 532 843 534 845 c
+   537 848 543 845 542 841 c
+   541 836 534 834 533 839 c
+   h f
+   599 856 m
+   600 861 604 861 605 857 c
+   605 854 604 853 602 853 c
+   600 853 599 854 599 856 c
+   h f
+   0.77 0.58 0.43 rg
+   387 409 m
+   378 410 366 416 365 419 c
+   365 421 379 424 401 426 c
+   408 426 413 428 419 433 c
+   424 437 432 441 437 443 c
+   442 445 448 448 450 449 c
+   452 451 459 454 465 456 c
+   486 464 528 502 538 525 c
+   542 532 549 544 554 552 c
+   563 566 564 568 564 580 c
+   564 592 565 594 572 600 c
+   580 609 584 609 589 603 c
+   593 599 593 598 590 584 c
+   580 533 560 496 522 459 c
+   499 437 480 425 453 417 c
+   434 412 403 408 387 409 c
+   h f
+   141 609 m
+   138 613 138 617 139 632 c
+   140 642 141 655 141 662 c
+   142 677 145 688 156 711 c
+   161 721 164 730 164 733 c
+   164 736 165 739 166 740 c
+   167 741 169 746 170 750 c
+   174 761 177 764 185 759 c
+   189 758 192 755 193 754 c
+   194 753 190 746 185 739 c
+   179 732 175 724 175 722 c
+   175 720 173 715 172 712 c
+   167 704 165 689 162 660 c
+   161 647 159 634 158 630 c
+   157 627 157 620 158 615 c
+   160 605 159 603 151 603 c
+   147 603 144 605 141 609 c
+   h f
+   580 638 m
+   577 641 573 653 568 671 c
+   565 678 562 688 561 693 c
+   559 697 558 703 558 704 c
+   558 706 553 711 548 716 c
+   541 723 538 729 535 738 c
+   527 765 486 805 449 820 c
+   415 834 352 841 323 835 c
+   300 829 285 824 268 815 c
+   260 811 252 808 251 808 c
+   249 808 247 806 246 804 c
+   244 802 237 795 229 789 c
+   221 783 212 775 208 772 c
+   201 764 194 763 189 769 c
+   186 773 186 773 196 786 c
+   207 798 227 816 231 816 c
+   232 816 236 820 241 823 c
+   246 827 253 832 257 834 c
+   261 835 267 839 271 841 c
+   288 853 327 861 362 862 c
+   406 862 429 856 472 834 c
+   505 817 517 808 543 781 c
+   562 760 575 739 575 728 c
+   575 725 578 716 582 707 c
+   590 690 594 672 593 660 c
+   593 656 593 650 592 648 c
+   592 642 587 636 584 636 c
+   583 636 581 637 580 638 c
+   h f
+   534 841 m
+   534 843 536 844 537 844 c
+   539 844 541 843 541 841 c
+   541 839 539 838 537 838 c
+   536 838 534 839 534 841 c
+   h f
+   0.71 0.54 0.40 rg
+   384 411 m
+   381 412 376 414 373 416 c
+   367 420 l
+   373 420 l
+   375 420 380 419 382 417 c
+   385 414 386 414 386 418 c
+   386 422 393 425 404 425 c
+   407 425 414 428 419 432 c
+   425 436 433 441 437 442 c
+   441 444 448 447 452 450 c
+   456 453 461 455 463 455 c
+   467 455 479 461 490 471 c
+   495 476 505 483 510 488 c
+   523 499 533 512 539 527 c
+   542 533 547 541 550 544 c
+   559 556 564 567 565 582 c
+   566 593 566 596 572 600 c
+   575 603 580 605 583 605 c
+   592 605 593 599 588 578 c
+   577 529 560 500 522 460 c
+   491 429 457 413 410 411 c
+   399 411 386 411 384 411 c
+   h f
+   142 609 m
+   139 613 139 642 143 649 c
+   145 652 145 654 143 658 c
+   141 662 141 664 142 667 c
+   144 670 145 674 145 677 c
+   145 680 146 683 147 684 c
+   148 685 149 689 149 692 c
+   150 696 151 697 157 698 c
+   164 698 164 698 164 691 c
+   164 677 159 639 156 631 c
+   155 626 154 622 156 620 c
+   157 619 158 615 158 611 c
+   158 606 157 605 151 605 c
+   148 605 144 607 142 609 c
+   h f
+   579 645 m
+   575 649 573 654 573 655 c
+   573 658 571 666 561 697 c
+   559 703 554 711 549 716 c
+   540 726 534 736 534 743 c
+   534 745 531 751 527 756 c
+   522 760 519 765 519 766 c
+   519 771 492 797 478 805 c
+   443 827 410 836 358 836 c
+   318 837 305 834 275 820 c
+   267 815 256 811 252 809 c
+   247 807 244 805 244 804 c
+   244 801 218 781 212 779 c
+   210 778 206 775 204 772 c
+   200 766 194 765 190 770 c
+   187 773 190 780 194 782 c
+   195 783 198 786 201 790 c
+   209 799 229 816 233 816 c
+   234 816 238 819 241 822 c
+   244 825 251 830 257 833 c
+   263 836 271 840 274 842 c
+   288 852 334 861 364 861 c
+   400 861 428 855 463 838 c
+   498 821 514 810 539 783 c
+   562 758 575 738 575 726 c
+   575 723 578 716 581 710 c
+   593 686 596 652 588 642 c
+   584 637 l
+   579 645 l
+   h f
+   166 733 m
+   166 738 167 739 171 739 c
+   178 739 180 737 176 732 c
+   171 726 166 727 166 733 c
+   h f
+   176 744 m
+   171 747 171 749 173 754 c
+   175 761 180 762 187 757 c
+   193 753 193 749 188 745 c
+   183 740 182 740 176 744 c
+   h f
+   534 841 m
+   534 843 536 844 537 844 c
+   539 844 541 843 541 841 c
+   541 839 539 838 537 838 c
+   536 838 534 839 534 841 c
+   h f
+   0.67 0.44 0.30 rg
+   391 411 m
+   386 413 387 420 392 420 c
+   394 420 397 421 397 423 c
+   398 424 402 425 406 425 c
+   410 425 414 426 417 429 c
+   420 433 452 450 470 457 c
+   480 460 518 493 527 505 c
+   532 511 538 521 540 527 c
+   543 532 548 540 551 545 c
+   563 560 567 569 566 578 c
+   564 589 568 598 576 602 c
+   593 612 594 593 579 547 c
+   570 519 549 488 521 459 c
+   498 436 471 421 438 414 c
+   426 412 394 410 391 411 c
+   h f
+   142 610 m
+   139 614 141 643 144 648 c
+   147 652 147 654 144 658 c
+   141 663 141 664 143 667 c
+   144 669 145 672 145 675 c
+   145 677 146 681 148 683 c
+   150 686 151 690 151 692 c
+   151 695 153 696 157 695 c
+   163 695 163 694 163 685 c
+   162 661 160 642 157 633 c
+   155 628 154 623 154 621 c
+   155 619 156 615 156 612 c
+   158 608 157 608 150 608 c
+   146 608 142 609 142 610 c
+   h f
+   578 649 m
+   574 653 571 662 566 683 c
+   565 688 563 694 562 695 c
+   561 696 560 699 560 702 c
+   560 705 556 711 549 717 c
+   542 725 538 730 536 739 c
+   534 745 530 753 526 758 c
+   522 763 519 767 519 768 c
+   519 773 497 793 481 804 c
+   463 816 443 825 423 830 c
+   398 837 340 841 324 837 c
+   298 830 281 824 265 815 c
+   262 813 257 812 254 812 c
+   249 812 247 810 243 804 c
+   241 800 238 797 236 797 c
+   235 797 230 793 226 789 c
+   221 784 218 782 214 783 c
+   211 783 207 782 203 777 c
+   199 774 196 771 194 771 c
+   189 771 190 776 196 783 c
+   199 786 206 793 210 798 c
+   215 803 223 810 230 813 c
+   236 816 243 821 244 823 c
+   246 826 251 829 256 831 c
+   260 833 267 836 271 839 c
+   284 849 335 861 362 861 c
+   399 861 435 852 471 833 c
+   504 816 517 806 541 781 c
+   562 758 573 741 573 729 c
+   573 727 576 719 579 711 c
+   587 694 592 676 592 663 c
+   592 645 586 640 578 649 c
+   h f
+   167 732 m
+   167 734 167 735 169 736 c
+   174 737 176 736 174 733 c
+   172 730 169 730 167 732 c
+   h f
+   176 746 m
+   172 750 172 752 176 757 c
+   178 761 179 761 185 757 c
+   193 753 194 752 188 747 c
+   183 742 181 742 176 746 c
+   h f
+   535 840 m
+   534 841 535 842 537 842 c
+   539 842 540 841 540 840 c
+   539 839 538 838 537 838 c
+   537 838 536 839 535 840 c
+   h f
+   0.63 0.33 0.10 rg
+   391 414 m
+   390 415 391 416 393 416 c
+   395 416 397 418 398 419 c
+   399 421 402 423 406 423 c
+   411 423 415 424 419 429 c
+   422 433 430 437 435 439 c
+   440 441 447 444 450 447 c
+   453 449 461 452 468 455 c
+   475 457 481 461 483 462 c
+   484 464 493 472 503 479 c
+   522 495 534 509 541 526 c
+   544 533 549 541 552 544 c
+   563 558 566 566 566 580 c
+   566 591 567 593 572 598 c
+   579 604 584 605 588 600 c
+   591 597 590 592 584 569 c
+   573 526 556 497 520 460 c
+   501 441 484 430 459 421 c
+   436 413 394 409 391 414 c
+   h f
+   142 619 m
+   141 624 141 629 142 631 c
+   143 633 144 637 143 640 c
+   142 644 143 647 147 649 c
+   152 653 l
+   147 658 l
+   141 665 143 668 153 668 c
+   160 668 l
+   159 654 l
+   158 647 156 636 154 631 c
+   151 623 151 620 153 618 c
+   157 613 156 610 149 610 c
+   144 610 143 611 142 619 c
+   h f
+   578 651 m
+   577 653 575 656 574 659 c
+   571 674 565 693 563 697 c
+   561 700 560 704 560 706 c
+   560 708 556 713 552 717 c
+   544 723 538 734 535 745 c
+   535 748 532 753 529 756 c
+   527 759 522 766 518 772 c
+   515 777 511 783 509 784 c
+   507 786 504 789 504 791 c
+   503 793 499 796 494 798 c
+   489 801 480 806 474 810 c
+   458 820 442 826 421 832 c
+   386 841 329 843 311 836 c
+   309 835 304 833 301 832 c
+   298 830 293 829 290 829 c
+   287 829 284 828 283 827 c
+   282 825 279 825 276 826 c
+   271 827 269 826 269 823 c
+   269 817 262 814 254 815 c
+   248 815 247 816 247 821 c
+   247 825 249 827 257 830 c
+   263 832 269 835 272 838 c
+   274 840 279 843 282 844 c
+   285 845 291 847 295 848 c
+   333 862 390 863 429 850 c
+   447 845 486 825 503 814 c
+   522 801 559 761 567 745 c
+   570 737 573 729 573 727 c
+   573 724 576 714 581 704 c
+   588 688 589 684 589 668 c
+   589 651 589 650 584 649 c
+   582 649 579 650 578 651 c
+   h f
+   151 674 m
+   146 675 146 679 150 683 c
+   152 684 153 687 153 690 c
+   153 695 159 695 161 688 c
+   164 676 160 671 151 674 c
+   h f
+   179 748 m
+   175 750 174 755 177 757 c
+   179 758 190 754 190 752 c
+   190 750 185 745 184 745 c
+   183 745 181 746 179 748 c
+   h f
+   212 787 m
+   205 790 206 793 214 800 c
+   224 810 231 813 231 809 c
+   231 807 233 805 235 804 c
+   241 803 240 800 233 798 c
+   229 798 226 795 225 793 c
+   223 787 218 784 212 787 c
+   h f
+   237 813 m
+   238 814 240 814 241 813 c
+   242 813 240 812 238 812 c
+   236 812 235 813 237 813 c
+   h f
+   0.57 0.16 0.01 rg
+   403 416 m
+   404 420 411 420 412 417 c
+   412 416 410 415 407 414 c
+   404 414 403 414 403 416 c
+   h f
+   429 418 m
+   435 422 434 425 427 423 c
+   422 422 420 423 420 425 c
+   420 429 433 438 438 438 c
+   441 438 446 440 450 443 c
+   454 446 460 450 464 451 c
+   468 452 478 458 485 464 c
+   492 469 500 474 503 474 c
+   507 474 508 475 508 478 c
+   508 480 511 484 513 486 c
+   518 489 519 489 521 486 c
+   524 483 523 482 520 480 c
+   515 476 517 473 524 472 c
+   528 471 527 469 516 458 c
+   499 441 478 429 454 422 c
+   435 416 422 414 429 418 c
+   h f
+   523 493 m
+   523 494 525 496 526 498 c
+   530 501 533 497 531 494 c
+   529 491 523 491 523 493 c
+   h f
+   550 505 m
+   550 507 548 510 546 512 c
+   543 514 542 513 539 509 c
+   537 507 535 504 534 504 c
+   532 504 533 506 535 508 c
+   537 510 539 516 540 521 c
+   542 526 546 534 550 539 c
+   563 556 568 568 568 581 c
+   568 594 570 598 580 600 c
+   589 602 589 597 582 567 c
+   575 541 567 522 557 507 c
+   552 499 550 498 550 505 c
+   h f
+   144 625 m
+   142 628 144 631 148 631 c
+   152 631 152 628 148 625 c
+   146 623 145 623 144 625 c
+   h f
+   147 643 m
+   147 646 152 649 154 647 c
+   157 644 155 640 151 640 c
+   149 640 147 641 147 643 c
+   h f
+   581 653 m
+   579 654 577 657 577 659 c
+   577 661 576 666 574 669 c
+   572 673 571 680 572 687 c
+   572 695 572 698 570 696 c
+   566 693 562 697 562 703 c
+   562 705 558 711 553 716 c
+   544 725 536 739 536 746 c
+   536 748 533 753 530 757 c
+   527 760 522 767 520 772 c
+   512 792 500 804 489 804 c
+   487 804 486 806 486 808 c
+   486 813 483 815 479 812 c
+   477 810 475 811 470 816 c
+   466 820 462 822 460 821 c
+   458 821 453 822 448 825 c
+   437 831 406 838 384 839 c
+   371 840 369 841 368 844 c
+   366 850 360 852 358 848 c
+   356 846 344 844 329 845 c
+   326 845 319 845 313 845 c
+   305 844 302 845 302 847 c
+   303 848 306 850 309 850 c
+   313 851 321 852 327 854 c
+   342 858 385 858 406 854 c
+   436 849 461 838 465 830 c
+   467 826 468 825 471 827 c
+   476 829 476 829 498 816 c
+   514 806 560 759 565 746 c
+   567 741 570 732 572 725 c
+   574 719 577 708 580 703 c
+   587 690 591 670 589 660 c
+   587 651 586 650 581 653 c
+   h f
+   148 659 m
+   146 662 149 666 153 666 c
+   156 666 158 664 158 661 c
+   158 657 150 655 148 659 c
+   h f
+   155 678 m
+   157 679 158 678 159 678 c
+   160 677 159 677 156 677 c
+   154 677 153 677 155 678 c
+   h f
+   212 791 m
+   208 794 208 795 212 796 c
+   217 798 222 794 219 790 c
+   217 789 215 789 212 791 c
+   h f
+   251 819 m
+   249 822 251 824 256 822 c
+   257 821 258 820 258 818 c
+   256 816 253 816 251 819 c
+   h f
+   275 831 m
+   273 833 274 836 277 836 c
+   279 836 280 834 280 832 c
+   280 829 278 828 275 831 c
+   h f
+   286 836 m
+   283 840 282 841 285 842 c
+   291 846 295 845 295 838 c
+   295 830 292 830 286 836 c
+   h f
+   0.34 0.05 0.01 rg
+   491 455 m
+   482 460 492 471 503 469 c
+   516 466 519 459 508 455 c
+   500 452 495 452 491 455 c
+   h f
+   548 517 m
+   541 520 541 522 548 534 c
+   554 543 561 547 567 544 c
+   570 542 567 526 562 520 c
+   557 515 555 514 548 517 c
+   h f
+   568 564 m
+   571 570 578 570 577 565 c
+   576 563 574 561 571 561 c
+   567 560 566 560 568 564 c
+   h f
+   575 584 m
+   575 588 578 593 581 593 c
+   584 593 584 590 582 585 c
+   581 582 575 580 575 584 c
+   h f
+   581 669 m
+   576 674 575 676 576 683 c
+   578 694 579 696 581 696 c
+   584 696 589 674 588 668 c
+   587 664 587 664 581 669 c
+   h f
+   554 716 m
+   544 726 542 730 537 744 c
+   534 754 530 762 528 764 c
+   526 765 526 767 526 769 c
+   529 773 534 772 535 767 c
+   537 762 545 761 545 765 c
+   545 772 558 760 565 746 c
+   569 739 575 714 575 707 c
+   575 701 565 706 554 716 c
+   h f
+   514 792 m
+   513 793 513 796 513 799 c
+   513 804 513 804 517 800 c
+   519 798 521 795 521 793 c
+   521 790 517 789 514 792 c
+   h f
+   495 811 m
+   493 814 491 816 492 816 c
+   495 816 506 809 506 807 c
+   506 804 500 806 495 811 c
+   h f
+   476 824 m
+   476 826 477 827 479 827 c
+   483 825 483 821 479 821 c
+   478 821 476 822 476 824 c
+   h f
+   445 836 m
+   441 841 443 841 449 837 c
+   451 835 452 834 451 833 c
+   450 832 447 833 445 836 c
+   h f
+   409 845 m
+   409 847 411 849 413 849 c
+   414 849 416 848 416 847 c
+   416 846 414 844 413 843 c
+   411 843 409 843 409 845 c
+   h f
+   Q
+}}
+
+\def\coffeeB{\pdfliteral{%
+   q \coffeescale\space 0 0 \coffeescale\space 0 0 cm
+   .5 0 0 .5 0 -500 cm
+   0.86 0.77 0.70 rg
+   119 537 m
+   108 544 101 556 96.79 573 c
+   94.66 582 93.17 589 93.48 589 c
+   94.91 591 121 563 127 554 c
+   134 543 134 541 130 536 c
+   128 532 127 532 119 537 c
+   h f
+   62.17 668 m
+   57.50 672 55.08 705 58.27 720 c
+   59.63 727 61.08 736 61.49 741 c
+   63.32 762 67.92 791 71.71 806 c
+   79.42 836 111 887 134 909 c
+   160 932 214 959 214 949 c
+   214 945 207 930 202 924 c
+   200 921 194 917 188 915 c
+   175 909 173 907 165 892 c
+   161 885 152 874 145 867 c
+   139 860 131 850 128 844 c
+   125 839 120 827 115 819 c
+   111 810 104 798 101 792 c
+   94.41 781 91.12 771 88.69 753 c
+   87.87 747 85.95 741 84.42 739 c
+   82.86 737 82.39 734 83.35 733 c
+   86.09 728 84.33 673 81.37 670 c
+   76.77 665 65.75 664 62.17 668 c
+   h f
+   587 815 m
+   587 819 585 824 584 827 c
+   581 833 585 833 589 826 c
+   592 822 592 819 591 815 c
+   589 809 l
+   587 815 l
+   h f
+   0.80 0.68 0.59 rg
+   112 545 m
+   110 549 103 561 103 563 c
+   103 564 106 564 109 564 c
+   114 564 117 562 121 557 c
+   127 549 128 545 123 545 c
+   122 545 119 544 117 544 c
+   116 543 113 544 112 545 c
+   h f
+   60.54 678 m
+   57.41 689 58.92 725 62.73 730 c
+   64.21 732 64.87 735 64.21 738 c
+   63.54 740 64.09 744 65.43 747 c
+   67.85 751 68.37 755 70.06 782 c
+   71.69 808 75.87 820 96.71 857 c
+   107 876 118 891 131 903 c
+   142 914 169 931 179 933 c
+   182 934 188 936 190 939 c
+   200 946 206 942 201 932 c
+   197 923 192 919 188 919 c
+   186 919 180 917 176 914 c
+   169 910 167 906 163 896 c
+   158 883 149 870 138 861 c
+   135 858 130 851 126 845 c
+   110 813 104 802 100 794 c
+   90.36 778 85.66 765 85.42 753 c
+   85.31 748 83.94 743 82.36 741 c
+   80.21 738 80.03 736 81.61 730 c
+   84.21 722 83.31 676 80.49 673 c
+   79.36 672 74.99 670 70.76 670 c
+   63.19 668 63.04 669 60.54 678 c
+   h f
+   0.76 0.58 0.42 rg
+   63.74 675 m
+   58.40 680 60.11 724 65.91 731 c
+   70.74 736 73.92 736 78.29 731 c
+   80.97 728 81.61 722 81.49 701 c
+   81.34 676 81.23 675 76.20 673 c
+   69.17 670 67.91 671 63.74 675 c
+   h f
+   72.81 746 m
+   75.68 749 78.74 750 81.02 749 c
+   86.31 747 80.99 742 73.80 742 c
+   68.24 742 l
+   72.81 746 l
+   h f
+   72.89 755 m
+   68.05 757 68.20 763 73.34 772 c
+   77.15 778 77.22 779 74.25 785 c
+   71.56 790 71.42 793 73.43 802 c
+   76.24 815 83.19 832 89.46 841 c
+   91.85 845 97.16 854 101 862 c
+   106 872 115 883 126 896 c
+   145 915 l
+   156 915 l
+   167 914 l
+   164 909 l
+   162 906 161 902 161 900 c
+   161 889 155 879 141 865 c
+   133 857 126 848 125 845 c
+   125 842 122 836 119 833 c
+   116 829 112 821 109 814 c
+   107 808 103 801 102 799 c
+   100 797 99.13 795 99.13 794 c
+   99.13 793 96.72 789 93.78 787 c
+   90.77 784 88.43 779 88.43 776 c
+   88.42 773 85.76 766 82.50 762 c
+   77.69 754 75.90 753 72.89 755 c
+   h f
+   171 918 m
+   169 920 173 926 176 926 c
+   177 926 181 928 184 930 c
+   189 934 191 934 193 933 c
+   196 929 194 923 189 923 c
+   187 923 183 922 181 920 c
+   176 917 173 916 171 918 c
+   h f
+   0.71 0.55 0.40 rg
+   66.28 676 m
+   60.78 680 60.69 723 66.16 729 c
+   70.88 734 73.97 734 78.88 729 c
+   82.36 725 82.56 723 80.65 711 c
+   79.22 703 79.20 695 80.59 689 c
+   83.70 675 76.26 669 66.28 676 c
+   h f
+   71.33 763 m
+   71.33 765 73.88 769 77.00 771 c
+   82.66 775 l
+   77.94 784 l
+   73.69 791 73.43 793 75.35 805 c
+   76.52 812 80.18 823 83.49 829 c
+   86.80 835 94.07 848 99.66 859 c
+   110 878 133 906 144 912 c
+   148 914 151 914 155 912 c
+   160 910 160 909 159 901 c
+   157 885 154 880 139 864 c
+   129 854 124 847 124 844 c
+   124 841 122 837 120 835 c
+   118 833 114 826 111 819 c
+   109 812 105 805 103 803 c
+   102 801 99.51 797 98.20 795 c
+   96.82 792 93.45 789 90.14 789 c
+   84.78 788 84.51 788 85.35 779 c
+   86.00 772 85.40 769 83.28 768 c
+   81.64 768 79.82 765 79.22 763 c
+   77.82 757 71.33 757 71.33 763 c
+   h f
+   173 921 m
+   173 922 175 923 176 923 c
+   177 923 177 922 177 921 c
+   176 920 175 919 174 919 c
+   174 919 173 920 173 921 c
+   h f
+   183 925 m
+   182 928 189 932 191 930 c
+   193 929 189 923 186 923 c
+   185 923 184 924 183 925 c
+   h f
+   0.67 0.44 0.30 rg
+   67.59 675 m
+   63.24 677 62.77 679 62.77 692 c
+   62.77 701 63.64 707 64.70 707 c
+   65.76 707 66.23 712 65.75 717 c
+   64.77 727 68.34 732 75.31 730 c
+   81.24 728 82.09 724 79.80 710 c
+   78.51 702 78.55 695 79.91 690 c
+   82.64 681 82.62 681 78.66 677 c
+   74.87 673 74.29 673 67.59 675 c
+   h f
+   74.62 791 m
+   71.17 796 81.37 828 89.85 838 c
+   91.41 840 96.15 848 100 857 c
+   108 874 123 894 137 905 c
+   147 913 149 914 155 910 c
+   158 908 159 906 157 903 c
+   155 900 155 895 156 891 c
+   157 884 156 882 141 867 c
+   131 857 124 848 124 846 c
+   124 843 122 838 119 835 c
+   116 831 112 822 109 816 c
+   107 810 103 803 101 800 c
+   98.84 798 96.99 795 96.99 793 c
+   96.99 792 96.27 791 95.39 791 c
+   94.51 791 89.70 790 84.71 790 c
+   79.72 789 75.18 790 74.62 791 c
+   h f
+   0.62 0.35 0.13 rg
+   66.51 679 m
+   62.59 683 63.58 686 71.08 690 c
+   77.21 693 80.26 690 79.37 682 c
+   78.68 675 71.47 674 66.51 679 c
+   h f
+   65.79 700 m
+   65.17 701 67.61 706 71.20 710 c
+   77.74 717 l
+   77.74 711 l
+   77.74 700 68.94 691 65.79 700 c
+   h f
+   76.78 793 m
+   74.90 796 79.53 817 83.85 826 c
+   86.17 830 90.56 837 93.60 841 c
+   96.64 845 99.13 849 99.13 851 c
+   99.13 855 108 871 117 883 c
+   130 900 145 911 150 909 c
+   153 908 154 907 153 905 c
+   151 900 151 897 153 889 c
+   155 883 153 881 138 866 c
+   129 856 122 848 122 845 c
+   122 842 120 838 117 834 c
+   114 831 110 823 108 818 c
+   103 803 95.60 794 85.80 792 c
+   81.41 792 77.35 792 76.78 793 c
+   h f
+   0.54 0.18 0.03 rg
+   69.41 680 m
+   67.48 683 67.96 684 71.73 685 c
+   77.43 686 78.70 685 77.01 681 c
+   75.44 677 72.62 677 69.41 680 c
+   h f
+   82.02 797 m
+   82.02 798 82.98 799 84.16 799 c
+   85.34 799 86.30 798 86.30 797 c
+   86.30 796 85.34 795 84.16 795 c
+   82.98 795 82.02 796 82.02 797 c
+   h f
+   87.37 803 m
+   79.15 805 77.31 814 84.03 820 c
+   86.45 822 88.44 825 88.44 828 c
+   88.44 832 101 846 106 846 c
+   110 846 110 847 106 851 c
+   103 855 103 855 106 864 c
+   108 869 114 877 118 883 c
+   133 900 144 903 151 892 c
+   154 886 154 885 150 879 c
+   148 876 140 868 133 862 c
+   123 853 120 849 120 845 c
+   120 842 118 837 115 834 c
+   112 831 109 824 107 818 c
+   104 807 100 801 96.30 802 c
+   94.92 802 90.90 803 87.37 803 c
+   h f
+   0.40 0.05 0.00 rg
+   89.00 807 m
+   84.54 809 82.48 811 83.23 813 c
+   85.02 818 93.83 821 99.00 820 c
+   102 819 103 817 102 812 c
+   102 804 98.82 803 89.00 807 c
+   h f
+   97.95 834 m
+   95.97 837 98.92 839 107 841 c
+   112 842 114 841 114 839 c
+   114 833 100 829 97.95 834 c
+   h f
+   114 864 m
+   107 866 108 869 120 881 c
+   127 888 131 891 134 890 c
+   136 889 139 890 140 891 c
+   143 893 144 893 147 891 c
+   152 887 150 881 143 873 c
+   131 862 125 859 114 864 c
+   h f
+   Q
+}}
+
+\def\coffeeC{\pdfliteral{%
+   q \coffeescale\space 0 0 \coffeescale\space 0 0 cm
+   .5 0 0 .5 0 -220 cm
+   0.98 0.85 0.77 rg
+   240 148 m
+   236 151 220 154 220 150 c
+   220 149 219 148 217 148 c
+   215 148 214 149 214 150 c
+   214 154 198 157 192 154 c
+   185 151 184 152 183 158 c
+   181 166 178 168 171 168 c
+   168 168 166 169 166 171 c
+   166 175 160 180 155 181 c
+   152 181 150 184 149 189 c
+   149 195 148 196 139 197 c
+   130 198 l
+   136 201 l
+   143 206 143 211 136 217 c
+   132 220 131 222 133 228 c
+   134 234 133 236 127 241 c
+   121 246 121 247 123 253 c
+   125 256 127 259 128 260 c
+   133 262 136 276 134 281 c
+   132 284 132 285 135 287 c
+   141 290 141 299 135 305 c
+   130 311 132 314 141 314 c
+   152 314 156 320 150 328 c
+   145 334 l
+   154 333 l
+   163 331 163 331 165 337 c
+   166 340 165 343 163 345 c
+   159 349 158 354 161 354 c
+   162 354 165 352 168 349 c
+   170 346 174 344 175 344 c
+   180 344 190 354 190 359 c
+   190 364 195 369 198 367 c
+   199 366 200 364 200 362 c
+   200 356 209 355 218 359 c
+   222 361 228 363 232 363 c
+   236 364 241 364 243 364 c
+   245 365 248 363 249 361 c
+   251 357 252 357 258 358 c
+   263 359 265 359 266 357 c
+   266 355 269 354 274 354 c
+   277 354 282 354 283 352 c
+   284 351 287 350 290 350 c
+   292 350 295 348 295 347 c
+   296 345 297 344 299 344 c
+   300 344 304 341 307 339 c
+   310 336 314 334 316 334 c
+   317 334 320 330 323 326 c
+   325 321 329 317 331 317 c
+   333 316 335 313 335 310 c
+   336 307 338 304 340 302 c
+   343 301 345 299 345 297 c
+   345 292 351 279 355 277 c
+   357 275 357 269 353 251 c
+   351 242 351 241 354 237 c
+   358 233 358 232 354 229 c
+   348 225 345 218 345 213 c
+   345 210 343 208 341 207 c
+   339 207 337 205 337 204 c
+   337 199 320 185 307 178 c
+   300 175 294 170 293 169 c
+   293 168 291 166 289 166 c
+   288 166 284 164 282 162 c
+   278 158 276 157 267 158 c
+   257 159 256 158 256 154 c
+   256 151 254 148 251 147 c
+   244 144 244 144 240 148 c
+   h f
+   542 301 m
+   533 304 522 314 516 325 c
+   511 335 509 339 509 349 c
+   509 356 511 363 512 365 c
+   513 366 514 369 513 371 c
+   512 376 529 393 540 398 c
+   544 400 555 402 563 403 c
+   579 405 579 405 589 394 c
+   591 393 594 390 596 388 c
+   599 385 601 381 601 379 c
+   601 376 603 371 606 367 c
+   611 360 611 358 609 352 c
+   607 348 606 341 607 336 c
+   607 330 606 327 603 326 c
+   601 325 599 322 598 320 c
+   597 317 595 316 594 316 c
+   593 316 589 313 585 309 c
+   580 304 577 302 573 303 c
+   570 303 566 303 566 302 c
+   564 299 550 299 542 301 c
+   h f
+   590 363 m
+   585 366 583 367 583 364 c
+   583 363 585 362 587 361 c
+   590 361 592 360 593 360 c
+   593 360 592 361 590 363 c
+   h f
+   0.97 0.80 0.68 rg
+   216 163 m
+   215 165 212 166 211 166 c
+   209 165 208 165 208 166 c
+   208 168 214 169 221 169 c
+   226 168 230 165 229 161 c
+   227 157 218 158 216 163 c
+   h f
+   191 164 m
+   191 165 193 166 194 166 c
+   195 166 196 165 196 164 c
+   196 163 194 162 193 162 c
+   191 162 190 163 191 164 c
+   h f
+   260 166 m
+   260 168 267 172 271 172 c
+   273 172 274 171 274 170 c
+   273 169 271 167 269 167 c
+   267 167 264 167 263 166 c
+   261 165 260 165 260 166 c
+   h f
+   198 179 m
+   200 183 204 183 204 180 c
+   204 178 202 176 201 176 c
+   199 176 198 178 198 179 c
+   h f
+   181 180 m
+   177 183 180 190 186 193 c
+   192 195 193 197 190 200 c
+   188 201 186 200 185 198 c
+   183 193 176 194 175 199 c
+   174 201 172 203 169 203 c
+   166 203 163 204 163 205 c
+   162 206 159 206 156 206 c
+   151 205 150 206 145 213 c
+   142 218 139 226 138 230 c
+   137 236 136 239 131 241 c
+   124 245 124 251 129 256 c
+   134 261 138 272 137 278 c
+   137 280 138 284 140 287 c
+   142 290 143 293 141 299 c
+   139 309 139 309 144 309 c
+   147 309 152 314 159 321 c
+   171 332 177 334 184 328 c
+   187 326 188 326 195 333 c
+   203 341 207 342 210 335 c
+   212 329 214 329 220 333 c
+   223 335 225 336 230 334 c
+   239 331 245 331 248 335 c
+   250 336 253 338 256 338 c
+   260 338 264 339 267 340 c
+   273 343 274 342 276 333 c
+   278 326 282 323 282 329 c
+   282 335 292 339 296 336 c
+   298 335 302 333 305 331 c
+   308 330 311 328 311 326 c
+   312 325 314 324 315 324 c
+   318 324 333 311 333 308 c
+   333 307 335 303 338 301 c
+   341 299 343 296 343 295 c
+   343 294 345 289 348 283 c
+   353 271 354 263 351 250 c
+   349 244 349 240 351 237 c
+   353 233 352 232 348 227 c
+   345 223 343 219 343 216 c
+   343 214 341 210 338 208 c
+   336 205 333 203 333 202 c
+   332 200 329 197 326 194 c
+   320 189 317 188 301 187 c
+   289 187 282 187 282 188 c
+   280 191 268 189 258 184 c
+   248 179 245 179 241 187 c
+   237 198 225 203 224 194 c
+   223 190 211 185 201 184 c
+   198 184 193 183 190 182 c
+   184 178 183 178 181 180 c
+   h f
+   226 182 m
+   226 184 227 185 227 183 c
+   228 181 228 180 227 179 c
+   227 178 226 180 226 182 c
+   h f
+   542 303 m
+   534 306 525 314 519 323 c
+   513 333 512 336 511 347 c
+   511 358 512 360 519 370 c
+   523 377 528 383 529 384 c
+   531 385 532 388 532 389 c
+   532 391 536 394 541 396 c
+   549 400 551 400 554 398 c
+   558 396 560 396 568 398 c
+   576 401 577 401 578 399 c
+   579 397 581 396 583 396 c
+   588 396 591 390 591 379 c
+   592 372 591 371 586 369 c
+   574 365 575 361 588 356 c
+   595 353 596 354 599 358 c
+   603 363 610 362 608 356 c
+   607 354 606 348 606 341 c
+   605 330 605 330 592 317 c
+   580 305 577 304 568 303 c
+   556 301 547 301 542 303 c
+   h f
+   576 378 m
+   575 379 573 380 571 380 c
+   570 380 569 379 570 378 c
+   570 377 572 376 574 376 c
+   576 376 576 377 576 378 c
+   h f
+   551 390 m
+   552 391 551 392 550 392 c
+   548 392 546 391 546 390 c
+   546 389 547 388 548 388 c
+   549 388 551 389 551 390 c
+   h f
+   Q
+}}
+
+\def\coffeeD{\pdfliteral{%
+   q \coffeescale\space 0 0 \coffeescale\space 0 0 cm
+   .5 0 0 .5 0 -530 cm
+   0.98 0.90 0.81 rg
+   495 591 m
+   492 593 492 593 496 596 c
+   498 597 499 599 498 600 c
+   497 601 485 599 479 596 c
+   473 593 471 594 470 601 c
+   470 606 468 608 462 611 c
+   458 614 453 619 451 622 c
+   449 625 445 629 442 630 c
+   439 632 436 635 436 637 c
+   435 639 432 641 429 643 c
+   425 645 422 646 417 644 c
+   413 643 410 641 410 640 c
+   410 637 386 610 382 609 c
+   373 606 358 614 353 622 c
+   351 626 348 628 343 630 c
+   339 631 335 632 334 633 c
+   331 636 318 635 313 632 c
+   309 630 308 629 310 624 c
+   311 621 311 620 308 620 c
+   306 620 302 619 299 618 c
+   297 616 292 615 288 615 c
+   283 615 l
+   283 628 l
+   283 638 282 642 279 647 c
+   276 652 275 652 258 654 c
+   231 656 228 656 223 651 c
+   212 643 198 649 198 662 c
+   198 667 201 678 204 683 c
+   205 685 205 690 205 694 c
+   205 702 205 703 200 704 c
+   197 705 195 707 195 709 c
+   195 714 185 720 175 722 c
+   161 723 157 726 157 735 c
+   157 741 158 743 162 745 c
+   164 747 166 750 166 752 c
+   166 756 159 764 154 764 c
+   151 764 146 771 146 776 c
+   146 778 149 783 154 787 c
+   160 792 161 794 161 800 c
+   161 814 159 820 153 824 c
+   148 828 147 832 153 833 c
+   155 834 157 835 158 836 c
+   159 839 157 882 155 885 c
+   155 887 154 890 154 893 c
+   154 895 154 902 154 909 c
+   154 916 154 921 156 922 c
+   157 922 164 923 172 923 c
+   185 922 186 922 192 928 c
+   198 934 198 935 191 951 c
+   189 956 189 957 192 961 c
+   195 966 197 966 203 965 c
+   225 962 225 962 233 966 c
+   243 971 247 975 248 981 c
+   249 989 249 999 246 1003 c
+   244 1009 246 1013 253 1014 c
+   258 1015 268 1007 270 1000 c
+   271 993 275 992 285 995 c
+   292 998 296 1002 297 1013 c
+   300 1028 307 1029 316 1016 c
+   320 1011 324 1007 326 1006 c
+   331 1003 338 1005 345 1012 c
+   351 1018 356 1020 357 1016 c
+   358 1014 360 1012 363 1012 c
+   366 1011 369 1009 369 1007 c
+   370 1005 373 1003 377 1001 c
+   381 999 387 997 390 995 c
+   396 992 417 991 420 993 c
+   420 994 421 999 421 1004 c
+   421 1012 422 1014 425 1014 c
+   433 1015 437 1012 437 1004 c
+   437 1000 436 996 435 996 c
+   432 994 433 984 437 981 c
+   441 976 442 976 451 979 c
+   456 980 458 982 459 985 c
+   459 988 461 989 466 989 c
+   475 990 477 987 474 972 c
+   472 959 l
+   482 950 l
+   490 942 492 941 496 942 c
+   498 943 505 944 511 944 c
+   521 945 523 945 525 941 c
+   529 935 529 933 521 924 c
+   514 917 514 916 515 908 c
+   516 903 518 897 522 892 c
+   529 883 530 883 544 888 c
+   550 890 553 891 559 889 c
+   565 887 566 887 566 880 c
+   566 872 559 866 551 866 c
+   544 866 537 861 537 857 c
+   537 855 536 853 535 852 c
+   534 851 534 849 535 846 c
+   536 844 537 841 536 838 c
+   535 836 536 832 537 831 c
+   538 830 539 826 539 823 c
+   538 818 539 817 541 816 c
+   551 814 552 808 544 800 c
+   541 797 539 794 539 790 c
+   539 786 540 785 547 782 c
+   563 775 561 762 544 764 c
+   533 766 522 760 522 752 c
+   522 748 523 746 529 743 c
+   535 741 537 738 540 732 c
+   546 721 545 717 539 715 c
+   537 714 533 714 531 714 c
+   530 715 527 714 526 714 c
+   525 713 528 710 535 705 c
+   550 694 551 693 551 686 c
+   551 683 554 677 557 672 c
+   567 657 567 653 558 640 c
+   556 638 555 633 555 629 c
+   555 624 554 622 552 621 c
+   550 621 547 618 546 615 c
+   544 612 540 610 535 608 c
+   530 607 524 604 521 601 c
+   516 596 515 596 513 597 c
+   509 600 505 598 505 594 c
+   505 590 499 588 495 591 c
+   h f
+   383 665 m
+   383 666 382 667 381 667 c
+   380 667 380 666 380 665 c
+   381 664 382 663 382 663 c
+   383 663 383 664 383 665 c
+   h f
+   409 673 m
+   417 678 416 680 406 680 c
+   397 681 392 676 396 671 c
+   399 668 402 668 409 673 c
+   h f
+   387 680 m
+   387 681 385 683 383 684 c
+   381 685 379 686 379 687 c
+   379 691 355 693 348 689 c
+   346 688 343 688 340 690 c
+   336 692 334 693 331 691 c
+   328 689 327 684 330 684 c
+   332 685 338 684 346 683 c
+   356 682 360 682 363 684 c
+   369 688 372 687 378 681 c
+   384 674 387 674 387 680 c
+   h f
+   437 679 m
+   437 684 432 684 432 678 c
+   431 675 432 674 434 674 c
+   436 674 437 676 437 679 c
+   h f
+   295 697 m
+   295 701 295 701 293 700 c
+   292 699 292 696 292 695 c
+   294 691 295 692 295 697 c
+   h f
+   430 941 m
+   430 944 426 945 424 942 c
+   422 940 423 939 426 939 c
+   428 939 430 940 430 941 c
+   h f
+   393 945 m
+   393 949 386 948 385 944 c
+   385 942 385 941 389 941 c
+   391 942 393 943 393 945 c
+   h f
+   359 944 m
+   362 945 362 951 360 953 c
+   359 953 355 954 351 955 c
+   344 956 344 956 344 952 c
+   344 950 345 947 348 946 c
+   354 943 355 943 359 944 c
+   h f
+   374 598 m
+   375 599 376 600 378 600 c
+   379 600 380 599 381 598 c
+   381 596 380 595 378 595 c
+   375 595 374 596 374 598 c
+   h f
+   36.00 1005 m
+   36.09 1007 36.51 1007 37.08 1006 c
+   37.60 1005 37.54 1003 36.94 1003 c
+   36.35 1002 35.92 1003 36.00 1005 c
+   h f
+   0.92 0.83 0.80 rg
+   482 602 m
+   480 602 478 604 477 605 c
+   476 606 471 609 467 611 c
+   462 614 457 617 456 619 c
+   454 621 448 628 442 634 c
+   436 641 431 646 431 647 c
+   431 652 408 647 407 642 c
+   406 640 402 635 398 631 c
+   394 626 390 621 390 620 c
+   390 616 383 611 378 611 c
+   370 611 358 619 355 625 c
+   353 630 351 631 342 634 c
+   325 638 304 637 304 630 c
+   304 626 297 619 292 619 c
+   287 619 286 621 285 633 c
+   285 642 284 645 280 649 c
+   277 652 273 654 271 654 c
+   269 654 260 656 251 658 c
+   236 661 233 661 228 659 c
+   225 658 222 656 221 655 c
+   219 651 209 650 205 654 c
+   201 658 201 664 206 677 c
+   212 693 210 700 197 713 c
+   187 723 181 726 170 726 c
+   166 726 164 727 162 730 c
+   158 735 159 739 166 746 c
+   175 754 173 759 162 764 c
+   153 769 149 775 152 780 c
+   153 782 156 786 158 787 c
+   161 790 162 793 163 799 c
+   165 814 163 820 156 825 c
+   149 830 149 831 154 832 c
+   158 833 158 834 159 847 c
+   160 855 160 868 159 877 c
+   158 885 157 897 156 903 c
+   155 918 157 920 174 920 c
+   186 920 188 921 192 925 c
+   200 932 201 935 197 945 c
+   192 959 197 967 208 962 c
+   211 960 216 959 221 960 c
+   230 961 250 971 252 977 c
+   254 982 255 1001 252 1003 c
+   251 1004 250 1006 250 1008 c
+   250 1015 262 1009 266 998 c
+   270 989 275 988 288 994 c
+   298 999 298 999 299 1007 c
+   301 1019 304 1021 311 1016 c
+   318 1011 319 1008 314 1005 c
+   309 1001 312 998 319 1000 c
+   322 1001 327 1001 330 1001 c
+   335 1000 337 1001 343 1006 c
+   350 1013 350 1013 358 1011 c
+   362 1009 366 1007 367 1005 c
+   368 1003 374 999 381 996 c
+   394 989 406 988 418 990 c
+   423 991 424 991 424 989 c
+   424 987 425 986 427 987 c
+   428 988 430 986 430 984 c
+   433 978 437 975 446 975 c
+   453 975 456 976 460 981 c
+   466 986 471 988 471 983 c
+   471 982 470 981 469 981 c
+   468 982 467 982 467 981 c
+   467 980 468 979 469 979 c
+   471 979 471 976 470 969 c
+   469 958 l
+   480 948 l
+   490 937 l
+   504 940 l
+   517 942 518 942 521 939 c
+   526 936 525 931 517 926 c
+   508 920 507 916 512 903 c
+   517 891 528 879 533 881 c
+   535 881 539 883 543 884 c
+   552 888 558 887 559 882 c
+   561 876 558 873 549 870 c
+   544 869 538 866 537 865 c
+   532 860 531 850 534 839 c
+   535 834 536 826 536 823 c
+   537 819 539 816 541 815 c
+   547 812 547 807 541 800 c
+   532 792 534 786 545 780 c
+   557 774 558 766 546 768 c
+   537 769 522 762 519 755 c
+   517 750 520 738 523 740 c
+   529 743 541 730 540 722 c
+   540 718 539 718 528 719 c
+   514 719 512 717 520 712 c
+   532 704 546 693 548 690 c
+   549 688 550 685 550 683 c
+   550 681 552 675 555 669 c
+   561 657 562 654 556 644 c
+   553 639 549 632 547 627 c
+   542 617 540 614 533 612 c
+   531 612 526 609 522 607 c
+   516 603 514 602 506 603 c
+   501 604 494 604 491 603 c
+   488 602 484 602 482 602 c
+   h f
+   367 660 m
+   367 661 366 662 364 662 c
+   363 662 361 661 361 660 c
+   361 659 363 658 364 658 c
+   366 658 367 659 367 660 c
+   h f
+   385 665 m
+   385 669 381 670 379 668 c
+   377 666 381 662 383 662 c
+   384 662 385 663 385 665 c
+   h f
+   409 672 m
+   418 677 418 677 414 682 c
+   412 685 411 685 410 684 c
+   408 682 405 681 403 681 c
+   400 681 396 680 394 678 c
+   391 674 391 674 395 670 c
+   400 666 400 666 409 672 c
+   h f
+   460 675 m
+   458 677 454 674 456 672 c
+   456 671 457 671 459 672 c
+   460 673 460 675 460 675 c
+   h f
+   438 680 m
+   437 683 431 684 430 681 c
+   430 679 430 676 431 675 c
+   434 672 434 672 436 675 c
+   437 677 438 679 438 680 c
+   h f
+   387 680 m
+   387 686 371 695 365 692 c
+   362 691 358 691 355 692 c
+   351 692 349 691 347 690 c
+   345 687 344 687 340 690 c
+   335 695 332 695 328 690 c
+   324 686 326 682 332 684 c
+   335 685 338 684 339 683 c
+   342 681 358 680 363 682 c
+   368 685 375 683 380 678 c
+   384 674 387 675 387 680 c
+   h f
+   297 698 m
+   297 701 296 703 294 703 c
+   291 703 291 697 293 691 c
+   294 687 297 691 297 698 c
+   h f
+   498 927 m
+   498 927 496 929 495 930 c
+   492 933 492 932 493 928 c
+   494 925 498 924 498 927 c
+   h f
+   430 942 m
+   430 945 429 946 425 946 c
+   418 947 417 944 421 940 c
+   424 936 430 938 430 942 c
+   h f
+   394 944 m
+   394 946 392 948 390 950 c
+   387 952 386 951 384 947 c
+   383 944 383 942 385 941 c
+   388 939 394 941 394 944 c
+   h f
+   374 951 m
+   372 953 369 951 368 945 c
+   366 940 l
+   371 945 l
+   374 948 375 950 374 951 c
+   h f
+   359 944 m
+   360 945 365 954 365 956 c
+   365 956 360 956 353 957 c
+   342 957 342 957 342 952 c
+   343 946 354 941 359 944 c
+   h f
+   313 956 m
+   313 959 308 961 307 959 c
+   306 958 307 956 308 955 c
+   311 953 313 953 313 956 c
+   h f
+   361 998 m
+   362 1001 352 1004 350 1002 c
+   349 1001 349 1000 350 999 c
+   351 996 359 996 361 998 c
+   h f
+   425 992 m
+   423 993 422 995 422 997 c
+   422 1002 428 1001 429 996 c
+   430 992 427 989 425 992 c
+   h f
+   425 1007 m
+   424 1008 424 1010 425 1011 c
+   426 1013 431 1011 431 1008 c
+   431 1005 427 1005 425 1007 c
+   h f
+   0.96 0.80 0.66 rg
+   479 605 m
+   478 605 474 608 470 610 c
+   462 614 443 633 435 643 c
+   432 648 430 649 425 649 c
+   417 649 407 645 405 640 c
+   404 638 400 633 397 630 c
+   393 626 390 621 389 619 c
+   386 607 365 610 356 624 c
+   351 633 335 639 322 637 c
+   317 637 309 636 305 636 c
+   300 636 298 635 298 633 c
+   299 632 300 631 301 631 c
+   304 631 301 623 297 621 c
+   289 616 286 619 286 632 c
+   286 642 286 644 281 649 c
+   277 654 274 655 264 656 c
+   257 657 248 659 245 660 c
+   235 663 232 662 225 657 c
+   215 651 210 650 205 654 c
+   204 655 202 658 202 660 c
+   202 665 206 678 208 680 c
+   208 681 209 686 209 691 c
+   209 700 209 701 199 712 c
+   188 723 181 726 170 726 c
+   159 726 157 736 166 745 c
+   174 754 173 759 162 764 c
+   156 767 150 773 150 777 c
+   150 777 153 782 157 786 c
+   165 795 165 798 163 815 c
+   163 819 161 823 160 823 c
+   159 823 157 824 155 826 c
+   153 828 153 829 157 832 c
+   161 834 161 836 161 852 c
+   161 862 160 878 158 888 c
+   156 901 156 908 157 913 c
+   158 919 l
+   171 919 l
+   184 919 190 921 196 928 c
+   201 934 201 936 197 946 c
+   196 950 195 955 196 958 c
+   197 963 197 963 203 962 c
+   216 959 230 960 234 963 c
+   235 965 240 967 244 969 c
+   248 970 251 973 252 976 c
+   255 982 254 1000 252 1003 c
+   250 1005 250 1011 253 1011 c
+   257 1011 264 1004 266 998 c
+   268 989 276 987 290 994 c
+   297 998 299 998 305 997 c
+   313 995 324 996 324 999 c
+   324 1000 327 1000 330 1000 c
+   335 1000 338 1002 344 1007 c
+   350 1013 351 1013 354 1011 c
+   356 1010 359 1009 361 1009 c
+   364 1009 366 1008 367 1005 c
+   368 1002 372 999 378 997 c
+   383 995 389 992 391 991 c
+   393 990 400 989 406 989 c
+   413 989 420 987 421 986 c
+   423 985 425 984 427 985 c
+   428 985 430 985 430 984 c
+   430 979 437 975 446 975 c
+   451 975 455 974 455 973 c
+   455 972 456 973 459 976 c
+   462 979 464 980 467 979 c
+   471 978 471 978 470 968 c
+   469 958 l
+   480 948 l
+   490 937 l
+   504 940 l
+   517 942 518 942 521 939 c
+   526 936 525 931 517 926 c
+   509 920 508 916 511 905 c
+   514 895 524 883 530 881 c
+   532 880 536 881 539 883 c
+   546 887 556 887 559 884 c
+   563 877 558 872 548 870 c
+   544 870 539 867 537 865 c
+   533 860 530 850 531 846 c
+   534 842 536 829 535 821 c
+   535 815 536 814 538 814 c
+   542 814 546 811 546 808 c
+   546 807 544 804 540 801 c
+   533 792 534 786 543 780 c
+   558 772 559 768 544 768 c
+   533 768 522 762 519 755 c
+   517 750 520 738 523 740 c
+   529 743 541 730 540 722 c
+   540 718 539 718 528 719 c
+   514 719 512 717 520 712 c
+   532 704 546 693 548 690 c
+   549 688 550 685 550 683 c
+   550 681 552 675 555 669 c
+   561 657 562 654 556 644 c
+   553 639 549 632 547 627 c
+   542 617 540 614 533 612 c
+   531 612 526 609 523 607 c
+   517 603 514 603 498 603 c
+   488 603 479 604 479 605 c
+   h f
+   370 627 m
+   370 628 370 629 369 628 c
+   368 628 367 627 367 626 c
+   367 625 368 624 369 624 c
+   370 624 370 625 370 627 c
+   h f
+   375 633 m
+   376 635 365 641 362 639 c
+   358 638 359 635 364 636 c
+   367 637 369 636 370 634 c
+   371 631 373 630 375 633 c
+   h f
+   378 654 m
+   379 655 379 656 378 656 c
+   377 656 376 655 376 654 c
+   376 653 376 653 377 653 c
+   377 653 378 653 378 654 c
+   h f
+   369 658 m
+   371 662 372 662 376 660 c
+   378 659 381 658 384 658 c
+   388 658 388 659 388 663 c
+   388 669 390 670 397 666 c
+   401 664 402 664 409 668 c
+   415 672 418 672 424 671 c
+   429 671 434 669 437 668 c
+   441 666 443 666 447 667 c
+   449 668 454 669 457 669 c
+   463 669 464 669 464 675 c
+   464 683 461 684 457 679 c
+   452 674 444 675 442 681 c
+   440 685 440 685 429 684 c
+   420 684 417 684 414 686 c
+   412 689 411 689 408 687 c
+   403 684 402 684 404 688 c
+   404 691 404 692 400 694 c
+   393 696 391 696 393 694 c
+   396 691 396 684 394 682 c
+   393 682 391 682 391 684 c
+   390 685 388 687 386 688 c
+   384 688 379 691 375 693 c
+   370 697 368 697 366 696 c
+   365 695 357 694 347 694 c
+   338 694 328 694 326 693 c
+   323 692 322 693 322 694 c
+   322 696 321 697 320 698 c
+   317 699 313 696 313 693 c
+   313 691 312 690 310 689 c
+   306 687 307 685 314 684 c
+   323 682 333 676 333 672 c
+   333 671 335 668 338 667 c
+   341 666 345 663 347 660 c
+   349 657 351 656 354 657 c
+   357 657 360 657 362 656 c
+   365 654 366 654 369 658 c
+   h f
+   355 665 m
+   352 665 351 667 350 669 c
+   350 672 348 673 345 674 c
+   339 675 336 678 342 678 c
+   349 678 351 678 354 675 c
+   356 673 359 671 361 670 c
+   364 668 363 663 360 664 c
+   359 664 357 664 355 665 c
+   h f
+   362 678 m
+   363 679 365 680 366 680 c
+   367 680 369 679 369 678 c
+   369 677 367 676 365 676 c
+   363 676 362 677 362 678 c
+   h f
+   308 659 m
+   308 659 307 660 306 661 c
+   305 661 304 661 304 660 c
+   304 659 305 658 306 658 c
+   307 658 308 658 308 659 c
+   h f
+   323 663 m
+   319 668 317 668 317 664 c
+   317 662 319 660 324 660 c
+   326 660 325 661 323 663 c
+   h f
+   298 688 m
+   303 701 300 708 291 703 c
+   289 702 286 701 284 702 c
+   279 702 278 696 282 694 c
+   285 694 286 692 286 689 c
+   286 683 289 679 293 680 c
+   294 680 297 684 298 688 c
+   h f
+   498 929 m
+   494 933 490 933 492 929 c
+   493 925 496 923 498 925 c
+   499 926 499 928 498 929 c
+   h f
+   424 930 m
+   425 935 431 935 432 930 c
+   433 926 433 926 436 929 c
+   439 932 439 932 436 935 c
+   431 938 433 943 439 943 c
+   446 943 446 946 441 950 c
+   435 955 431 955 432 950 c
+   433 946 433 946 431 948 c
+   428 951 420 951 416 947 c
+   413 943 413 943 416 939 c
+   418 936 419 933 418 932 c
+   417 931 417 930 418 929 c
+   420 926 423 927 424 930 c
+   h f
+   406 934 m
+   411 940 407 941 401 936 c
+   397 932 397 932 400 932 c
+   402 932 405 933 406 934 c
+   h f
+   372 941 m
+   375 946 379 946 381 941 c
+   383 937 391 936 394 940 c
+   398 944 398 945 392 951 c
+   387 956 386 957 381 956 c
+   378 955 375 956 374 957 c
+   370 960 361 961 359 959 c
+   357 957 355 957 350 959 c
+   345 961 343 961 339 958 c
+   337 956 333 956 330 956 c
+   327 957 326 957 324 952 c
+   320 945 317 945 317 952 c
+   317 955 315 958 313 960 c
+   307 964 302 963 302 958 c
+   302 955 304 953 309 952 c
+   314 950 315 949 314 945 c
+   313 939 317 936 321 939 c
+   323 941 330 941 344 941 c
+   352 942 360 939 362 936 c
+   364 933 369 936 372 941 c
+   h f
+   329 947 m
+   329 949 331 951 333 952 c
+   336 953 337 953 337 951 c
+   338 950 338 948 337 947 c
+   336 944 329 944 329 947 c
+   h f
+   256 943 m
+   256 945 255 946 252 946 c
+   248 946 248 945 251 941 c
+   254 938 256 939 256 943 c
+   h f
+   295 953 m
+   295 954 294 955 292 955 c
+   288 955 287 953 290 951 c
+   294 950 295 950 295 953 c
+   h f
+   308 976 m
+   308 980 306 979 301 974 c
+   298 972 297 969 298 967 c
+   299 964 300 964 304 969 c
+   306 971 308 975 308 976 c
+   h f
+   318 973 m
+   318 974 317 975 316 975 c
+   314 975 313 974 313 973 c
+   313 972 314 972 315 972 c
+   316 972 317 972 318 973 c
+   h f
+   381 974 m
+   379 976 377 977 375 976 c
+   371 974 373 972 379 972 c
+   383 972 383 972 381 974 c
+   h f
+   397 974 m
+   397 976 396 977 395 976 c
+   394 975 394 974 394 973 c
+   394 972 394 972 395 972 c
+   396 972 397 973 397 974 c
+   h f
+   408 982 m
+   408 985 405 986 403 983 c
+   401 981 401 981 404 981 c
+   406 981 408 981 408 982 c
+   h f
+   352 991 m
+   354 993 356 995 357 995 c
+   358 995 360 996 361 997 c
+   364 1000 360 1004 353 1004 c
+   347 1004 347 1003 348 999 c
+   348 995 346 992 342 995 c
+   338 998 335 997 336 994 c
+   337 991 342 988 347 988 c
+   348 988 350 989 352 991 c
+   h f
+   467 982 m
+   462 983 463 986 467 986 c
+   469 986 471 985 471 983 c
+   471 982 471 981 470 981 c
+   470 981 468 981 467 982 c
+   h f
+   425 995 m
+   424 996 424 997 425 998 c
+   426 999 430 997 430 995 c
+   430 992 426 993 425 995 c
+   h f
+   300 1009 m
+   301 1019 304 1021 311 1016 c
+   318 1011 319 1005 312 1006 c
+   309 1007 308 1007 308 1005 c
+   308 1003 306 1002 303 1002 c
+   299 1002 298 1002 300 1009 c
+   h f
+   424 1009 m
+   424 1010 426 1011 428 1011 c
+   430 1011 431 1010 431 1009 c
+   431 1008 430 1007 428 1007 c
+   426 1007 424 1008 424 1009 c
+   h f
+   0.88 0.67 0.59 rg
+   476 609 m
+   465 615 436 642 434 649 c
+   433 653 432 653 424 652 c
+   412 650 403 646 403 643 c
+   403 642 399 637 394 633 c
+   387 628 385 624 386 622 c
+   386 620 385 618 384 617 c
+   382 615 380 615 373 617 c
+   362 620 358 624 358 629 c
+   358 632 359 634 363 635 c
+   369 637 372 635 368 631 c
+   364 627 364 622 369 622 c
+   371 622 372 623 372 625 c
+   372 627 373 630 374 631 c
+   376 633 376 634 373 636 c
+   367 640 362 641 358 638 c
+   354 634 346 634 339 638 c
+   335 640 330 640 317 639 c
+   307 639 300 639 300 640 c
+   299 641 295 644 290 646 c
+   285 649 280 652 279 653 c
+   278 655 273 656 268 657 c
+   263 658 257 660 254 661 c
+   252 662 245 664 239 665 c
+   228 666 227 666 223 662 c
+   219 658 211 655 209 658 c
+   206 661 207 672 210 678 c
+   212 682 213 686 212 694 c
+   211 704 210 705 201 714 c
+   189 726 184 730 178 730 c
+   174 730 170 731 168 733 c
+   164 736 l
+   169 744 l
+   173 748 175 754 175 756 c
+   175 759 167 769 164 769 c
+   162 769 157 775 157 778 c
+   157 780 159 785 162 788 c
+   166 793 167 794 166 807 c
+   165 820 164 822 160 825 c
+   157 827 157 828 159 830 c
+   160 832 161 837 161 842 c
+   161 847 162 853 162 855 c
+   164 858 161 887 158 902 c
+   156 910 164 916 175 916 c
+   186 916 195 921 201 930 c
+   205 936 207 937 213 938 c
+   217 939 220 941 221 943 c
+   222 947 221 950 217 950 c
+   216 950 215 951 215 952 c
+   215 954 221 954 222 951 c
+   223 950 224 950 227 953 c
+   232 960 240 964 247 964 c
+   258 964 261 966 261 973 c
+   261 976 262 981 264 983 c
+   266 987 267 988 273 987 c
+   279 986 281 986 287 990 c
+   294 995 295 995 313 994 c
+   327 993 332 993 335 990 c
+   339 986 350 986 354 990 c
+   357 993 359 993 368 992 c
+   383 990 385 990 383 987 c
+   380 984 382 981 387 981 c
+   390 981 390 981 390 984 c
+   389 987 389 988 391 987 c
+   393 986 394 986 395 986 c
+   395 986 394 983 392 979 c
+   388 968 391 966 399 973 c
+   404 977 406 979 409 978 c
+   412 977 413 978 414 982 c
+   414 984 415 987 416 987 c
+   417 987 422 984 428 979 c
+   436 971 438 970 442 970 c
+   445 971 449 971 451 970 c
+   454 968 455 969 458 972 c
+   459 974 462 975 464 975 c
+   467 975 467 974 467 966 c
+   467 959 468 956 473 950 c
+   477 947 481 940 484 935 c
+   489 925 493 922 500 921 c
+   504 921 505 921 505 916 c
+   505 913 506 909 507 906 c
+   509 903 511 898 513 894 c
+   515 889 520 884 534 876 c
+   538 874 537 873 534 868 c
+   529 861 528 850 532 836 c
+   533 831 534 825 534 822 c
+   535 819 535 816 535 815 c
+   535 815 537 814 539 813 c
+   544 811 543 807 538 801 c
+   535 798 533 794 533 791 c
+   533 784 534 782 543 778 c
+   546 776 550 774 550 773 c
+   550 772 546 771 541 771 c
+   523 769 513 757 517 743 c
+   518 739 519 738 524 738 c
+   531 738 533 736 535 729 c
+   538 720 536 719 525 721 c
+   519 723 517 723 515 721 c
+   511 717 511 712 516 710 c
+   523 708 542 694 545 690 c
+   547 688 548 684 548 682 c
+   548 680 550 674 552 669 c
+   555 663 557 657 557 655 c
+   557 650 551 637 548 636 c
+   547 635 544 631 542 627 c
+   540 620 537 618 528 613 c
+   518 608 514 607 504 607 c
+   497 607 490 606 489 606 c
+   487 605 481 607 476 609 c
+   h f
+   379 654 m
+   379 655 381 656 383 657 c
+   386 657 388 658 388 663 c
+   389 669 390 670 397 666 c
+   401 664 402 664 409 668 c
+   415 672 418 672 424 671 c
+   429 671 434 669 437 668 c
+   441 666 443 666 447 667 c
+   449 668 454 669 457 669 c
+   463 669 464 669 464 675 c
+   464 683 462 684 457 679 c
+   450 674 444 675 442 681 c
+   440 685 440 685 429 684 c
+   420 684 417 684 414 686 c
+   412 689 411 689 408 687 c
+   403 684 402 684 404 688 c
+   404 691 403 692 398 695 c
+   391 698 388 697 393 692 c
+   396 689 396 684 394 682 c
+   393 682 391 682 391 684 c
+   388 688 368 698 366 695 c
+   364 694 357 694 345 695 c
+   335 695 327 695 326 694 c
+   325 691 323 692 322 696 c
+   320 702 314 698 308 686 c
+   308 686 310 685 314 684 c
+   322 682 333 676 333 672 c
+   333 671 336 668 339 666 c
+   343 665 346 661 347 659 c
+   350 654 350 654 354 656 c
+   356 657 358 657 361 656 c
+   365 655 366 655 369 658 c
+   372 663 378 662 377 656 c
+   376 654 376 653 377 653 c
+   378 653 379 653 379 654 c
+   h f
+   350 669 m
+   350 672 348 673 345 674 c
+   339 675 336 678 342 678 c
+   348 678 352 678 352 676 c
+   353 675 355 673 358 671 c
+   365 668 365 665 357 665 c
+   352 665 351 666 350 669 c
+   h f
+   309 659 m
+   307 660 305 661 304 661 c
+   303 659 308 656 310 656 c
+   311 656 311 658 309 659 c
+   h f
+   323 663 m
+   320 667 313 669 313 667 c
+   313 664 319 660 322 660 c
+   326 660 326 660 323 663 c
+   h f
+   298 688 m
+   301 696 301 701 299 705 c
+   297 707 296 707 292 705 c
+   289 703 285 702 284 702 c
+   281 702 280 701 280 697 c
+   280 694 281 693 283 693 c
+   286 694 286 693 286 688 c
+   286 677 294 677 298 688 c
+   h f
+   243 708 m
+   243 709 242 710 241 710 c
+   240 710 240 709 240 707 c
+   240 706 240 705 241 706 c
+   242 706 243 707 243 708 c
+   h f
+   424 930 m
+   425 935 431 935 432 930 c
+   433 926 433 926 436 929 c
+   439 932 439 932 436 935 c
+   431 938 433 943 439 943 c
+   446 943 446 946 440 951 c
+   434 956 430 957 429 954 c
+   428 953 425 952 423 951 c
+   420 951 416 949 414 947 c
+   412 944 412 944 415 941 c
+   417 939 418 935 417 931 c
+   417 926 417 925 420 925 c
+   422 926 424 928 424 930 c
+   h f
+   406 934 m
+   411 940 407 941 401 936 c
+   397 932 397 932 400 932 c
+   402 932 405 933 406 934 c
+   h f
+   253 937 m
+   256 937 257 938 257 943 c
+   258 946 259 950 260 951 c
+   261 953 261 954 260 954 c
+   258 954 258 953 258 952 c
+   258 950 255 950 251 951 c
+   244 952 243 951 246 945 c
+   247 942 248 938 247 936 c
+   247 934 247 934 248 935 c
+   249 936 251 937 253 937 c
+   h f
+   372 941 m
+   375 946 379 946 381 941 c
+   383 937 391 936 394 940 c
+   398 944 398 945 392 952 c
+   388 957 386 957 381 956 c
+   376 955 374 956 372 958 c
+   370 961 359 962 357 959 c
+   357 958 353 959 349 960 c
+   343 961 341 961 338 958 c
+   336 956 334 956 330 956 c
+   327 957 325 957 323 953 c
+   319 947 317 947 317 953 c
+   317 959 320 963 324 963 c
+   328 963 328 966 325 967 c
+   323 968 321 970 320 972 c
+   318 978 305 980 300 975 c
+   298 973 296 972 295 972 c
+   294 972 295 969 296 967 c
+   297 964 299 960 300 957 c
+   302 954 304 952 307 952 c
+   311 951 312 950 312 946 c
+   312 939 316 936 320 939 c
+   323 941 326 941 331 939 c
+   338 938 339 938 341 941 c
+   343 943 344 943 349 942 c
+   353 940 357 939 358 939 c
+   360 939 362 938 362 937 c
+   363 933 369 936 372 941 c
+   h f
+   329 947 m
+   329 949 331 951 333 952 c
+   336 953 337 953 337 951 c
+   338 950 338 948 337 947 c
+   336 944 329 944 329 947 c
+   h f
+   307 966 m
+   305 967 308 970 311 970 c
+   313 970 315 969 315 967 c
+   315 964 309 963 307 966 c
+   h f
+   268 939 m
+   268 940 267 941 265 941 c
+   263 941 261 940 261 939 c
+   261 938 263 938 265 938 c
+   267 938 268 938 268 939 c
+   h f
+   241 944 m
+   241 949 240 949 235 947 c
+   228 943 228 943 230 941 c
+   230 940 233 939 236 939 c
+   240 939 241 940 241 944 c
+   h f
+   275 948 m
+   275 949 275 950 274 950 c
+   273 950 272 949 272 948 c
+   272 947 272 946 273 946 c
+   273 946 274 947 275 948 c
+   h f
+   297 952 m
+   296 955 290 958 289 957 c
+   288 956 288 954 289 953 c
+   290 950 298 949 297 952 c
+   h f
+   355 966 m
+   355 967 353 968 352 968 c
+   351 968 351 967 352 966 c
+   352 965 353 964 354 964 c
+   355 964 356 965 355 966 c
+   h f
+   383 972 m
+   383 976 380 977 375 976 c
+   372 975 372 975 375 972 c
+   379 969 383 969 383 972 c
+   h f
+   333 979 m
+   332 981 330 982 328 982 c
+   326 982 326 981 329 978 c
+   334 973 336 973 333 979 c
+   h f
+   349 981 m
+   349 982 348 982 347 982 c
+   346 982 345 982 345 981 c
+   345 980 346 979 347 979 c
+   348 979 349 980 349 981 c
+   h f
+   512 933 m
+   513 935 514 937 516 937 c
+   519 937 519 931 515 931 c
+   513 930 512 931 512 933 c
+   h f
+   204 948 m
+   204 949 205 950 205 950 c
+   206 950 208 949 208 948 c
+   209 947 208 946 207 946 c
+   205 946 204 947 204 948 c
+   h f
+   0.96 0.67 0.44 rg
+   474 611 m
+   464 616 444 635 438 646 c
+   433 653 431 654 419 651 c
+   414 650 404 648 396 647 c
+   385 646 380 645 379 643 c
+   377 641 374 641 368 641 c
+   362 642 359 641 355 639 c
+   353 638 350 637 348 637 c
+   346 638 346 639 350 645 c
+   352 649 356 652 357 653 c
+   358 654 363 653 369 651 c
+   378 647 378 647 381 650 c
+   383 652 386 655 389 657 c
+   393 659 394 659 397 658 c
+   400 656 402 656 408 662 c
+   415 670 421 671 425 665 c
+   427 662 428 662 430 663 c
+   431 664 435 664 439 665 c
+   443 665 450 665 455 666 c
+   460 666 464 667 465 668 c
+   466 669 466 673 466 677 c
+   465 685 461 688 456 682 c
+   453 678 448 679 445 683 c
+   443 686 441 687 430 687 c
+   421 688 415 689 408 692 c
+   393 700 391 700 388 696 c
+   386 691 383 691 376 697 c
+   370 702 368 702 365 698 c
+   363 696 359 696 344 697 c
+   333 697 324 698 323 699 c
+   322 700 320 701 317 701 c
+   315 701 313 702 312 703 c
+   312 704 309 705 306 705 c
+   303 705 300 706 299 707 c
+   298 708 296 708 293 707 c
+   291 706 286 705 284 704 c
+   276 704 276 697 281 687 c
+   286 679 295 673 296 677 c
+   298 682 302 686 304 684 c
+   306 683 310 681 314 680 c
+   318 679 323 677 324 675 c
+   327 671 321 670 313 673 c
+   305 676 300 675 305 671 c
+   309 667 308 665 300 665 c
+   293 664 292 664 292 660 c
+   291 654 296 649 299 653 c
+   300 655 301 655 305 653 c
+   309 651 310 648 310 645 c
+   310 637 305 637 299 644 c
+   296 647 292 649 290 649 c
+   288 649 284 651 281 654 c
+   277 656 272 658 268 658 c
+   265 658 260 659 257 661 c
+   254 663 246 664 239 665 c
+   227 667 226 666 223 662 c
+   221 660 217 658 214 658 c
+   209 657 208 658 208 664 c
+   207 668 208 673 211 678 c
+   214 684 214 686 212 695 c
+   211 703 209 707 201 714 c
+   189 726 184 730 178 730 c
+   174 730 170 731 168 733 c
+   164 736 l
+   169 744 l
+   173 748 175 754 175 756 c
+   175 759 167 769 164 769 c
+   162 769 157 775 157 778 c
+   157 780 159 785 162 788 c
+   166 793 167 794 166 807 c
+   165 820 164 822 161 825 c
+   157 828 157 828 159 831 c
+   161 833 163 839 163 845 c
+   165 860 165 856 160 899 c
+   159 908 159 908 164 911 c
+   167 913 172 914 175 914 c
+   183 914 195 921 201 929 c
+   204 933 207 936 211 937 c
+   215 937 218 939 219 940 c
+   223 943 222 948 218 950 c
+   216 950 215 951 215 952 c
+   215 954 221 954 222 951 c
+   223 950 226 952 229 956 c
+   237 963 238 964 255 965 c
+   265 966 267 965 268 963 c
+   271 957 270 955 267 958 c
+   264 959 262 959 258 955 c
+   254 951 252 950 246 952 c
+   241 953 239 953 236 950 c
+   234 948 231 946 229 946 c
+   228 946 227 945 227 943 c
+   227 941 229 939 235 938 c
+   239 937 244 935 245 933 c
+   247 931 248 931 250 932 c
+   251 934 257 935 262 935 c
+   270 936 277 936 283 937 c
+   286 938 282 941 279 941 c
+   276 941 276 942 277 945 c
+   279 948 279 950 276 955 c
+   272 962 l
+   276 965 l
+   282 969 280 972 273 971 c
+   265 969 262 973 264 980 c
+   265 986 265 986 275 985 c
+   284 984 285 984 290 989 c
+   295 993 296 993 303 992 c
+   309 991 311 989 311 986 c
+   312 981 317 981 317 987 c
+   317 991 317 991 324 991 c
+   329 991 333 990 334 989 c
+   336 987 338 986 341 986 c
+   343 985 344 984 344 981 c
+   344 978 344 976 346 976 c
+   349 975 353 978 351 981 c
+   350 984 362 993 365 992 c
+   367 991 372 991 376 990 c
+   380 990 384 989 384 989 c
+   385 988 370 977 368 977 c
+   366 977 364 975 363 973 c
+   362 970 362 970 375 969 c
+   383 969 391 968 393 967 c
+   397 966 398 967 400 971 c
+   403 977 404 977 411 976 c
+   419 975 420 975 417 981 c
+   416 983 415 984 416 984 c
+   418 984 426 980 426 979 c
+   426 975 439 969 443 971 c
+   446 971 449 971 451 970 c
+   454 968 456 968 459 971 c
+   466 975 467 974 467 965 c
+   467 959 468 956 473 951 c
+   479 944 487 932 487 930 c
+   487 929 485 929 483 928 c
+   481 928 479 927 478 925 c
+   478 923 479 923 484 924 c
+   488 925 491 924 491 923 c
+   492 922 495 921 499 921 c
+   504 921 505 921 505 915 c
+   505 912 506 909 506 908 c
+   507 907 509 903 511 898 c
+   514 889 522 881 530 878 c
+   536 876 536 874 532 865 c
+   528 859 528 856 529 845 c
+   530 838 531 832 532 830 c
+   533 829 533 825 533 822 c
+   532 817 533 815 536 813 c
+   541 809 542 805 538 801 c
+   529 794 531 784 542 778 c
+   546 776 550 774 550 773 c
+   550 771 543 770 533 770 c
+   533 770 531 771 529 772 c
+   525 773 524 772 524 769 c
+   524 766 523 764 521 762 c
+   517 760 515 751 517 743 c
+   518 739 519 738 524 738 c
+   531 738 533 736 535 729 c
+   538 720 536 719 525 721 c
+   519 723 517 723 515 721 c
+   511 717 511 712 516 710 c
+   523 708 542 694 545 690 c
+   547 688 548 684 548 682 c
+   548 680 550 674 552 669 c
+   555 663 557 657 557 655 c
+   557 650 551 637 548 636 c
+   547 635 544 631 542 627 c
+   540 620 537 618 528 613 c
+   518 608 515 607 499 607 c
+   484 607 481 607 474 611 c
+   h f
+   482 670 m
+   482 671 481 672 479 672 c
+   477 672 476 672 476 670 c
+   476 667 481 667 482 670 c
+   h f
+   244 704 m
+   248 709 247 712 242 712 c
+   238 712 235 708 237 704 c
+   239 700 241 700 244 704 c
+   h f
+   234 728 m
+   234 729 233 730 231 729 c
+   230 729 228 728 227 726 c
+   227 725 228 724 230 725 c
+   232 725 233 726 234 728 c
+   h f
+   198 730 m
+   198 731 198 731 197 731 c
+   196 731 195 730 195 729 c
+   195 727 196 726 197 727 c
+   198 728 198 729 198 730 c
+   h f
+   425 923 m
+   426 924 428 925 431 925 c
+   434 925 438 927 439 928 c
+   441 930 444 932 446 932 c
+   450 933 450 934 451 942 c
+   451 951 451 952 447 952 c
+   445 952 441 953 439 955 c
+   435 957 434 957 425 954 c
+   414 950 l
+   412 955 l
+   410 959 406 961 406 957 c
+   406 956 407 954 408 952 c
+   410 949 410 948 406 945 c
+   402 941 402 941 400 945 c
+   399 948 396 952 392 954 c
+   388 958 385 959 381 958 c
+   378 958 376 958 375 959 c
+   374 960 372 961 369 962 c
+   366 962 363 964 361 965 c
+   358 969 349 971 349 968 c
+   349 967 346 965 342 964 c
+   334 960 335 960 334 964 c
+   334 966 331 968 328 968 c
+   325 969 323 970 323 972 c
+   323 974 325 975 332 972 c
+   335 971 336 972 336 974 c
+   336 981 333 984 326 984 c
+   322 984 318 983 318 982 c
+   318 981 316 981 313 981 c
+   309 982 305 981 302 980 c
+   300 978 296 976 294 975 c
+   292 974 289 972 288 971 c
+   286 968 286 968 291 966 c
+   296 964 296 960 290 959 c
+   286 959 282 955 284 952 c
+   286 950 296 945 299 945 c
+   301 945 303 946 304 947 c
+   307 951 309 949 309 944 c
+   309 941 310 939 312 938 c
+   315 936 344 936 344 938 c
+   344 940 356 938 360 935 c
+   364 931 367 932 372 937 c
+   377 941 378 941 379 939 c
+   379 937 382 936 385 936 c
+   387 936 391 934 393 932 c
+   397 928 400 928 408 932 c
+   412 935 413 935 413 933 c
+   413 925 422 918 425 923 c
+   h f
+   468 931 m
+   470 933 465 936 463 934 c
+   461 932 463 929 465 929 c
+   466 929 467 929 468 931 c
+   h f
+   424 963 m
+   424 965 421 967 419 966 c
+   418 964 420 961 422 961 c
+   423 961 424 962 424 963 c
+   h f
+   376 618 m
+   374 619 374 620 376 621 c
+   377 621 378 624 378 626 c
+   378 629 380 630 382 631 c
+   384 631 385 630 384 625 c
+   382 614 380 613 376 618 c
+   h f
+   390 635 m
+   390 639 395 642 397 641 c
+   399 640 398 639 396 636 c
+   393 632 390 632 390 635 c
+   h f
+   337 647 m
+   336 648 332 650 330 650 c
+   322 650 323 654 332 657 c
+   340 660 341 660 343 657 c
+   345 654 344 644 342 644 c
+   341 644 339 645 337 647 c
+   h f
+   304 694 m
+   304 695 305 696 307 696 c
+   308 696 309 695 309 694 c
+   308 693 307 692 306 692 c
+   305 692 304 693 304 694 c
+   h f
+   512 933 m
+   513 935 514 937 516 937 c
+   519 937 519 931 515 931 c
+   513 930 512 931 512 933 c
+   h f
+   386 975 m
+   384 977 385 978 388 979 c
+   391 980 392 979 392 977 c
+   391 974 388 973 386 975 c
+   h f
+   389 985 m
+   389 987 389 988 391 987 c
+   393 986 394 986 395 986 c
+   395 986 395 985 395 984 c
+   393 981 391 982 389 985 c
+   h f
+   0.92 0.57 0.30 rg
+   476 612 m
+   472 614 465 618 462 622 c
+   458 625 452 632 448 636 c
+   443 639 439 645 437 648 c
+   434 655 431 657 428 655 c
+   423 654 408 651 401 650 c
+   387 649 379 647 378 644 c
+   378 641 376 641 368 641 c
+   362 642 357 642 355 640 c
+   348 637 347 640 351 646 c
+   356 654 358 655 369 651 c
+   378 647 l
+   385 653 l
+   392 659 393 659 396 657 c
+   399 654 399 654 404 658 c
+   406 660 410 663 411 665 c
+   414 670 421 670 425 665 c
+   426 662 428 661 430 663 c
+   431 664 435 664 439 665 c
+   443 665 450 665 455 666 c
+   460 666 464 667 465 668 c
+   467 671 465 685 463 685 c
+   461 685 458 683 455 682 c
+   449 679 449 679 446 683 c
+   443 687 441 688 430 688 c
+   420 688 416 689 407 693 c
+   394 700 388 701 387 696 c
+   386 691 383 691 376 697 c
+   370 702 368 702 365 698 c
+   361 694 320 698 313 704 c
+   311 705 308 706 306 706 c
+   303 706 300 707 299 709 c
+   298 710 296 710 292 708 c
+   290 707 285 706 283 706 c
+   276 706 274 697 279 690 c
+   281 687 283 684 283 682 c
+   283 681 284 679 286 678 c
+   290 676 297 675 297 677 c
+   297 678 298 680 299 682 c
+   301 685 303 685 304 684 c
+   306 683 310 681 314 680 c
+   318 679 323 677 324 675 c
+   327 671 321 670 313 673 c
+   307 675 305 675 303 674 c
+   302 673 302 672 305 670 c
+   310 667 308 665 300 665 c
+   293 664 292 664 292 658 c
+   292 650 288 649 282 654 c
+   279 657 274 659 269 659 c
+   263 660 258 662 256 664 c
+   254 666 251 667 244 667 c
+   234 667 230 669 228 676 c
+   227 680 l
+   223 676 l
+   221 674 220 671 220 669 c
+   220 665 215 661 213 662 c
+   209 665 211 673 219 685 c
+   228 698 229 703 222 704 c
+   219 705 213 708 208 712 c
+   200 719 199 721 200 727 c
+   200 733 200 733 194 734 c
+   190 735 183 735 179 735 c
+   173 735 172 735 172 739 c
+   172 741 173 744 174 746 c
+   179 755 179 760 173 766 c
+   170 770 167 773 165 773 c
+   161 773 160 779 164 786 c
+   168 794 169 808 166 820 c
+   163 831 162 846 164 852 c
+   166 858 166 861 162 896 c
+   160 906 l
+   167 909 l
+   171 911 175 912 178 912 c
+   185 912 198 919 202 926 c
+   204 930 208 933 212 934 c
+   219 936 237 935 243 931 c
+   248 928 249 928 253 931 c
+   257 933 261 934 276 933 c
+   294 932 295 932 296 936 c
+   298 941 306 950 308 949 c
+   309 948 309 946 309 944 c
+   309 938 314 935 320 936 c
+   324 937 329 936 333 936 c
+   338 935 341 935 343 937 c
+   346 940 357 939 360 935 c
+   363 931 367 932 372 937 c
+   377 941 378 941 379 939 c
+   379 937 382 936 384 936 c
+   386 936 390 934 391 932 c
+   395 928 400 928 407 932 c
+   413 935 l
+   414 929 l
+   416 922 419 920 424 923 c
+   426 924 430 925 432 925 c
+   434 925 438 927 439 929 c
+   441 931 445 932 448 932 c
+   453 932 453 933 452 936 c
+   452 938 451 943 451 946 c
+   451 951 450 952 447 952 c
+   445 952 441 953 439 954 c
+   437 956 434 957 431 957 c
+   427 957 426 958 426 962 c
+   425 966 424 967 421 968 c
+   419 968 417 967 417 966 c
+   417 963 419 959 422 959 c
+   425 959 425 956 420 954 c
+   417 952 416 952 412 957 c
+   409 961 408 961 406 960 c
+   404 958 404 956 406 953 c
+   408 948 408 947 405 944 c
+   401 941 401 941 400 945 c
+   399 947 396 952 393 955 c
+   388 960 386 961 381 960 c
+   376 959 374 959 372 962 c
+   371 963 369 964 367 964 c
+   365 964 364 967 367 969 c
+   368 969 375 969 383 968 c
+   398 966 398 966 401 970 c
+   404 973 406 974 410 973 c
+   414 972 416 973 418 975 c
+   421 978 421 978 428 972 c
+   433 968 436 966 442 966 c
+   445 966 449 965 451 964 c
+   452 962 454 963 457 966 c
+   463 971 465 971 465 965 c
+   465 957 468 950 474 945 c
+   476 943 478 940 477 940 c
+   477 940 473 939 469 938 c
+   459 936 458 932 466 927 c
+   470 924 474 922 480 922 c
+   488 922 498 918 498 915 c
+   498 914 500 911 503 907 c
+   506 904 508 899 508 898 c
+   508 892 511 888 522 880 c
+   531 873 532 873 529 868 c
+   525 860 524 852 526 848 c
+   528 844 532 828 532 820 c
+   533 816 534 813 536 812 c
+   540 810 540 807 534 799 c
+   529 793 529 788 535 779 c
+   540 773 539 772 531 772 c
+   526 773 524 772 523 770 c
+   523 768 520 764 518 761 c
+   514 757 514 754 514 748 c
+   515 739 518 735 525 735 c
+   528 735 530 734 532 731 c
+   535 725 533 723 523 724 c
+   515 725 514 724 511 721 c
+   507 715 510 712 524 703 c
+   539 694 544 689 546 681 c
+   547 678 549 670 551 665 c
+   555 653 554 646 546 637 c
+   543 634 541 631 541 630 c
+   541 626 533 618 524 614 c
+   516 610 512 609 500 609 c
+   489 609 482 610 476 612 c
+   h f
+   483 670 m
+   483 671 482 672 480 672 c
+   478 672 476 671 476 670 c
+   476 666 482 667 483 670 c
+   h f
+   494 674 m
+   494 676 493 678 492 678 c
+   491 678 490 676 490 674 c
+   490 672 491 671 492 671 c
+   493 671 494 672 494 674 c
+   h f
+   444 696 m
+   444 697 443 697 442 697 c
+   441 697 440 697 440 696 c
+   440 695 441 694 442 694 c
+   443 694 444 695 444 696 c
+   h f
+   246 706 m
+   249 713 248 718 243 715 c
+   238 712 235 705 238 702 c
+   241 699 242 700 246 706 c
+   h f
+   235 725 m
+   238 726 240 728 240 729 c
+   240 732 231 732 226 729 c
+   218 723 226 720 235 725 c
+   h f
+   203 760 m
+   203 763 200 764 197 762 c
+   194 760 196 757 200 757 c
+   203 757 204 758 203 760 c
+   h f
+   495 909 m
+   496 910 495 911 494 911 c
+   493 911 492 910 492 909 c
+   492 908 493 907 493 907 c
+   493 907 494 908 495 909 c
+   h f
+   301 643 m
+   298 646 298 654 301 654 c
+   304 654 309 649 309 645 c
+   309 641 305 640 301 643 c
+   h f
+   338 647 m
+   336 649 332 650 330 650 c
+   322 650 323 654 332 657 c
+   337 658 341 659 342 659 c
+   344 658 344 644 342 644 c
+   341 644 339 645 338 647 c
+   h f
+   304 694 m
+   304 695 305 696 307 696 c
+   308 696 309 695 309 694 c
+   308 693 307 692 306 692 c
+   305 692 304 693 304 694 c
+   h f
+   278 947 m
+   279 950 279 954 278 957 c
+   276 961 276 963 279 965 c
+   284 970 284 971 277 972 c
+   272 974 272 974 275 978 c
+   276 980 280 982 284 983 c
+   287 984 291 986 292 988 c
+   295 992 299 992 305 989 c
+   313 984 311 982 297 980 c
+   296 980 292 977 290 974 c
+   285 969 l
+   289 967 l
+   294 963 295 961 290 961 c
+   288 961 285 959 284 956 c
+   281 952 281 952 287 948 c
+   291 946 293 944 293 944 c
+   293 943 290 943 285 943 c
+   278 943 277 943 278 947 c
+   h f
+   335 963 m
+   335 965 335 966 336 967 c
+   337 968 338 971 338 975 c
+   338 983 l
+   343 977 l
+   348 971 348 968 340 964 c
+   335 961 335 961 335 963 c
+   h f
+   353 972 m
+   350 975 352 983 357 987 c
+   363 991 375 989 373 985 c
+   373 983 372 981 372 980 c
+   372 979 371 979 370 979 c
+   369 979 366 977 363 974 c
+   359 969 356 969 353 972 c
+   h f
+   319 988 m
+   319 989 320 990 321 990 c
+   321 990 324 989 326 989 c
+   328 989 329 989 329 988 c
+   329 987 327 986 324 986 c
+   321 986 318 987 319 988 c
+   h f
+   0.95 0.56 0.14 rg
+   476 614 m
+   470 616 466 619 465 622 c
+   464 624 460 628 457 630 c
+   449 634 438 646 436 652 c
+   434 657 431 658 422 656 c
+   418 655 415 654 414 655 c
+   411 660 410 665 412 667 c
+   415 670 422 669 422 666 c
+   422 663 427 661 430 663 c
+   431 664 435 664 439 665 c
+   443 665 450 665 455 666 c
+   460 666 464 667 465 668 c
+   466 669 466 673 466 678 c
+   464 687 460 689 453 683 c
+   449 679 l
+   446 683 l
+   443 687 441 688 430 688 c
+   418 688 413 689 400 697 c
+   393 702 387 701 387 696 c
+   387 691 382 691 376 697 c
+   370 702 368 702 365 698 c
+   362 695 337 696 330 700 c
+   326 702 322 703 319 703 c
+   316 703 313 704 311 706 c
+   310 707 308 708 307 708 c
+   305 708 302 709 300 710 c
+   297 712 296 712 292 710 c
+   289 708 285 707 283 708 c
+   280 708 278 708 277 706 c
+   274 702 275 693 279 689 c
+   281 688 283 684 283 681 c
+   283 676 283 676 290 676 c
+   294 676 297 677 297 677 c
+   297 678 298 680 299 682 c
+   301 685 303 685 304 684 c
+   306 683 310 681 314 680 c
+   318 679 323 677 324 675 c
+   327 671 321 670 313 673 c
+   307 675 305 675 303 674 c
+   302 673 302 672 305 670 c
+   310 667 308 665 300 665 c
+   293 664 292 664 292 658 c
+   292 654 292 653 289 653 c
+   287 653 283 654 281 656 c
+   278 658 273 660 269 660 c
+   263 661 259 663 256 666 c
+   253 670 251 671 246 670 c
+   239 669 232 671 232 675 c
+   232 676 234 679 237 681 c
+   243 687 243 688 235 688 c
+   230 688 229 689 229 692 c
+   229 696 237 702 239 699 c
+   241 696 243 697 244 702 c
+   245 704 247 707 249 708 c
+   252 710 252 710 249 715 c
+   247 721 247 721 242 718 c
+   240 716 238 713 238 712 c
+   238 711 236 708 235 705 c
+   232 701 232 701 229 703 c
+   227 705 224 707 222 707 c
+   216 709 203 718 201 721 c
+   201 722 201 725 202 726 c
+   206 733 200 737 183 737 c
+   179 738 175 738 174 739 c
+   174 740 175 743 177 747 c
+   180 752 180 756 179 759 c
+   178 764 171 773 169 773 c
+   168 773 166 774 164 776 c
+   162 778 162 779 165 784 c
+   167 787 168 794 169 800 c
+   170 811 167 835 164 839 c
+   163 840 163 843 163 847 c
+   165 855 165 870 164 888 c
+   162 904 l
+   169 908 l
+   172 909 177 911 179 911 c
+   186 911 202 919 203 923 c
+   205 930 213 933 226 931 c
+   232 931 239 929 243 928 c
+   247 927 249 927 255 930 c
+   263 934 l
+   268 929 l
+   274 924 l
+   286 927 l
+   293 929 300 930 300 929 c
+   303 928 304 931 302 938 c
+   301 942 301 944 303 947 c
+   307 951 309 949 309 943 c
+   309 939 311 937 315 936 c
+   317 935 321 935 322 936 c
+   323 936 328 936 332 935 c
+   339 933 341 934 343 936 c
+   344 939 346 939 351 938 c
+   355 938 359 936 360 935 c
+   363 931 367 932 372 937 c
+   377 941 378 941 379 939 c
+   379 937 382 936 384 936 c
+   386 936 389 934 390 932 c
+   393 928 400 927 407 932 c
+   413 936 l
+   414 928 l
+   415 923 416 921 420 921 c
+   422 921 424 922 425 923 c
+   426 924 428 925 431 925 c
+   433 925 437 927 439 928 c
+   445 934 456 932 465 924 c
+   471 918 472 918 479 919 c
+   489 921 493 919 491 911 c
+   490 907 491 905 493 905 c
+   494 905 496 906 497 907 c
+   499 911 506 902 507 895 c
+   508 890 510 887 518 881 c
+   528 873 530 870 525 866 c
+   522 863 522 853 526 844 c
+   528 839 530 831 531 826 c
+   532 821 533 815 535 812 c
+   537 808 537 807 533 800 c
+   528 793 528 788 533 778 c
+   535 775 535 775 530 774 c
+   525 772 516 764 514 757 c
+   512 752 513 739 517 736 c
+   518 734 521 733 523 733 c
+   525 733 527 732 528 730 c
+   530 726 529 726 522 726 c
+   517 726 513 725 511 723 c
+   507 719 508 711 513 709 c
+   516 708 519 705 521 703 c
+   524 701 528 698 531 697 c
+   539 693 544 687 545 679 c
+   546 675 548 669 550 665 c
+   553 658 553 657 551 651 c
+   550 647 547 641 544 637 c
+   542 634 538 629 537 626 c
+   535 623 530 619 522 615 c
+   512 610 510 609 506 611 c
+   503 613 501 613 489 611 c
+   487 610 482 612 476 614 c
+   h f
+   284 669 m
+   284 670 284 671 283 671 c
+   282 672 281 671 281 670 c
+   281 668 282 667 283 667 c
+   284 667 284 668 284 669 c
+   h f
+   483 671 m
+   483 674 483 674 480 674 c
+   479 674 477 672 476 670 c
+   476 668 477 667 479 667 c
+   481 668 483 669 483 671 c
+   h f
+   496 671 m
+   496 674 493 678 491 678 c
+   488 678 486 673 489 670 c
+   491 667 496 668 496 671 c
+   h f
+   444 697 m
+   444 698 443 699 441 699 c
+   440 699 438 698 438 697 c
+   438 695 440 694 441 694 c
+   443 694 444 695 444 697 c
+   h f
+   329 712 m
+   329 713 329 714 328 714 c
+   328 714 327 713 327 712 c
+   326 711 326 710 327 710 c
+   328 710 329 711 329 712 c
+   h f
+   284 714 m
+   284 715 283 715 282 715 c
+   280 715 279 715 279 714 c
+   279 713 280 712 282 712 c
+   283 712 284 713 284 714 c
+   h f
+   223 717 m
+   225 719 227 721 229 721 c
+   234 721 243 726 243 729 c
+   243 733 239 735 231 733 c
+   222 731 219 727 218 719 c
+   216 713 220 711 223 717 c
+   h f
+   207 757 m
+   207 764 203 767 197 764 c
+   189 760 193 755 206 753 c
+   207 753 207 755 207 757 c
+   h f
+   185 771 m
+   184 775 180 775 180 772 c
+   180 770 182 769 183 769 c
+   185 769 186 770 185 771 c
+   h f
+   303 916 m
+   303 917 301 918 300 918 c
+   299 918 299 917 299 916 c
+   299 915 300 914 302 914 c
+   303 914 304 915 303 916 c
+   h f
+   351 646 m
+   356 654 358 655 368 651 c
+   373 649 379 648 380 648 c
+   382 648 383 648 382 648 c
+   380 647 379 645 378 644 c
+   377 641 376 640 371 641 c
+   363 643 362 643 354 641 c
+   347 640 l
+   351 646 l
+   h f
+   301 648 m
+   298 654 298 654 301 654 c
+   304 654 309 649 308 646 c
+   307 642 303 643 301 648 c
+   h f
+   338 647 m
+   336 650 333 651 330 650 c
+   322 650 323 654 332 657 c
+   337 658 341 659 342 659 c
+   344 657 344 644 342 644 c
+   341 644 339 645 338 647 c
+   h f
+   388 653 m
+   392 655 394 655 393 653 c
+   392 652 390 651 389 651 c
+   386 651 386 651 388 653 c
+   h f
+   400 652 m
+   399 654 404 659 406 657 c
+   406 657 406 655 404 653 c
+   402 652 401 651 400 652 c
+   h f
+   304 694 m
+   304 695 305 696 307 696 c
+   308 696 309 695 309 694 c
+   308 693 307 692 306 692 c
+   305 692 304 693 304 694 c
+   h f
+   452 940 m
+   452 942 451 945 451 948 c
+   451 951 450 952 446 952 c
+   444 952 440 954 438 956 c
+   435 959 433 961 432 961 c
+   430 961 430 962 430 964 c
+   430 966 431 966 434 965 c
+   437 964 441 964 443 964 c
+   445 964 448 964 448 963 c
+   450 960 457 960 460 963 c
+   461 965 462 964 463 962 c
+   469 944 469 944 465 941 c
+   460 937 454 937 452 940 c
+   h f
+   400 944 m
+   398 949 399 952 402 952 c
+   405 952 407 946 404 943 c
+   402 941 401 941 400 944 c
+   h f
+   278 944 m
+   277 947 280 950 283 949 c
+   286 948 286 947 284 945 c
+   282 943 280 942 278 944 c
+   h f
+   393 953 m
+   392 954 392 956 392 957 c
+   392 961 388 963 382 962 c
+   377 960 370 964 371 966 c
+   372 968 384 967 392 964 c
+   394 963 397 963 398 965 c
+   408 974 408 973 415 963 c
+   418 956 419 955 416 958 c
+   411 962 406 962 401 956 c
+   396 952 395 951 393 953 c
+   h f
+   279 960 m
+   279 963 280 966 281 967 c
+   284 969 283 973 280 973 c
+   277 973 276 980 279 981 c
+   280 982 283 982 285 981 c
+   288 980 288 979 287 975 c
+   287 971 287 968 289 966 c
+   292 963 292 963 289 963 c
+   287 963 285 962 284 959 c
+   283 952 279 952 279 960 c
+   h f
+   335 963 m
+   335 965 335 966 336 966 c
+   337 966 338 965 338 965 c
+   338 964 337 962 336 962 c
+   335 961 335 962 335 963 c
+   h f
+   354 975 m
+   351 977 353 982 357 985 c
+   363 989 366 988 368 984 c
+   372 978 358 970 354 975 c
+   h f
+   296 984 m
+   294 988 298 991 301 987 c
+   303 985 304 983 303 982 c
+   301 979 297 980 296 984 c
+   h f
+   307 984 m
+   306 985 306 986 307 986 c
+   308 986 310 985 310 984 c
+   311 983 311 982 310 982 c
+   309 982 307 983 307 984 c
+   h f
+   322 988 m
+   322 989 323 989 324 989 c
+   325 989 326 989 326 988 c
+   326 987 325 986 324 986 c
+   323 986 322 987 322 988 c
+   h f
+   0.82 0.44 0.32 rg
+   473 615 m
+   471 616 468 619 467 621 c
+   466 624 462 628 458 630 c
+   450 634 438 646 436 652 c
+   434 657 431 658 422 656 c
+   418 655 415 654 414 655 c
+   411 660 410 665 412 667 c
+   415 670 422 669 422 666 c
+   422 663 427 661 430 663 c
+   431 664 435 664 439 665 c
+   468 666 467 666 466 676 c
+   465 686 461 689 455 686 c
+   453 685 452 684 452 683 c
+   452 682 452 681 451 680 c
+   450 680 447 681 446 683 c
+   443 687 441 688 430 688 c
+   418 688 413 689 400 697 c
+   393 702 387 701 387 696 c
+   387 691 382 691 376 697 c
+   370 702 368 702 365 698 c
+   363 696 356 696 336 697 c
+   334 697 332 699 330 700 c
+   328 702 324 703 320 703 c
+   317 703 313 704 311 705 c
+   304 711 300 712 293 711 c
+   286 710 l
+   286 717 l
+   285 723 285 723 280 724 c
+   278 724 274 725 273 726 c
+   272 727 267 728 262 728 c
+   254 728 253 729 247 734 c
+   240 742 238 742 230 736 c
+   222 731 218 730 215 734 c
+   214 735 209 736 204 736 c
+   199 736 193 738 190 739 c
+   188 741 185 742 183 742 c
+   180 742 180 749 183 754 c
+   185 757 186 757 189 755 c
+   191 753 196 751 202 749 c
+   211 747 211 747 216 752 c
+   219 755 222 758 222 759 c
+   222 762 206 769 200 769 c
+   196 769 193 771 189 775 c
+   185 780 182 782 178 782 c
+   173 782 172 782 170 792 c
+   169 798 169 803 170 806 c
+   171 809 171 813 171 816 c
+   170 819 169 824 169 827 c
+   169 831 167 835 165 837 c
+   162 841 162 846 165 852 c
+   166 856 166 862 165 876 c
+   164 887 163 897 164 899 c
+   165 905 175 910 185 912 c
+   197 913 206 917 206 920 c
+   206 923 213 930 217 930 c
+   218 930 220 929 222 928 c
+   225 924 229 924 234 928 c
+   237 930 239 930 241 929 c
+   246 926 255 928 259 931 c
+   262 935 266 933 268 928 c
+   270 923 274 922 282 925 c
+   290 928 295 926 295 918 c
+   296 913 297 911 300 911 c
+   305 910 309 915 306 921 c
+   305 924 305 926 306 929 c
+   308 931 308 933 304 938 c
+   300 943 300 943 303 947 c
+   307 951 309 950 309 943 c
+   309 939 311 937 315 936 c
+   317 935 321 935 322 936 c
+   323 936 328 936 332 935 c
+   339 933 341 934 343 936 c
+   344 939 346 939 351 938 c
+   355 938 359 936 360 935 c
+   363 931 367 932 372 937 c
+   377 941 378 941 379 939 c
+   379 937 382 936 384 936 c
+   386 936 389 934 390 932 c
+   393 928 400 927 407 932 c
+   413 936 l
+   414 928 l
+   415 923 416 921 420 921 c
+   422 921 424 922 425 923 c
+   426 924 428 925 431 925 c
+   434 925 438 927 439 929 c
+   443 932 449 934 447 930 c
+   446 929 448 929 451 929 c
+   455 929 458 927 462 923 c
+   467 918 468 917 474 918 c
+   482 920 487 917 486 912 c
+   484 907 488 903 495 903 c
+   502 903 505 901 505 894 c
+   505 889 513 880 518 880 c
+   522 880 526 874 524 870 c
+   524 868 522 866 521 865 c
+   518 863 519 854 523 847 c
+   528 840 532 830 532 822 c
+   532 819 533 815 535 812 c
+   538 807 538 807 533 802 c
+   529 798 528 796 529 792 c
+   532 775 532 775 528 773 c
+   519 769 512 759 511 751 c
+   510 740 515 731 523 731 c
+   526 731 528 731 527 730 c
+   526 728 524 728 522 729 c
+   518 730 508 724 506 720 c
+   503 713 513 703 532 693 c
+   539 690 540 688 544 677 c
+   548 664 550 646 548 643 c
+   547 642 545 640 543 639 c
+   541 638 538 634 535 629 c
+   528 617 522 614 498 614 c
+   486 614 475 614 473 615 c
+   h f
+   483 672 m
+   484 676 482 677 478 674 c
+   475 671 476 667 479 667 c
+   481 668 483 670 483 672 c
+   h f
+   495 669 m
+   497 671 494 678 492 678 c
+   490 678 488 677 487 676 c
+   486 674 486 673 488 670 c
+   491 667 493 666 495 669 c
+   h f
+   444 697 m
+   444 699 443 701 441 701 c
+   438 701 437 699 438 696 c
+   439 693 444 693 444 697 c
+   h f
+   328 710 m
+   330 713 328 714 326 711 c
+   324 709 324 708 325 708 c
+   326 708 328 709 328 710 c
+   h f
+   351 646 m
+   356 654 358 655 368 651 c
+   373 649 379 648 380 648 c
+   382 648 383 648 382 648 c
+   380 647 379 645 378 644 c
+   377 641 376 640 371 641 c
+   363 643 362 643 354 641 c
+   347 640 l
+   351 646 l
+   h f
+   301 648 m
+   298 654 298 654 301 654 c
+   304 654 309 649 308 646 c
+   307 642 303 643 301 648 c
+   h f
+   338 647 m
+   336 650 333 651 330 650 c
+   322 650 323 654 332 657 c
+   337 658 341 659 342 659 c
+   344 657 344 644 342 644 c
+   341 644 339 645 338 647 c
+   h f
+   400 652 m
+   399 654 404 659 406 657 c
+   406 657 406 655 404 653 c
+   402 652 401 651 400 652 c
+   h f
+   280 656 m
+   278 658 274 660 271 660 c
+   264 660 258 663 258 667 c
+   258 668 256 670 254 670 c
+   231 672 229 673 237 679 c
+   239 680 241 682 241 683 c
+   239 684 244 688 247 688 c
+   251 688 251 691 248 693 c
+   245 695 238 696 239 694 c
+   239 693 238 692 236 692 c
+   234 692 232 693 232 694 c
+   232 695 233 696 234 696 c
+   235 696 236 696 235 697 c
+   235 698 235 699 236 700 c
+   237 701 238 700 239 699 c
+   241 696 243 697 244 702 c
+   245 704 247 708 250 709 c
+   252 711 254 713 253 714 c
+   252 715 252 717 253 719 c
+   254 722 256 723 260 723 c
+   264 723 267 721 271 716 c
+   275 710 276 708 276 701 c
+   275 695 276 692 279 689 c
+   281 688 283 684 283 681 c
+   283 676 283 676 290 676 c
+   294 676 297 677 297 677 c
+   297 678 298 680 299 682 c
+   301 685 303 685 304 684 c
+   306 683 310 681 314 680 c
+   318 679 323 677 324 675 c
+   327 671 321 670 313 673 c
+   307 675 305 675 303 674 c
+   302 673 302 672 305 670 c
+   310 667 308 665 300 665 c
+   293 664 292 664 292 658 c
+   292 654 292 653 289 653 c
+   287 653 283 654 280 656 c
+   h f
+   284 669 m
+   284 670 284 671 283 671 c
+   282 672 281 671 281 670 c
+   281 668 282 667 283 667 c
+   284 667 284 668 284 669 c
+   h f
+   304 694 m
+   304 695 305 696 307 696 c
+   308 696 309 695 309 694 c
+   308 693 307 692 306 692 c
+   305 692 304 693 304 694 c
+   h f
+   229 709 m
+   228 714 230 718 234 719 c
+   238 719 238 719 237 713 c
+   237 707 231 704 229 709 c
+   h f
+   209 723 m
+   209 724 210 724 211 724 c
+   212 724 213 724 213 723 c
+   213 722 212 721 211 721 c
+   210 721 209 722 209 723 c
+   h f
+   452 940 m
+   452 942 451 945 451 948 c
+   451 951 450 952 447 952 c
+   442 952 437 955 437 958 c
+   437 961 438 961 448 960 c
+   459 959 464 956 463 950 c
+   463 949 461 947 459 946 c
+   457 945 455 942 454 940 c
+   454 937 454 937 452 940 c
+   h f
+   400 944 m
+   398 949 399 952 402 952 c
+   405 952 407 946 404 943 c
+   402 941 401 941 400 944 c
+   h f
+   278 944 m
+   277 947 280 950 283 949 c
+   286 948 286 947 284 945 c
+   282 943 280 942 278 944 c
+   h f
+   393 954 m
+   391 958 397 966 403 968 c
+   407 969 408 969 410 966 c
+   412 962 412 961 408 961 c
+   407 961 403 959 400 956 c
+   395 951 394 951 393 954 c
+   h f
+   279 960 m
+   279 963 280 966 281 967 c
+   284 969 283 973 280 973 c
+   276 973 276 980 280 982 c
+   284 983 288 977 287 973 c
+   286 971 287 968 289 966 c
+   292 963 292 963 289 963 c
+   287 963 285 962 284 959 c
+   283 952 279 952 279 960 c
+   h f
+   335 963 m
+   335 965 335 966 336 966 c
+   337 966 338 965 338 965 c
+   338 964 337 962 336 962 c
+   335 961 335 962 335 963 c
+   h f
+   377 962 m
+   375 964 376 966 380 966 c
+   385 966 386 964 382 962 c
+   378 961 378 961 377 962 c
+   h f
+   356 975 m
+   353 975 352 976 353 979 c
+   354 984 364 988 368 984 c
+   370 982 370 981 367 978 c
+   364 975 362 973 362 974 c
+   361 974 359 974 356 975 c
+   h f
+   296 984 m
+   294 988 298 991 301 987 c
+   303 985 304 983 303 982 c
+   301 979 297 980 296 984 c
+   h f
+   307 984 m
+   306 985 306 986 307 986 c
+   308 986 310 985 310 984 c
+   311 983 311 982 310 982 c
+   309 982 307 983 307 984 c
+   h f
+   322 988 m
+   322 989 323 989 324 989 c
+   325 989 326 989 326 988 c
+   326 987 325 986 324 986 c
+   323 986 322 987 322 988 c
+   h f
+   0.93 0.42 0.05 rg
+   475 616 m
+   471 617 468 620 466 622 c
+   465 624 462 627 461 628 c
+   453 632 448 638 441 649 c
+   436 655 433 660 433 661 c
+   433 662 449 663 457 663 c
+   461 663 465 664 467 665 c
+   470 667 472 667 474 665 c
+   477 664 480 664 485 665 c
+   495 669 497 670 497 674 c
+   497 679 489 682 488 677 c
+   487 675 485 675 482 675 c
+   479 676 477 675 474 673 c
+   470 670 469 671 469 681 c
+   468 687 468 688 463 687 c
+   460 687 456 687 454 686 c
+   451 686 450 687 448 692 c
+   447 695 445 698 444 699 c
+   441 703 437 700 437 695 c
+   437 691 436 691 428 690 c
+   421 689 418 690 411 695 c
+   399 703 393 704 387 700 c
+   382 697 379 697 375 701 c
+   371 705 369 705 364 701 c
+   361 699 357 698 349 699 c
+   343 699 337 700 335 701 c
+   333 702 328 703 323 704 c
+   319 704 314 706 314 707 c
+   313 707 311 708 309 708 c
+   307 708 304 710 301 711 c
+   298 714 296 714 293 712 c
+   288 709 286 710 286 717 c
+   285 723 285 723 280 724 c
+   278 724 274 725 273 726 c
+   272 727 267 728 262 728 c
+   254 728 253 729 247 734 c
+   240 742 238 742 230 736 c
+   222 731 218 730 215 734 c
+   214 735 209 736 204 736 c
+   199 736 193 738 190 739 c
+   188 741 185 742 183 742 c
+   180 742 180 749 183 754 c
+   185 757 186 757 189 755 c
+   191 753 196 751 202 749 c
+   211 747 211 747 216 752 c
+   219 755 222 758 222 759 c
+   222 762 206 769 200 769 c
+   196 769 193 771 189 775 c
+   185 780 182 782 178 782 c
+   172 782 172 782 171 791 c
+   170 796 170 804 170 809 c
+   170 813 170 821 169 826 c
+   168 830 167 845 167 858 c
+   167 871 166 886 165 892 c
+   164 903 l
+   169 906 l
+   172 908 176 909 178 909 c
+   184 909 204 917 205 919 c
+   207 924 213 930 216 930 c
+   218 930 220 929 222 927 c
+   225 925 226 925 231 926 c
+   233 927 237 927 238 927 c
+   242 924 251 925 255 928 c
+   260 931 266 931 269 926 c
+   271 923 272 922 280 925 c
+   292 928 295 926 295 918 c
+   296 913 297 911 300 911 c
+   306 910 309 915 306 921 c
+   305 924 305 926 306 928 c
+   307 929 307 932 307 934 c
+   305 938 l
+   310 934 l
+   314 931 316 931 321 932 c
+   324 933 330 934 335 933 c
+   340 932 344 933 344 934 c
+   346 937 352 936 358 932 c
+   363 928 363 928 369 931 c
+   374 934 376 934 383 932 c
+   387 931 390 929 390 928 c
+   390 927 394 927 400 927 c
+   410 928 411 927 411 924 c
+   412 922 413 919 415 919 c
+   419 917 436 922 441 926 c
+   448 931 456 929 464 921 c
+   471 914 476 913 479 916 c
+   482 919 487 917 486 912 c
+   484 907 488 903 495 903 c
+   502 903 505 901 505 894 c
+   505 890 509 885 518 880 c
+   524 876 526 870 522 866 c
+   518 862 518 856 522 848 c
+   524 845 527 836 528 829 c
+   529 822 531 814 533 812 c
+   535 807 535 806 532 801 c
+   528 796 528 791 531 780 c
+   532 777 531 776 529 776 c
+   525 776 519 771 519 768 c
+   519 767 517 765 515 763 c
+   507 753 511 731 522 731 c
+   524 731 526 731 526 729 c
+   526 728 525 728 522 729 c
+   518 730 508 724 506 720 c
+   503 713 513 703 532 693 c
+   539 690 540 688 543 679 c
+   548 665 550 650 548 646 c
+   547 644 544 640 541 637 c
+   538 634 535 629 533 626 c
+   528 617 521 614 500 614 c
+   490 614 479 615 475 616 c
+   h f
+   332 712 m
+   333 714 332 716 330 717 c
+   327 718 321 713 323 710 c
+   325 707 332 709 332 712 c
+   h f
+   357 647 m
+   356 648 357 651 360 651 c
+   361 651 361 650 361 648 c
+   361 645 359 645 357 647 c
+   h f
+   280 660 m
+   274 663 274 666 280 664 c
+   287 663 289 660 287 658 c
+   286 657 283 658 280 660 c
+   h f
+   418 660 m
+   417 661 418 662 419 662 c
+   420 663 421 662 421 661 c
+   421 658 419 657 418 660 c
+   h f
+   260 667 m
+   258 669 256 671 256 673 c
+   256 674 253 674 246 673 c
+   238 672 236 673 236 675 c
+   236 678 244 687 247 687 c
+   250 687 251 690 249 693 c
+   246 696 248 705 252 705 c
+   257 705 258 708 255 712 c
+   250 717 253 723 260 722 c
+   264 722 267 721 271 716 c
+   275 711 276 708 275 706 c
+   273 703 273 694 276 687 c
+   278 682 277 681 275 678 c
+   273 676 270 674 268 674 c
+   266 674 265 673 264 668 c
+   264 663 l
+   260 667 l
+   h f
+   291 671 m
+   291 672 293 672 293 671 c
+   296 670 296 669 292 669 c
+   291 669 290 670 291 671 c
+   h f
+   232 694 m
+   232 695 234 696 235 696 c
+   236 696 238 695 239 694 c
+   239 693 238 692 236 692 c
+   234 692 232 693 232 694 c
+   h f
+   230 709 m
+   228 714 230 718 234 719 c
+   239 719 239 719 235 712 c
+   232 706 231 705 230 709 c
+   h f
+   209 723 m
+   209 724 210 724 211 724 c
+   212 724 213 724 213 723 c
+   213 722 212 721 211 721 c
+   210 721 209 722 209 723 c
+   h f
+   455 951 m
+   453 955 451 956 448 956 c
+   446 955 442 956 440 958 c
+   436 961 436 961 440 961 c
+   452 961 460 958 462 954 c
+   464 951 463 949 462 947 c
+   459 944 458 944 455 951 c
+   h f
+   395 957 m
+   393 960 395 963 398 963 c
+   401 963 401 962 400 958 c
+   399 955 396 955 395 957 c
+   h f
+   377 962 m
+   375 964 376 966 380 966 c
+   385 966 386 964 382 962 c
+   378 961 378 961 377 962 c
+   h f
+   405 966 m
+   405 967 406 968 407 968 c
+   408 968 409 967 409 966 c
+   410 965 409 964 407 964 c
+   405 964 404 965 405 966 c
+   h f
+   283 977 m
+   281 978 281 978 283 979 c
+   285 980 286 979 286 978 c
+   286 975 286 975 283 977 c
+   h f
+   357 981 m
+   360 985 365 988 367 985 c
+   369 983 361 975 357 975 c
+   354 975 354 976 357 981 c
+   h f
+   0.91 0.31 0.05 rg
+   473 617 m
+   471 618 469 620 469 621 c
+   469 623 464 627 459 631 c
+   452 635 446 642 441 648 c
+   437 654 433 659 433 660 c
+   433 661 441 662 459 664 c
+   468 665 471 665 478 665 c
+   490 665 503 667 505 669 c
+   511 674 526 669 526 661 c
+   526 659 528 658 529 658 c
+   531 658 534 657 536 655 c
+   537 653 541 651 543 650 c
+   548 648 548 643 543 642 c
+   538 641 534 637 532 629 c
+   529 619 524 616 504 617 c
+   495 617 485 617 482 616 c
+   479 616 475 616 473 617 c
+   h f
+   357 647 m
+   356 648 357 651 360 651 c
+   361 651 361 650 361 648 c
+   361 645 359 645 357 647 c
+   h f
+   280 660 m
+   274 663 274 666 280 664 c
+   287 663 289 660 287 658 c
+   286 657 283 658 280 660 c
+   h f
+   531 662 m
+   529 663 528 667 527 670 c
+   526 674 525 677 525 678 c
+   524 679 511 675 504 672 c
+   500 670 498 670 498 674 c
+   498 680 493 682 488 679 c
+   485 677 483 676 482 677 c
+   481 677 478 676 476 674 c
+   470 670 469 671 469 680 c
+   469 686 468 687 465 688 c
+   462 689 459 692 457 693 c
+   455 695 452 697 450 699 c
+   447 700 447 701 449 703 c
+   452 707 451 707 443 707 c
+   435 707 434 707 434 703 c
+   434 700 435 697 436 695 c
+   437 691 436 691 428 690 c
+   421 689 418 690 413 693 c
+   406 697 406 698 409 700 c
+   414 703 411 706 405 703 c
+   403 702 399 702 396 702 c
+   394 703 390 702 387 700 c
+   382 697 379 697 375 701 c
+   371 705 369 705 364 701 c
+   361 699 357 698 349 699 c
+   334 699 331 701 332 709 c
+   333 717 329 719 324 715 c
+   320 711 318 711 318 716 c
+   318 719 317 721 316 721 c
+   315 721 313 722 311 723 c
+   308 726 308 726 302 722 c
+   298 720 295 717 295 716 c
+   295 710 292 714 291 721 c
+   290 731 292 732 299 730 c
+   304 728 305 728 307 731 c
+   310 736 313 736 316 731 c
+   321 724 336 729 336 738 c
+   336 741 335 741 328 740 c
+   319 739 313 741 308 747 c
+   306 750 297 749 297 745 c
+   297 744 296 742 295 741 c
+   294 739 293 739 288 742 c
+   285 745 282 749 281 751 c
+   280 753 278 755 276 755 c
+   273 755 270 747 271 742 c
+   272 739 271 739 263 740 c
+   257 740 250 741 247 742 c
+   237 745 228 744 226 739 c
+   224 734 221 734 219 739 c
+   217 742 217 743 221 747 c
+   224 749 229 752 232 752 c
+   241 754 245 762 236 762 c
+   234 762 231 764 228 766 c
+   226 769 222 770 215 770 c
+   204 771 202 772 190 781 c
+   186 784 181 787 180 787 c
+   178 787 176 789 174 791 c
+   171 794 171 798 171 814 c
+   171 825 170 834 168 837 c
+   167 840 166 845 167 855 c
+   168 862 167 875 166 882 c
+   165 890 165 897 165 899 c
+   168 905 177 909 190 910 c
+   204 911 208 913 211 923 c
+   213 928 216 931 216 927 c
+   216 926 219 924 222 922 c
+   228 919 236 920 236 924 c
+   236 925 239 926 247 926 c
+   253 926 258 927 260 928 c
+   262 930 263 930 265 926 c
+   268 920 278 918 283 922 c
+   287 926 292 925 292 918 c
+   292 916 293 911 295 909 c
+   298 905 299 905 302 906 c
+   306 909 313 920 312 922 c
+   311 923 311 926 310 929 c
+   310 933 310 934 313 932 c
+   315 931 317 931 317 932 c
+   317 932 318 931 319 929 c
+   322 926 322 926 325 930 c
+   327 933 329 933 331 932 c
+   334 930 341 932 344 934 c
+   347 937 352 936 358 932 c
+   363 928 363 928 369 931 c
+   376 934 383 934 389 929 c
+   391 927 395 927 401 927 c
+   410 928 411 927 411 924 c
+   412 922 413 919 415 919 c
+   419 918 433 921 440 925 c
+   443 927 445 927 446 925 c
+   447 924 450 923 453 923 c
+   455 923 459 922 461 920 c
+   465 915 475 913 479 916 c
+   481 918 481 917 481 913 c
+   481 906 486 902 493 902 c
+   500 902 503 899 503 893 c
+   503 887 507 883 516 879 c
+   519 878 523 876 523 874 c
+   524 873 521 869 518 865 c
+   515 862 512 858 512 857 c
+   512 857 515 853 519 849 c
+   525 843 526 841 528 830 c
+   529 822 531 814 533 811 c
+   536 806 536 806 532 803 c
+   528 800 528 799 529 789 c
+   530 778 530 777 526 775 c
+   524 774 521 772 520 770 c
+   519 768 517 765 514 763 c
+   512 762 509 756 507 752 c
+   506 747 503 742 502 741 c
+   500 738 504 735 509 735 c
+   515 735 515 729 509 725 c
+   506 722 503 719 503 717 c
+   503 714 510 702 514 700 c
+   516 698 517 696 517 695 c
+   517 691 521 689 529 689 c
+   535 689 536 689 538 685 c
+   548 665 548 660 539 660 c
+   536 661 532 661 531 662 c
+   h f
+   483 691 m
+   483 692 482 692 481 693 c
+   480 694 480 693 480 692 c
+   480 691 480 690 481 690 c
+   482 690 483 691 483 691 c
+   h f
+   423 703 m
+   424 704 423 705 421 705 c
+   418 705 417 704 418 703 c
+   418 702 420 701 421 701 c
+   421 701 423 702 423 703 c
+   h f
+   485 709 m
+   485 711 484 712 482 712 c
+   478 712 479 713 488 722 c
+   498 731 497 734 487 726 c
+   480 720 l
+   472 726 l
+   463 732 463 732 461 729 c
+   459 727 458 723 459 721 c
+   459 717 460 716 468 715 c
+   476 713 478 712 478 709 c
+   478 707 478 705 479 704 c
+   481 702 485 706 485 709 c
+   h f
+   423 721 m
+   422 722 420 726 417 730 c
+   410 742 399 741 402 728 c
+   403 720 405 719 416 719 c
+   422 719 424 720 423 721 c
+   h f
+   393 728 m
+   397 730 395 736 392 736 c
+   388 737 385 731 387 728 c
+   389 726 390 726 393 728 c
+   h f
+   335 897 m
+   335 898 334 899 333 900 c
+   332 900 331 899 331 897 c
+   331 896 332 895 333 895 c
+   334 895 335 896 335 897 c
+   h f
+   336 924 m
+   336 925 336 927 335 928 c
+   334 928 333 928 333 928 c
+   333 927 332 926 332 924 c
+   331 922 332 921 333 921 c
+   335 921 336 923 336 924 c
+   h f
+   261 665 m
+   259 666 259 667 261 669 c
+   263 672 265 670 264 666 c
+   264 664 263 664 261 665 c
+   h f
+   291 671 m
+   291 672 293 672 293 671 c
+   296 670 296 669 292 669 c
+   291 669 290 670 291 671 c
+   h f
+   236 675 m
+   236 676 238 677 241 678 c
+   243 679 245 681 245 682 c
+   245 683 247 685 249 685 c
+   252 686 252 688 252 693 c
+   251 698 252 700 255 702 c
+   259 704 259 706 257 709 c
+   255 714 256 719 259 719 c
+   260 719 261 717 261 716 c
+   261 714 263 711 266 709 c
+   268 707 271 703 271 701 c
+   271 699 273 694 275 690 c
+   277 685 277 682 276 680 c
+   274 676 264 675 258 678 c
+   252 681 247 680 250 677 c
+   252 675 251 674 244 675 c
+   240 675 236 675 236 675 c
+   h f
+   232 713 m
+   232 714 233 715 234 715 c
+   235 715 236 715 236 714 c
+   236 713 235 711 234 711 c
+   233 710 232 711 232 713 c
+   h f
+   195 739 m
+   192 741 194 746 198 745 c
+   200 745 201 744 202 742 c
+   202 739 198 737 195 739 c
+   h f
+   453 954 m
+   451 957 451 957 454 957 c
+   456 957 458 955 458 953 c
+   459 949 456 949 453 954 c
+   h f
+   441 957 m
+   441 958 442 959 445 959 c
+   447 959 449 958 449 957 c
+   449 956 448 955 446 955 c
+   444 955 442 956 441 957 c
+   h f
+   356 979 m
+   357 982 363 985 364 984 c
+   365 983 365 982 364 980 c
+   363 977 355 976 356 979 c
+   h f
+   0.82 0.30 0.07 rg
+   474 616 m
+   472 617 471 619 471 621 c
+   471 625 469 627 462 630 c
+   458 632 452 635 450 636 c
+   447 639 433 659 433 661 c
+   433 662 449 663 457 663 c
+   461 663 465 664 467 665 c
+   469 666 472 666 475 665 c
+   478 664 480 664 483 665 c
+   486 667 488 667 489 665 c
+   492 663 504 663 506 665 c
+   506 666 510 667 513 667 c
+   518 667 520 666 521 663 c
+   522 660 525 658 527 657 c
+   529 656 535 653 539 651 c
+   548 647 550 642 543 643 c
+   540 643 537 642 534 641 c
+   531 638 530 636 530 630 c
+   530 619 528 618 507 620 c
+   491 622 489 622 485 619 c
+   480 615 479 615 474 616 c
+   h f
+   357 647 m
+   356 648 357 651 360 651 c
+   361 651 361 650 361 648 c
+   361 645 359 645 357 647 c
+   h f
+   280 660 m
+   274 663 274 666 280 664 c
+   287 663 289 660 287 658 c
+   286 657 283 658 280 660 c
+   h f
+   261 665 m
+   259 666 259 667 261 669 c
+   263 672 265 670 264 666 c
+   264 664 263 664 261 665 c
+   h f
+   532 670 m
+   529 675 529 680 532 683 c
+   535 689 542 675 539 669 c
+   536 664 534 664 532 670 c
+   h f
+   291 671 m
+   291 672 293 672 293 671 c
+   296 670 296 669 292 669 c
+   291 669 290 670 291 671 c
+   h f
+   470 672 m
+   469 672 469 676 469 680 c
+   469 683 468 687 467 688 c
+   466 689 466 689 467 690 c
+   469 692 469 692 466 693 c
+   457 696 453 698 453 699 c
+   453 700 455 703 457 706 c
+   460 710 462 710 467 709 c
+   473 708 478 701 478 694 c
+   478 689 481 688 484 690 c
+   486 692 486 693 485 696 c
+   483 698 483 700 486 703 c
+   487 705 489 709 489 712 c
+   489 717 502 731 507 731 c
+   512 731 511 729 506 725 c
+   503 724 501 721 501 719 c
+   501 713 510 696 516 691 c
+   520 688 523 685 523 684 c
+   523 682 511 678 509 679 c
+   507 679 504 678 502 675 c
+   498 670 l
+   497 674 l
+   497 677 497 680 497 682 c
+   497 685 495 686 490 684 c
+   488 684 487 682 487 681 c
+   487 679 485 678 483 678 c
+   481 678 477 676 475 674 c
+   473 672 471 671 470 672 c
+   h f
+   236 675 m
+   236 676 238 677 241 678 c
+   243 679 245 681 245 682 c
+   245 683 247 685 249 685 c
+   252 686 252 688 252 693 c
+   251 698 252 700 255 702 c
+   258 704 259 706 257 708 c
+   255 713 255 714 258 714 c
+   261 714 272 702 272 700 c
+   271 699 273 695 274 691 c
+   277 685 277 682 276 680 c
+   274 676 264 675 258 678 c
+   252 681 247 680 250 677 c
+   252 675 251 674 244 675 c
+   240 675 236 675 236 675 c
+   h f
+   413 693 m
+   408 697 406 698 408 699 c
+   410 699 412 701 413 703 c
+   415 705 416 705 417 703 c
+   418 701 420 701 422 702 c
+   425 703 425 703 421 705 c
+   416 708 413 708 407 704 c
+   401 701 390 702 390 706 c
+   390 709 386 709 385 705 c
+   385 703 383 701 381 700 c
+   379 698 377 698 375 701 c
+   371 705 369 705 364 701 c
+   360 698 345 697 336 700 c
+   333 701 333 702 335 705 c
+   337 708 337 709 335 709 c
+   334 710 333 711 333 713 c
+   333 717 328 718 324 714 c
+   320 711 320 711 323 717 c
+   325 723 326 723 332 723 c
+   335 723 340 722 341 720 c
+   343 718 345 717 346 717 c
+   349 717 347 721 343 725 c
+   339 729 338 730 340 734 c
+   341 737 343 741 345 743 c
+   347 745 347 746 346 748 c
+   344 750 342 750 338 747 c
+   334 745 332 745 328 746 c
+   326 747 322 748 320 748 c
+   318 748 314 749 311 751 c
+   305 756 295 755 290 750 c
+   286 747 285 747 285 752 c
+   285 757 284 758 280 758 c
+   276 759 275 760 275 763 c
+   276 768 272 770 270 767 c
+   268 766 268 765 270 762 c
+   271 760 271 758 270 757 c
+   269 757 268 755 268 753 c
+   268 746 253 741 249 746 c
+   248 748 247 753 246 758 c
+   246 766 l
+   239 766 l
+   234 765 232 766 230 770 c
+   227 774 226 774 217 773 c
+   207 772 206 772 195 781 c
+   189 785 183 789 182 789 c
+   180 789 178 791 176 793 c
+   173 796 173 799 173 812 c
+   173 822 173 828 172 829 c
+   171 830 170 832 170 835 c
+   170 837 169 839 168 840 c
+   167 841 166 846 167 855 c
+   168 862 167 875 166 882 c
+   164 898 164 900 172 905 c
+   177 909 180 910 206 911 c
+   207 911 210 918 212 925 c
+   213 929 215 930 217 926 c
+   219 920 236 918 236 924 c
+   236 925 239 926 247 926 c
+   253 926 258 927 260 928 c
+   262 930 263 930 265 926 c
+   266 924 269 921 272 921 c
+   274 920 278 919 279 919 c
+   281 918 283 919 283 922 c
+   285 927 291 925 291 919 c
+   292 916 293 911 295 909 c
+   298 905 299 905 302 906 c
+   306 909 313 920 312 922 c
+   311 923 311 926 310 929 c
+   310 933 310 934 313 932 c
+   315 931 317 931 317 932 c
+   317 932 318 931 320 929 c
+   324 924 l
+   325 929 l
+   328 935 331 934 331 927 c
+   331 922 332 921 334 922 c
+   336 922 337 924 337 927 c
+   337 931 337 932 340 932 c
+   342 932 344 933 344 934 c
+   346 937 352 936 358 932 c
+   363 928 363 928 369 931 c
+   376 934 383 934 389 929 c
+   391 927 395 927 401 927 c
+   410 928 411 927 411 924 c
+   412 922 413 919 415 919 c
+   419 918 433 921 440 925 c
+   443 927 445 927 446 925 c
+   447 924 450 923 453 923 c
+   455 923 459 922 461 920 c
+   465 915 475 913 479 916 c
+   482 918 482 918 481 913 c
+   480 908 480 907 484 905 c
+   486 903 490 902 492 902 c
+   498 902 501 900 501 895 c
+   501 890 507 883 515 880 c
+   525 876 526 873 516 863 c
+   509 858 508 855 509 853 c
+   510 852 512 852 513 852 c
+   514 852 518 850 520 847 c
+   525 844 526 840 528 830 c
+   529 822 531 814 533 812 c
+   534 809 535 806 535 806 c
+   535 806 532 804 530 803 c
+   527 801 526 800 527 795 c
+   528 792 529 786 529 783 c
+   530 778 530 776 528 776 c
+   525 776 507 758 506 754 c
+   504 747 496 742 488 741 c
+   482 740 481 739 480 735 c
+   479 729 474 728 468 732 c
+   465 735 464 735 459 731 c
+   456 729 452 728 450 729 c
+   448 730 446 729 443 726 c
+   439 721 l
+   430 725 l
+   425 728 420 732 419 734 c
+   418 736 415 740 413 743 c
+   409 747 408 748 405 746 c
+   403 745 399 744 395 744 c
+   392 744 387 742 384 740 c
+   377 736 377 736 361 740 c
+   358 741 356 740 355 736 c
+   353 732 353 731 359 727 c
+   364 724 368 723 371 723 c
+   373 724 376 724 377 723 c
+   377 722 380 721 382 722 c
+   385 723 388 722 390 720 c
+   393 717 397 716 409 716 c
+   428 715 432 714 430 710 c
+   430 709 429 705 428 702 c
+   427 698 428 697 432 696 c
+   439 695 438 690 431 690 c
+   427 690 423 690 422 689 c
+   421 689 416 691 413 693 c
+   h f
+   349 703 m
+   349 704 348 705 347 705 c
+   346 705 345 704 344 703 c
+   344 702 345 701 346 701 c
+   348 701 349 702 349 703 c
+   h f
+   338 897 m
+   339 899 339 900 335 901 c
+   331 903 331 903 331 899 c
+   331 894 335 893 338 897 c
+   h f
+   471 909 m
+   468 913 465 913 464 908 c
+   463 906 465 905 468 905 c
+   472 905 472 906 471 909 c
+   h f
+   232 712 m
+   232 713 233 714 234 714 c
+   235 714 236 713 235 712 c
+   235 711 234 710 233 710 c
+   233 710 232 711 232 712 c
+   h f
+   292 726 m
+   292 727 293 728 294 728 c
+   295 728 296 727 297 726 c
+   297 725 296 724 294 724 c
+   293 724 292 725 292 726 c
+   h f
+   453 954 m
+   452 956 452 957 452 957 c
+   453 957 455 956 456 954 c
+   457 952 458 950 457 950 c
+   456 950 454 952 453 954 c
+   h f
+   441 957 m
+   441 958 442 959 445 959 c
+   447 959 449 958 449 957 c
+   449 956 448 955 446 955 c
+   444 955 442 956 441 957 c
+   h f
+   357 979 m
+   357 980 359 982 361 982 c
+   364 982 365 982 364 980 c
+   363 976 355 976 357 979 c
+   h f
+   0.90 0.18 0.04 rg
+   473 623 m
+   471 627 467 630 457 635 c
+   451 637 434 657 437 659 c
+   444 662 453 664 468 664 c
+   483 663 486 663 488 660 c
+   490 658 491 658 492 659 c
+   494 661 497 662 499 662 c
+   502 662 506 663 508 664 c
+   514 669 523 666 522 659 c
+   522 658 525 656 529 654 c
+   537 650 538 646 534 641 c
+   532 639 530 634 529 631 c
+   527 620 523 619 505 620 c
+   496 621 489 621 487 620 c
+   481 617 474 618 473 623 c
+   h f
+   532 670 m
+   529 675 529 680 532 683 c
+   533 685 534 685 536 683 c
+   538 681 539 679 538 674 c
+   538 665 534 663 532 670 c
+   h f
+   471 677 m
+   472 678 473 682 473 685 c
+   473 690 473 690 476 688 c
+   480 686 487 688 487 690 c
+   487 691 486 694 485 695 c
+   483 698 483 700 486 703 c
+   487 705 489 709 489 711 c
+   489 716 503 731 507 731 c
+   511 731 511 729 506 725 c
+   503 724 501 721 501 719 c
+   501 713 510 697 515 691 c
+   518 688 521 685 521 684 c
+   521 681 515 679 506 679 c
+   501 679 499 680 498 683 c
+   496 687 490 687 487 682 c
+   486 681 483 680 481 680 c
+   479 680 476 678 474 676 c
+   470 673 470 673 471 677 c
+   h f
+   415 694 m
+   411 697 l
+   418 697 l
+   427 697 432 693 426 691 c
+   420 690 420 690 415 694 c
+   h f
+   459 697 m
+   454 700 454 703 458 707 c
+   463 712 472 709 474 703 c
+   475 701 476 698 475 697 c
+   472 694 463 694 459 697 c
+   h f
+   376 702 m
+   373 705 366 706 364 703 c
+   362 699 354 701 352 706 c
+   352 708 350 710 348 710 c
+   345 710 341 705 343 703 c
+   343 702 343 701 341 701 c
+   340 701 338 703 337 706 c
+   335 714 331 719 327 719 c
+   325 719 324 720 324 721 c
+   325 724 338 724 341 720 c
+   343 718 345 717 346 717 c
+   349 717 347 721 343 725 c
+   339 729 338 730 340 734 c
+   341 737 343 741 345 743 c
+   347 745 347 746 346 748 c
+   344 750 342 750 338 747 c
+   334 745 332 745 328 746 c
+   326 747 322 748 320 748 c
+   318 748 314 749 312 751 c
+   306 755 300 756 293 752 c
+   286 749 287 749 286 753 c
+   285 756 284 758 280 758 c
+   276 759 275 760 275 763 c
+   276 768 272 770 270 767 c
+   268 766 268 765 270 762 c
+   271 760 271 758 270 757 c
+   269 757 268 755 268 753 c
+   268 746 253 741 249 746 c
+   248 748 247 753 246 758 c
+   246 766 l
+   239 766 l
+   234 765 232 766 230 770 c
+   227 774 226 774 217 773 c
+   207 772 206 772 195 781 c
+   189 785 183 789 182 789 c
+   177 789 171 798 173 802 c
+   175 809 173 830 169 838 c
+   166 844 166 846 168 849 c
+   170 852 170 858 169 873 c
+   167 895 168 898 177 904 c
+   184 908 199 908 202 904 c
+   206 900 209 901 213 910 c
+   217 918 l
+   225 917 l
+   235 915 239 913 241 909 c
+   242 907 245 905 247 905 c
+   250 905 254 913 253 918 c
+   252 920 253 921 256 922 c
+   261 924 264 921 261 917 c
+   260 915 260 914 261 911 c
+   265 906 269 906 266 911 c
+   264 915 268 917 276 915 c
+   280 915 283 915 284 916 c
+   285 919 287 918 290 912 c
+   293 903 299 899 304 902 c
+   306 903 308 904 308 905 c
+   308 906 310 909 313 912 c
+   317 916 319 917 325 916 c
+   332 916 333 916 329 913 c
+   327 911 326 907 325 903 c
+   325 896 325 895 330 893 c
+   334 891 336 891 341 894 c
+   346 896 348 898 348 902 c
+   348 905 347 906 343 907 c
+   337 907 337 909 342 913 c
+   346 916 346 916 343 921 c
+   341 924 340 927 340 928 c
+   340 929 341 930 343 931 c
+   345 932 347 933 348 933 c
+   350 934 351 932 351 928 c
+   352 922 356 919 356 925 c
+   356 928 357 929 364 929 c
+   368 929 372 930 374 931 c
+   377 934 378 934 383 929 c
+   388 925 389 925 399 926 c
+   409 927 410 927 410 923 c
+   411 916 415 916 439 923 c
+   442 923 442 923 441 914 c
+   440 905 l
+   448 906 l
+   452 907 456 908 458 909 c
+   459 911 460 910 462 906 c
+   464 900 468 899 474 903 c
+   478 905 478 905 483 902 c
+   486 901 490 899 493 898 c
+   498 897 499 896 499 891 c
+   500 887 499 886 495 885 c
+   493 884 490 882 490 881 c
+   490 879 492 878 494 879 c
+   503 882 507 882 507 881 c
+   508 873 507 860 506 859 c
+   503 857 505 854 510 852 c
+   520 847 525 840 528 824 c
+   531 809 531 808 528 802 c
+   525 797 525 795 526 788 c
+   528 780 l
+   518 770 l
+   513 764 507 757 506 754 c
+   502 746 497 742 488 741 c
+   482 740 481 739 480 735 c
+   479 729 474 728 468 732 c
+   465 735 464 735 459 731 c
+   456 729 452 728 450 729 c
+   448 730 446 729 443 726 c
+   439 721 l
+   430 725 l
+   425 728 420 732 419 734 c
+   418 736 415 740 413 743 c
+   409 747 408 748 405 746 c
+   403 745 399 744 395 744 c
+   392 744 387 742 384 740 c
+   377 736 377 736 361 740 c
+   358 741 356 740 355 736 c
+   353 732 353 731 358 728 c
+   364 724 367 723 382 722 c
+   385 722 389 720 391 719 c
+   393 717 396 716 399 716 c
+   429 715 432 715 430 710 c
+   430 707 427 707 419 707 c
+   413 708 406 707 403 706 c
+   399 704 396 704 393 706 c
+   388 709 388 709 384 704 c
+   380 698 379 698 376 702 c
+   h f
+   483 878 m
+   483 882 480 886 477 886 c
+   474 886 474 880 476 877 c
+   480 874 483 874 483 878 c
+   h f
+   374 893 m
+   374 894 374 895 373 895 c
+   373 895 372 894 371 893 c
+   371 892 371 891 372 891 c
+   373 891 374 892 374 893 c
+   h f
+   438 896 m
+   438 897 438 898 437 898 c
+   436 898 435 897 435 896 c
+   435 895 436 895 437 895 c
+   438 895 438 895 438 896 c
+   h f
+   363 913 m
+   364 915 359 920 356 920 c
+   354 920 354 915 356 913 c
+   359 910 361 910 363 913 c
+   h f
+   514 873 m
+   514 874 515 875 516 875 c
+   518 875 519 874 519 873 c
+   519 872 518 871 516 871 c
+   515 871 514 872 514 873 c
+   h f
+   473 911 m
+   473 912 474 912 475 912 c
+   477 912 478 912 478 911 c
+   478 910 477 909 476 909 c
+   475 909 474 910 473 911 c
+   h f
+   0.81 0.17 0.06 rg
+   473 623 m
+   471 627 467 630 457 635 c
+   451 637 434 657 437 659 c
+   444 662 453 664 468 664 c
+   483 663 486 663 488 660 c
+   490 658 491 658 492 659 c
+   494 661 496 662 498 662 c
+   500 662 505 663 509 664 c
+   517 667 519 667 521 661 c
+   522 658 525 655 529 654 c
+   535 651 539 647 536 644 c
+   536 644 533 643 530 643 c
+   528 643 526 642 526 641 c
+   529 628 528 625 525 622 c
+   520 618 510 619 501 623 c
+   494 627 491 626 486 622 c
+   479 617 475 618 473 623 c
+   h f
+   533 673 m
+   531 681 531 682 535 678 c
+   538 676 539 673 538 672 c
+   537 668 534 668 533 673 c
+   h f
+   471 677 m
+   472 678 473 682 473 685 c
+   473 690 473 690 477 688 c
+   486 684 488 680 481 680 c
+   479 680 476 678 474 676 c
+   470 673 470 673 471 677 c
+   h f
+   500 680 m
+   501 683 505 684 505 682 c
+   505 681 503 679 502 679 c
+   500 678 499 679 500 680 c
+   h f
+   492 693 m
+   494 696 495 697 497 695 c
+   501 692 498 688 493 688 c
+   489 688 489 689 492 693 c
+   h f
+   415 694 m
+   411 697 l
+   418 697 l
+   427 697 432 693 426 691 c
+   420 690 420 690 415 694 c
+   h f
+   459 698 m
+   455 701 458 705 465 705 c
+   472 705 474 704 474 699 c
+   474 696 473 696 468 696 c
+   465 696 461 697 459 698 c
+   h f
+   376 702 m
+   373 705 366 706 364 703 c
+   362 699 354 701 352 706 c
+   352 708 350 710 348 710 c
+   345 710 341 705 343 703 c
+   343 702 342 701 341 701 c
+   339 701 338 702 338 703 c
+   338 706 345 712 349 712 c
+   352 712 355 713 357 714 c
+   363 719 368 718 369 713 c
+   370 710 372 708 375 707 c
+   378 706 379 705 379 703 c
+   379 699 379 698 376 702 c
+   h f
+   493 703 m
+   492 704 493 706 493 708 c
+   494 710 493 713 492 714 c
+   491 716 491 717 493 719 c
+   495 721 496 720 498 717 c
+   499 715 500 713 499 713 c
+   499 713 499 711 500 708 c
+   502 703 496 698 493 703 c
+   h f
+   393 706 m
+   391 709 401 715 404 714 c
+   411 712 412 709 406 707 c
+   400 704 394 704 393 706 c
+   h f
+   379 714 m
+   379 720 382 722 386 719 c
+   388 717 388 716 386 713 c
+   384 708 379 709 379 714 c
+   h f
+   333 715 m
+   332 717 330 719 328 719 c
+   326 719 325 719 326 720 c
+   328 722 340 717 339 715 c
+   338 711 335 712 333 715 c
+   h f
+   346 739 m
+   347 742 351 743 351 740 c
+   351 738 349 737 348 737 c
+   346 737 345 738 346 739 c
+   h f
+   422 749 m
+   419 755 418 757 414 757 c
+   409 757 400 753 399 751 c
+   397 749 383 745 374 745 c
+   363 746 357 748 354 753 c
+   351 759 348 759 338 757 c
+   335 756 328 756 322 756 c
+   317 757 313 758 314 758 c
+   317 758 315 767 312 767 c
+   311 767 307 765 304 763 c
+   296 758 293 757 293 762 c
+   293 766 278 774 267 775 c
+   261 776 259 776 259 774 c
+   259 770 260 770 251 774 c
+   244 776 243 776 240 772 c
+   236 768 232 769 236 774 c
+   239 777 239 777 232 780 c
+   227 783 226 783 208 779 c
+   200 777 197 780 197 791 c
+   197 792 195 795 192 796 c
+   188 798 187 798 183 795 c
+   179 792 179 792 177 797 c
+   176 800 175 808 174 816 c
+   174 823 173 832 173 835 c
+   172 837 172 840 172 841 c
+   172 842 170 843 169 843 c
+   166 843 165 847 168 849 c
+   170 850 170 856 169 871 c
+   168 895 168 898 177 904 c
+   184 908 199 908 202 904 c
+   206 900 209 901 213 910 c
+   217 918 l
+   225 917 l
+   235 915 239 913 241 909 c
+   242 907 245 905 247 905 c
+   250 905 254 913 253 918 c
+   252 920 253 921 256 922 c
+   261 924 264 921 261 917 c
+   260 915 260 914 261 911 c
+   265 906 269 906 266 911 c
+   264 915 268 917 276 915 c
+   280 915 283 915 284 916 c
+   285 919 287 918 290 912 c
+   293 903 299 899 304 902 c
+   306 903 308 904 308 905 c
+   308 906 310 909 313 912 c
+   317 916 319 917 325 916 c
+   332 916 333 916 329 913 c
+   327 911 326 907 325 903 c
+   325 896 325 895 330 893 c
+   334 891 336 891 341 894 c
+   346 896 348 898 348 902 c
+   348 905 347 906 343 907 c
+   337 907 337 909 342 913 c
+   346 916 346 916 343 921 c
+   341 924 340 927 340 928 c
+   340 929 341 930 343 931 c
+   345 932 347 933 348 933 c
+   350 934 351 932 351 928 c
+   352 922 356 919 356 925 c
+   356 928 357 929 364 929 c
+   368 929 372 930 374 931 c
+   377 934 378 934 383 929 c
+   388 925 389 925 399 926 c
+   409 927 410 927 410 923 c
+   411 916 415 916 439 923 c
+   442 923 442 923 441 914 c
+   440 905 l
+   448 906 l
+   452 907 456 908 458 909 c
+   459 911 460 910 462 906 c
+   464 900 468 899 474 903 c
+   478 905 478 905 483 902 c
+   486 901 490 899 493 898 c
+   498 897 499 896 499 891 c
+   500 887 499 886 495 885 c
+   493 884 490 882 490 881 c
+   490 879 492 878 494 879 c
+   503 882 507 882 507 881 c
+   508 870 507 860 505 859 c
+   502 858 505 854 510 852 c
+   520 847 525 840 528 823 c
+   532 808 l
+   528 804 l
+   524 801 524 801 526 790 c
+   528 779 l
+   521 773 l
+   517 769 510 765 507 764 c
+   500 762 500 762 501 756 c
+   501 750 501 749 497 748 c
+   493 747 491 748 490 750 c
+   488 752 486 753 485 753 c
+   482 753 471 747 471 745 c
+   471 742 457 740 452 743 c
+   450 744 445 746 441 747 c
+   436 748 434 747 431 744 c
+   426 739 425 739 422 749 c
+   h f
+   483 878 m
+   483 882 480 886 477 886 c
+   474 886 474 880 476 877 c
+   480 874 483 874 483 878 c
+   h f
+   374 893 m
+   374 894 374 895 373 895 c
+   373 895 372 894 371 893 c
+   371 892 371 891 372 891 c
+   373 891 374 892 374 893 c
+   h f
+   438 896 m
+   438 897 438 898 437 898 c
+   436 898 435 897 435 896 c
+   435 895 436 895 437 895 c
+   438 895 438 895 438 896 c
+   h f
+   363 913 m
+   364 915 359 920 356 920 c
+   354 920 354 915 356 913 c
+   359 910 361 910 363 913 c
+   h f
+   514 873 m
+   514 874 515 875 516 875 c
+   518 875 519 874 519 873 c
+   519 872 518 871 516 871 c
+   515 871 514 872 514 873 c
+   h f
+   473 911 m
+   473 912 474 912 475 912 c
+   477 912 478 912 478 911 c
+   478 910 477 909 476 909 c
+   475 909 474 910 473 911 c
+   h f
+   0.80 0.09 0.02 rg
+   474 627 m
+   473 629 470 631 469 631 c
+   467 631 465 632 464 634 c
+   464 635 462 637 460 637 c
+   458 638 456 640 456 642 c
+   455 644 453 645 450 645 c
+   447 645 445 647 443 651 c
+   441 654 440 657 441 657 c
+   441 657 444 659 447 660 c
+   450 662 454 663 454 663 c
+   455 662 462 662 469 661 c
+   479 661 483 660 484 659 c
+   485 656 491 656 497 658 c
+   500 660 502 660 507 657 c
+   511 656 515 655 516 656 c
+   518 656 521 654 525 651 c
+   530 646 530 645 528 644 c
+   525 642 525 640 525 636 c
+   526 633 526 631 524 631 c
+   523 631 523 630 524 628 c
+   525 623 520 621 513 624 c
+   507 626 486 626 484 624 c
+   482 621 477 622 474 627 c
+   h f
+   462 703 m
+   462 704 463 705 464 705 c
+   465 705 465 704 464 703 c
+   464 702 463 701 463 701 c
+   462 701 462 702 462 703 c
+   h f
+   357 708 m
+   358 709 359 712 359 714 c
+   360 716 361 717 362 717 c
+   363 717 363 716 362 715 c
+   362 714 363 713 366 712 c
+   371 709 372 707 366 706 c
+   359 704 356 704 357 708 c
+   h f
+   495 709 m
+   494 711 494 713 495 713 c
+   496 715 499 712 499 709 c
+   499 705 496 706 495 709 c
+   h f
+   452 743 m
+   450 744 445 746 441 747 c
+   435 748 433 747 432 745 c
+   431 742 426 741 424 743 c
+   423 744 423 746 425 747 c
+   426 750 426 750 425 749 c
+   423 748 422 749 420 752 c
+   419 755 417 757 414 757 c
+   409 757 399 753 399 751 c
+   399 750 398 750 396 750 c
+   394 751 388 750 382 747 c
+   374 744 371 744 367 746 c
+   365 747 362 748 360 748 c
+   358 748 356 750 355 752 c
+   352 759 345 761 337 757 c
+   330 754 323 755 325 759 c
+   326 762 324 763 321 760 c
+   318 757 315 759 315 764 c
+   315 768 312 768 305 764 c
+   300 760 293 760 293 764 c
+   293 766 275 774 267 775 c
+   261 776 259 776 259 774 c
+   259 772 258 771 256 772 c
+   255 772 253 773 252 773 c
+   251 773 251 774 252 775 c
+   253 779 247 779 244 776 c
+   242 775 240 775 236 778 c
+   230 782 215 785 215 782 c
+   215 779 210 780 205 784 c
+   202 786 199 788 198 787 c
+   198 787 197 788 197 790 c
+   197 791 197 794 199 794 c
+   200 795 200 796 200 797 c
+   199 798 198 797 197 796 c
+   195 794 195 794 192 796 c
+   191 797 188 798 186 797 c
+   180 795 178 800 177 812 c
+   177 828 176 834 172 840 c
+   170 843 170 845 171 848 c
+   174 852 174 872 172 874 c
+   171 874 171 879 171 884 c
+   171 893 171 894 176 894 c
+   179 895 180 896 180 898 c
+   180 900 181 902 183 903 c
+   186 906 195 906 198 903 c
+   203 899 212 896 215 898 c
+   217 899 217 901 217 904 c
+   216 907 217 909 220 911 c
+   224 916 232 914 241 907 c
+   248 901 252 902 255 908 c
+   256 911 256 911 260 907 c
+   265 903 270 902 271 907 c
+   272 911 275 912 277 908 c
+   277 906 279 906 282 906 c
+   284 907 287 906 291 903 c
+   299 896 305 897 310 905 c
+   318 917 325 914 322 900 c
+   319 891 322 889 336 890 c
+   343 891 349 892 350 893 c
+   351 894 351 898 352 902 c
+   352 910 352 910 358 909 c
+   361 909 364 910 365 911 c
+   367 914 367 915 363 920 c
+   358 926 359 927 367 926 c
+   391 923 395 922 402 924 c
+   406 925 407 924 408 920 c
+   410 916 411 916 417 917 c
+   436 920 438 920 438 917 c
+   438 916 436 912 433 910 c
+   428 905 427 905 428 895 c
+   429 888 428 884 426 882 c
+   423 879 424 877 428 877 c
+   431 877 432 877 431 880 c
+   430 883 431 885 437 889 c
+   441 891 444 895 444 896 c
+   444 901 450 906 455 905 c
+   457 905 460 902 463 897 c
+   465 893 467 889 468 887 c
+   469 886 471 882 472 878 c
+   474 872 475 872 482 871 c
+   487 870 489 870 492 873 c
+   496 877 503 878 503 874 c
+   503 873 501 870 500 867 c
+   494 861 498 853 510 848 c
+   515 846 520 843 522 841 c
+   523 839 526 831 527 823 c
+   529 811 529 808 527 807 c
+   523 804 521 792 523 790 c
+   528 784 520 772 506 765 c
+   502 763 500 760 500 759 c
+   501 755 498 753 490 753 c
+   483 753 474 749 469 745 c
+   468 743 465 742 462 743 c
+   460 744 458 743 458 742 c
+   458 740 456 740 452 743 c
+   h f
+   415 875 m
+   418 879 414 882 407 883 c
+   401 883 400 880 404 876 c
+   407 872 412 872 415 875 c
+   h f
+   377 890 m
+   379 892 378 894 374 898 c
+   368 904 l
+   367 898 l
+   367 895 367 891 368 890 c
+   369 887 375 887 377 890 c
+   h f
+   480 889 m
+   474 892 473 896 476 899 c
+   478 901 480 900 486 897 c
+   497 891 498 891 496 889 c
+   493 886 486 886 480 889 c
+   h f
+   0.68 0.08 0.02 rg
+   516 626 m
+   512 628 515 631 519 631 c
+   522 631 523 630 522 628 c
+   522 625 519 624 516 626 c
+   h f
+   473 633 m
+   460 637 456 640 458 643 c
+   459 644 459 647 459 649 c
+   457 656 460 657 480 657 c
+   494 657 501 656 503 654 c
+   506 653 509 651 511 650 c
+   514 649 515 647 511 644 c
+   510 642 508 640 508 639 c
+   508 635 500 633 493 634 c
+   489 634 487 634 485 632 c
+   482 629 483 629 473 633 c
+   h f
+   448 659 m
+   448 662 452 664 455 662 c
+   458 661 457 658 452 658 c
+   450 657 448 658 448 659 c
+   h f
+   457 755 m
+   457 756 455 757 453 757 c
+   451 757 449 758 449 759 c
+   449 762 442 763 417 765 c
+   406 766 403 767 399 770 c
+   396 773 394 774 393 773 c
+   393 773 391 773 389 774 c
+   386 776 385 775 382 773 c
+   381 771 380 768 380 767 c
+   381 765 379 766 373 770 c
+   364 775 363 775 353 775 c
+   347 774 340 774 338 775 c
+   334 777 332 777 331 775 c
+   330 772 329 772 328 775 c
+   326 780 317 783 313 780 c
+   310 778 308 778 305 782 c
+   303 784 299 785 296 785 c
+   290 785 284 788 284 792 c
+   284 794 283 796 282 797 c
+   280 800 274 800 274 798 c
+   274 795 266 789 263 789 c
+   262 789 261 791 260 793 c
+   260 795 256 799 251 802 c
+   242 808 234 816 234 820 c
+   234 822 232 823 224 823 c
+   216 822 213 821 210 818 c
+   208 816 204 814 203 814 c
+   199 814 198 819 201 822 c
+   205 824 205 824 201 826 c
+   199 826 193 829 188 831 c
+   179 835 178 836 179 841 c
+   180 845 178 855 174 860 c
+   173 862 174 864 176 865 c
+   186 872 186 875 177 877 c
+   173 878 171 880 171 885 c
+   169 892 171 896 174 893 c
+   177 891 178 892 181 899 c
+   184 906 191 907 199 902 c
+   202 900 206 898 208 898 c
+   209 898 213 895 216 892 c
+   219 888 222 886 223 886 c
+   227 886 227 888 224 893 c
+   219 899 218 905 220 909 c
+   222 913 235 912 241 906 c
+   248 900 251 900 254 906 c
+   256 911 l
+   260 907 l
+   265 903 270 902 271 907 c
+   273 912 274 912 279 905 c
+   283 900 283 900 285 902 c
+   287 905 288 905 291 901 c
+   299 896 305 897 310 905 c
+   313 909 315 912 316 912 c
+   316 912 318 911 320 909 c
+   323 906 323 906 321 901 c
+   318 896 317 884 320 884 c
+   320 884 322 885 324 886 c
+   325 888 331 889 336 890 c
+   343 891 345 891 345 889 c
+   345 886 349 884 354 884 c
+   356 884 356 884 354 888 c
+   352 890 351 895 352 901 c
+   352 910 l
+   358 909 l
+   361 909 364 910 365 911 c
+   367 914 365 922 362 925 c
+   359 927 359 927 363 927 c
+   365 927 368 926 371 925 c
+   373 924 377 923 380 922 c
+   382 922 387 919 390 916 c
+   393 913 397 911 397 911 c
+   400 911 401 918 399 920 c
+   398 921 397 921 399 922 c
+   400 923 401 922 401 921 c
+   401 920 402 920 404 920 c
+   406 921 408 920 409 918 c
+   410 916 416 916 429 919 c
+   432 920 433 919 433 916 c
+   432 914 430 911 428 908 c
+   425 905 424 903 425 896 c
+   426 890 426 888 423 885 c
+   419 882 418 882 413 884 c
+   405 886 385 884 384 881 c
+   383 879 385 878 388 876 c
+   390 875 394 873 395 871 c
+   397 868 399 868 405 868 c
+   409 868 414 868 417 867 c
+   420 866 423 867 427 869 c
+   432 871 433 873 432 878 c
+   432 884 433 885 438 886 c
+   443 888 444 889 444 894 c
+   444 904 455 909 461 901 c
+   463 897 463 895 462 893 c
+   459 888 460 887 466 886 c
+   469 886 470 885 470 880 c
+   471 875 472 873 476 871 c
+   479 869 483 868 484 868 c
+   486 868 489 864 492 861 c
+   495 855 500 852 508 849 c
+   522 842 525 839 525 828 c
+   525 823 526 819 527 818 c
+   530 815 528 810 519 806 c
+   511 802 510 801 512 798 c
+   513 796 515 794 516 794 c
+   517 793 517 792 515 788 c
+   513 786 512 782 513 781 c
+   514 776 508 774 498 777 c
+   493 778 488 780 487 781 c
+   484 784 480 784 479 782 c
+   478 780 477 775 477 770 c
+   477 760 477 759 471 758 c
+   468 757 465 756 464 755 c
+   463 752 459 752 457 755 c
+   h f
+   376 889 m
+   380 892 381 900 378 900 c
+   377 900 375 902 373 904 c
+   371 907 370 908 369 905 c
+   368 904 367 900 367 898 c
+   367 895 365 891 363 888 c
+   359 883 l
+   366 885 l
+   370 885 374 887 376 889 c
+   h f
+   237 889 m
+   236 890 235 891 234 891 c
+   233 891 233 890 234 888 c
+   237 885 239 886 237 889 c
+   h f
+   363 899 m
+   363 902 360 904 358 903 c
+   357 901 359 896 361 896 c
+   362 896 363 897 363 899 c
+   h f
+   394 903 m
+   394 905 388 911 386 911 c
+   385 911 383 905 384 903 c
+   385 901 394 901 394 903 c
+   h f
+   493 868 m
+   489 871 491 874 497 875 c
+   502 876 502 876 500 870 c
+   499 865 498 865 493 868 c
+   h f
+   0.56 0.05 0.02 rg
+   466 787 m
+   465 791 468 791 427 788 c
+   423 788 414 789 406 791 c
+   399 793 391 794 388 794 c
+   386 794 381 795 378 797 c
+   376 798 373 799 372 799 c
+   372 798 363 798 353 797 c
+   338 796 336 796 333 799 c
+   328 804 317 806 313 802 c
+   310 799 309 799 303 806 c
+   298 813 297 813 293 811 c
+   287 807 282 809 281 814 c
+   281 818 280 818 267 817 c
+   250 815 245 817 245 826 c
+   244 832 243 833 238 834 c
+   232 836 231 838 234 840 c
+   237 842 236 844 232 845 c
+   225 847 218 855 220 858 c
+   222 860 221 862 220 866 c
+   216 876 217 878 225 877 c
+   231 876 233 874 236 871 c
+   238 866 238 866 234 863 c
+   232 861 231 859 232 858 c
+   233 857 236 859 239 861 c
+   242 863 243 866 243 869 c
+   242 874 245 875 253 872 c
+   256 871 258 872 261 874 c
+   265 877 265 878 263 882 c
+   262 884 262 886 263 886 c
+   266 888 265 892 262 893 c
+   260 894 261 894 265 894 c
+   273 895 284 890 287 886 c
+   288 884 291 882 293 882 c
+   297 882 297 881 296 877 c
+   295 873 296 871 298 870 c
+   300 869 300 868 299 863 c
+   296 858 296 858 303 856 c
+   307 855 308 856 311 862 c
+   313 868 315 870 320 871 c
+   325 873 327 874 328 877 c
+   328 879 330 882 333 884 c
+   337 886 338 886 341 883 c
+   343 882 347 880 350 879 c
+   353 879 357 876 359 874 c
+   361 871 363 870 370 870 c
+   377 870 380 869 384 866 c
+   388 862 390 861 402 861 c
+   410 861 419 860 423 860 c
+   432 858 439 858 448 860 c
+   453 861 455 862 457 866 c
+   459 869 461 871 462 871 c
+   463 871 465 867 466 862 c
+   469 855 469 852 467 849 c
+   466 845 466 843 467 841 c
+   470 836 470 836 478 843 c
+   484 848 484 848 481 851 c
+   478 854 478 855 481 857 c
+   484 860 489 856 489 851 c
+   489 850 490 848 492 847 c
+   496 846 498 839 496 836 c
+   492 832 495 825 500 825 c
+   503 825 505 824 506 823 c
+   506 822 508 821 510 821 c
+   515 821 515 817 511 816 c
+   507 815 501 806 501 801 c
+   501 797 498 797 495 800 c
+   488 807 476 802 476 793 c
+   476 790 471 783 468 783 c
+   467 783 466 785 466 787 c
+   h f
+   276 879 m
+   276 882 275 883 272 883 c
+   269 884 268 883 268 880 c
+   268 877 271 875 275 876 c
+   276 876 276 878 276 879 c
+   h f
+   329 791 m
+   329 792 330 793 332 793 c
+   334 794 334 793 334 792 c
+   333 791 329 790 329 791 c
+   h f
+   503 836 m
+   501 839 501 840 503 841 c
+   507 843 507 843 511 840 c
+   514 838 514 837 512 835 c
+   508 833 506 833 503 836 c
+   h f
+   197 861 m
+   197 863 197 864 199 864 c
+   200 863 200 862 200 861 c
+   200 860 200 859 199 859 c
+   197 859 197 860 197 861 c
+   h f
+   197 871 m
+   196 872 197 874 198 874 c
+   202 876 200 878 197 877 c
+   192 876 190 881 193 885 c
+   196 888 205 887 210 882 c
+   212 881 214 879 214 879 c
+   215 879 215 871 214 870 c
+   214 870 210 869 206 869 c
+   200 868 198 869 197 871 c
+   h f
+   235 901 m
+   232 902 232 905 235 905 c
+   238 905 240 902 238 901 c
+   238 901 236 901 235 901 c
+   h f
+   0.47 0.05 0.02 rg
+   402 796 m
+   394 797 386 799 383 801 c
+   381 802 375 804 370 804 c
+   365 804 360 805 358 807 c
+   356 809 352 811 348 812 c
+   345 813 341 816 340 818 c
+   338 820 337 821 333 819 c
+   328 817 316 819 310 822 c
+   308 824 304 825 301 825 c
+   299 825 295 826 293 829 c
+   290 833 288 833 283 831 c
+   279 830 276 830 273 832 c
+   270 833 265 834 261 834 c
+   253 834 247 838 250 841 c
+   251 842 252 844 252 846 c
+   252 847 254 850 256 853 c
+   258 857 261 858 266 858 c
+   271 859 272 858 276 852 c
+   279 848 281 844 281 843 c
+   281 842 283 840 285 838 c
+   288 836 290 836 293 837 c
+   295 838 300 839 305 840 c
+   314 841 315 841 316 837 c
+   317 835 318 834 320 834 c
+   328 836 328 836 329 832 c
+   330 827 337 822 341 824 c
+   343 825 349 827 354 827 c
+   362 828 362 828 366 822 c
+   369 819 370 815 370 814 c
+   370 813 372 811 375 809 c
+   378 807 380 807 383 808 c
+   384 809 390 811 395 811 c
+   403 812 404 812 405 809 c
+   406 806 408 805 410 805 c
+   411 806 414 807 415 807 c
+   416 807 418 806 419 802 c
+   420 797 420 794 417 794 c
+   417 795 410 795 402 796 c
+   h f
+   442 798 m
+   442 799 444 800 447 800 c
+   449 800 451 799 451 798 c
+   451 797 449 796 447 796 c
+   444 796 442 797 442 798 c
+   h f
+   455 809 m
+   453 812 452 812 451 810 c
+   450 809 450 810 450 813 c
+   451 816 451 817 448 817 c
+   447 817 446 818 446 820 c
+   447 822 460 826 471 827 c
+   478 827 478 827 475 814 c
+   474 810 473 809 469 809 c
+   467 808 463 808 461 807 c
+   459 807 456 808 455 809 c
+   h f
+   409 830 m
+   405 836 398 838 382 837 c
+   370 836 366 837 365 838 c
+   363 840 362 841 361 839 c
+   360 837 360 838 361 841 c
+   362 845 361 846 359 846 c
+   356 846 355 850 358 851 c
+   360 851 365 852 370 854 c
+   377 856 379 856 383 854 c
+   385 852 387 852 390 853 c
+   392 854 395 855 398 855 c
+   400 855 403 856 404 857 c
+   405 860 413 859 416 855 c
+   418 853 421 851 424 850 c
+   432 847 430 844 420 843 c
+   415 843 411 843 410 842 c
+   408 840 414 835 418 835 c
+   421 835 422 835 422 832 c
+   421 828 411 827 409 830 c
+   h f
+   454 846 m
+   454 847 456 848 457 848 c
+   457 848 458 847 458 846 c
+   458 845 457 844 455 844 c
+   454 844 453 845 454 846 c
+   h f
+   318 858 m
+   315 861 317 862 325 862 c
+   329 862 333 861 333 860 c
+   333 860 333 859 332 859 c
+   322 857 319 857 318 858 c
+   h f
+   346 870 m
+   344 872 344 873 346 875 c
+   350 878 354 876 354 871 c
+   354 867 349 866 346 870 c
+   h f
+   Q
+}}


Property changes on: trunk/Master/texmf-dist/doc/generic/olsak-misc/fun-coffee.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/olsak-misc/openclose.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/olsak-misc/openclose.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/olsak-misc/openclose.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,89 @@
+% openclose.tex  
+%%%%%%%%%%%%%%%%%%%%%%
+% Petr Olsak 2014
+
+% see
+% http://tex.stackexchange.com/questions/196071/macro-to-close-all-open-environments-groups-and-argument-delimiters
+
+% This macro defines \Open ...\Close pair which reads the text between them
+% and repairs it to balanced text. The appropriated braces could be added at
+% the begin (open braces) or at the end (close braces) of the text.
+% After \Open ...\Close preprocessing is done the repaired text is 
+% normally processed.
+
+% Examples:
+
+% \Open abc\Close       ... does nothing ->  abc
+% \Open a}b}c\Close     ... adds braces  ->  {{a}b}c
+% \Open a{b{c\Close     ... adds braces  ->  a{b{c}}
+% \Open a}b}c{d{e\Close ... adds braces  ->  {{a}b}c{d{e}}
+
+% The \Open...\Close pairs would be nested. The processing of repairing
+% braces is done from inner pairs to outer, like normal parentheses.
+
+% The \autobracelist macro is empty by default and it can include the list
+% of control sequences which have special feature between \Open ...\Close:
+% It such control sequence is followed by open brace then it behaves normally
+% else the open brace is added after it.
+
+% Examples:
+
+% \def\autobrcelist{\x\y}
+% \Open \x \y \z aha \x \Close   ->  \x{\y{\z aha \x{}}}
+% \Open \x{\y} aha\Close         ->  \x{\y{} aha}
+
+\newcount\openLnum
+\newtoks\currtext
+\def\Open{\begingroup\let\bgroup=\relax \let\egroup=\relax 
+   \expandafter\checkbracesJ\autobracelist\end 
+   \let\ifIamInGroup=\iffalse \currtext={}\checkbracesA
+}
+\def\checkbracesA{\futurelet\tmp\checkbracesB}
+\def\checkbracesB{%
+   \let\next=\checkbracesN
+   \ifx\tmp\spacetoken \let\next=\checkbracesC \let\nexxt=\checkbracesA \addtocurrtext{ }\fi
+   \ifx\tmp\bgroupOri  \let\next=\checkbracesC \let\nexxt=\checkbracesD \fi
+   \ifx\tmp\egroupOri  \let\next=\checkbracesC \let\nexxt=\checkbracesE \fi
+   \ifx\tmp\autobraced \let\next=\checkbracesH \fi
+   \ifx\tmp\Close \let\next=\checkbracesC \let\nexxt=\checkbracesF \fi
+   \ifx\tmp\Open  \global\advance\openLnum by1 \let\next=\relax \fi
+   \next
+}
+\def\checkbracesC{\afterassignment\nexxt \let\next= }
+\long\def\checkbracesN#1{\addtocurrtext#1\checkbracesA}
+\def\checkbracesD{\begingroup \let\ifIamInGroup=\iftrue \currtext={}\checkbracesA}
+\def\checkbracesE{\ifIamInGroup \addtocurrtextclosebrace
+   \else \currtext\expandafter{\expandafter{\the\currtext}}%
+   \fi \checkbracesA
+}
+\def\checkbracesF{%
+   \ifIamInGroup \addtocurrtextclosebrace \expandafter\checkbracesF
+   \else \expandafter\checkbracesG \fi
+}
+\def\checkbracesG{%
+   \ifnum\openLnum>0 \global\advance\openLnum by-1 
+       \def\next{\expandafter\endgroup \expandafter 
+          \currtext \expandafter\expandafter\expandafter
+             {\expandafter\the\expandafter\currtext \the\currtext}\checkbracesA}%
+   \else \def\next{\expandafter\endgroup \the\currtext}%
+   \fi \next
+}
+\def\checkbracesH#1{\addtocurrtext#1\futurelet\tmp\checkbracesI}
+\def\checkbracesI{\ifx\tmp\bgroupOri \expandafter\checkbracesB
+                  \else \expandafter\checkbracesD \fi
+}
+\def\checkbracesJ#1{\ifx#1\end \else \let#1=\autobraced \expandafter\checkbracesJ \fi}
+
+\def\addtocurrtextclosebrace{\expandafter\endgroup
+   \expandafter\currtext\expandafter\expandafter\expandafter
+      {\expandafter\the\expandafter\currtext\expandafter{\the\currtext}}%
+}
+\long\def\addtocurrtext#1{\currtext\expandafter{\the\currtext#1}}
+\let\bgroupOri=\bgroup
+\let\egroupOri=\egroup
+\def\tmp/{\let\spacetoken= }\tmp/ %
+\def\Close{^\Close^}
+\def\autobraced{^\autobraced^}
+\def\autobracelist{}
+
+\endiput


Property changes on: trunk/Master/texmf-dist/doc/generic/olsak-misc/openclose.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/olsak-misc/seplist.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/olsak-misc/seplist.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/olsak-misc/seplist.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,131 @@
+% seplist.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Petr Olsak 2014
+
+% This macro enables to declare more than one separator for parameter
+% scanning of your macro. Usage:
+
+% \long\def\yourmacro#1{usage of #1parameter}
+% \seplist{list of separators}\yourmacro parameter-text separator
+% example:
+% \seplist{{sepA}{SepB}{SEPC}}\yourmacro text separated by sepA
+% \seplist{{sepA}{SepB}{SEPC}}\yourmacro text separated by SepB
+% \seplist{{sepA}{SepB}{SEPC}}\yourmacro text separated by SEPC
+% All lines of this example are expanded to "usage of text separated by parameter".
+
+% The actually used separator is stored globally to the \sepused macro.
+% The macro programmer can use this.
+
+% The input stream is read to the first instance of any of the listed
+% separator, no more. The separator list includes separators in braces. 
+% If there are only one-token separators, braces can be omited. Example
+
+% \seplist{0123456789}\mymacro text to the first decimal digit 7
+
+% The parameter have to be balanced. Thus, the separator hidden in braces
+% is ignored. This behavior is similar like in normal separated parameters.
+
+% The \par or spaces or arbitrary control sequences can be a part of
+% separators. The # (of catcode 6) cannot be a part of the separator but
+% it can be included in the parameter text.
+
+% See implementation details at the end of this file
+
+\long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
+\newtoks\seplistT
+
+\long\def\seplistD#1{%
+   \seplistS##2\seplistE{\def\tmpa{##1}\def\tmpb{##2}\seplistE}%
+   \def\tmpb{\tmpa #1}\expandafter\tmpb \tmp\seplistD\seplistE
+}
+\long\def\seplistE#1{%
+   \ifx\tmpa\empty
+      \seplistS\seplistD{\def\tmpb{##1}}\expandafter\tmpa\tmpb
+      \ifx\tmpb\empty \seplistQ{#1}%
+      \else \expandafter\addto\expandafter\seplistLx
+                           \expandafter {\expandafter\seplistD\expandafter{\tmpb}{#1}}%
+   \fi\fi
+}
+\def\seplistS{\long\expandafter\def\expandafter\tmpa\expandafter##\expandafter1\tmp}
+\long\def\seplistQ#1#2\seplistA{\fi\fi\gdef\sepused{#1}\seplistZ}
+
+\long\def\seplist#1#2{\begingroup
+  \toks0={#2}\let\bgroup=\relax \let\egroup=\relax
+  \def\seplistL{}\def\seplistLx{}\seplistI#1{}\gdef\sepused{}%
+  \ifx\seplistL\empty \expandafter\endgroup \the\toks0\else
+  \seplistT={}\expandafter\seplistA\fi
+}
+\def\seplistA{\futurelet\tmp\seplistB}
+\def\seplistB{\let\next=\seplistP
+   \expandafter\ifx\space\tmp \let\next=\seplistC \let\nexxt=\seplistM \fi
+   \ifx##\tmp  \let\next=\seplistC \let\nexxt=\seplistH \fi
+   \ifx{\tmp   \let\next=\seplistG \fi
+   \ifx}\tmp   \let\next=\seplistC \let\nexxt=\seplistF \fi
+   \next
+}
+\def\seplistC{\afterassignment\nexxt \let\next= }
+\long\def\seplistP#1{\seplistX#1\def\tmp{#1}\seplistN}
+\def\seplistM{\seplistX{ }\def\tmp{ }\seplistN}
+\def\seplistH{\seplistX{##}\def\seplistLx{}\seplistA}
+\def\seplistN{\edef\seplistLx{\expandafter}\seplistLx \seplistL \seplistA}
+\long\def\seplistG#1{\def\seplistLx{}\seplistX{{#1}}\seplistA}
+\def\seplistF{\seplistT\expandafter{\expandafter{\the\seplistT}}\seplistZ}
+\long\def\seplistX#1{\seplistT\expandafter{\the\seplistT#1}}
+\def\seplistZ{\let\tmp=\sepused 
+   \expandafter\seplistS\expandafter{\the\toks0{##1}}%
+   \expandafter\expandafter\expandafter\endgroup\expandafter\tmpa\the\seplistT
+}
+\long\def\seplistI#1{\ifx\seplistI#1\seplistI\else
+   \addto\seplistL{\seplistD{#1}{#1}}\expandafter\seplistI \fi
+}
+
+\endinput
+
+\def\m#1{\toks0={#1}\message{param: "\the\toks0", separator: "\sepused"}}
+\seplist{ab{c a}{cb}0123456789}\m uv#wcd{6cb7}uffc a
+
+% You can define \sepdef \macro #1[{sepA}{sepB}{sepC}]{usage of the parameter #1...}
+
+\def\sepdef #1#2[#3]{\def#1{\seplist{#3}{\csname:\string#1\endcsname}}%
+  \long\expandafter\def\csname:\string#1\endcsname ##1}
+
+\sepdef\test #1[uvw]#2{\message{1="#1", 2="#2"}}
+
+\test ahawx \test bhavy
+
+\end
+
+Comments to the implementation.
+
+We read the parameter token-per-token similarly as in openbrace.tex or
+eparam.tex and store these tokens in \seplistT token list. The internal
+macro \seplistL includes the list of separators in the form:
+
+\seplistD{sepA}{sepA}\seplistD{sepB}{sepB}...
+
+We store the already read token to \tmp and run \seplistL. More exactly: at
+the start, the temporary \seplistLx is emty. For each read token, we expand
+\seplistLx and \seplistL to the input stream and before executing it we
+reset \def\seplistLx{}. Now, the input stream is executed, i.e. the
+\seplistD macro is processed for each separator. The task of
+\seplistD{sepA}{sepA} is the following: to test if the \tmp is equal to the
+first token of its first parameter ("s" in this example). If it is true,
+then \seplistD (using \seplistE) adds the text \seplistD{epA}{sepA} (the
+first token from the first parameter is removed) to the temporary list
+\seplistLx which will be executed for the next token. If \tmp isn't equal to
+the first token of the first parameter then \seplistD does nothing.
+
+For example, the next read token \tmp is "e". Then \seplistD{epA}{sepA}
+saves the \seplistD{pA}{sepA} to \seplistLx, because the first letter
+\tmp="e". If the next token \tmp is "p", then \seplistD{A}{sepA} is stored
+to the \seplistLx. And finally, if the next \tmp is "A", then
+\seplistD{A}{sepA} does not store \seplistD{}{sepA}, but it decides that
+separator is found because the first parameter is empty. It defines \sepused
+to its second parameter "sepA" and it does the end of this game by \seplistQ
+plus \seplistZ. If the last token \tmp isn't "A" then the \seplistD{A}{sepA}
+does nothing and the chain is broken because the \seplistLx is set to empty
+in each step. The new chain can be built because \seplistD{sepA}{sepA} is
+still included in \seplistL which isn't changed during calculation.
+
+Macro-programing in TeX is beautiful but it is different than the classical
+technique used by "normal" programming.


Property changes on: trunk/Master/texmf-dist/doc/generic/olsak-misc/seplist.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/olsak-misc/qrcode.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/olsak-misc/qrcode.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/olsak-misc/qrcode.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,2870 @@
+% qrcode.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Petr Olsak <petr at olsak.net>                  Jul. 2015
+
+% This macro qrcode.tex is (roughly speaking) a copy of qrcode.sty
+% macro by Anders Hendrickson <ahendric at cord.edu>, see 
+% http://www.ctan.org/tex-archive/macros/latex/contrib/qrcode
+
+% The main difference between qrcode.sty and qrcode.tex is, that
+% the LaTeX ballast was removed from qrcode.sty by Petr Olsak. The result:
+% The qrcode.tex macro can be used in plain TeX format too.
+
+% Usage: after \input qrcode
+% you can type \qrcode{encoded text}.
+
+% More information about options can be found at the end of this file.
+
+\edef\tmp{\catcode`@=\the\catcode`@\relax}\catcode`\@=11 % LaTeX special character :(
+
+\newcount\qr at i
+\newcount\qr at j
+\newcount\qr at a
+\newcount\qr at b
+\newcount\qr at c
+
+\def\theqr at i{\the\qr at i}
+\def\theqr at j{\the\qr at j}
+
+\def\@relax{\relax}%
+
+\def\preface at macro#1#2{%
+  % #1 = macro name
+  % #2 = text to add to front of macro
+  \def\tempb{#2}%
+  \xa\xa\xa\def\xa\xa\xa#1\xa\xa\xa{\xa\tempb #1}%
+}%
+
+\def\g at preface@macro#1#2{%
+  % #1 = macro to be appended to
+  % #2 = code to add
+  \edef\codeA{#2}%
+  \expandafter\expandafter\expandafter
+  \gdef\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter
+  {\expandafter\codeA#1}%
+}
+
+\def\qr at getstringlength#1{%
+  \bgroup
+    \qr at a=0%
+    \xdef\thestring{#1}%
+    \expandafter\qr at stringlength@recursive\expandafter(\thestring\relax\relax)%
+    \xdef\qr at stringlength{\the\qr at a}%
+  \egroup
+}%
+
+\def\qr at stringlength@recursive(#1#2){%
+  \def\testi{#1}%
+  \ifx\testi\@relax
+    %we are done.
+    \let\qr at next=\relax%
+  \else
+    \advance\qr at a by 1%
+    \def\qr at next{\qr at stringlength@recursive(#2)}%
+  \fi
+  \qr at next
+}%
+
+\def\qr at for#1=#2to#3by#4#{\forA{#1}{#2}{#3}{#4}}
+\long\def\forA#1#2#3#4#5{\begingroup
+   {\escapechar=`\\ % allocation of #1 as counter:
+      \expandafter \ifx\csname for:\string#1\endcsname \relax
+         \csname newcount\expandafter\endcsname \csname for:\string#1\endcsname\fi
+    \expandafter}\expandafter\let\expandafter#1\csname for:\string#1\endcsname
+   #1=#2%
+   \def\forB{#5\advance#1by#4\relax \expandafter\forC}%
+   \ifnum#4>0 \def\forC{\ifnum#1>#3\relax\else\forB\fi}%
+   \else      \def\forC{\ifnum#1<#3\relax\else\forB\fi}%
+   \fi
+   \ifnum#4=0 \let\forC=\relax \fi
+   \forC \endgroup
+}
+
+\def\qr at padatfront#1#2{%
+  % #1 = macro containing text to pad
+  % #2 = desired number of characters
+  % Pads a number with initial zeros.
+  \qr at getstringlength{#1}%
+  \qr at a=\qr at stringlength\relax%
+  \advance\qr at a by 1\relax%
+  \qr at for \i = \qr at a to #2 by 1
+    {\g at preface@macro{#1}{0}}%
+}
+
+\qr at a=-1\relax%
+\def\qr at savehexsymbols(#1#2){%
+  \advance\qr at a by 1\relax%
+  \expandafter\def\csname qr at hexchar@\the\qr at a\endcsname{#1}%
+  \expandafter\edef\csname qr at hextodecimal@#1\endcsname{\the\qr at a}%
+  \ifnum\qr at a=15\relax
+    %Done.
+    \let\qr at next=\relax%
+  \else
+    \def\qr at next{\qr at savehexsymbols(#2)}%
+  \fi%
+  \qr at next%
+}%
+\qr at savehexsymbols(0123456789abcdef\relax\relax)%
+
+\def\qr at decimaltobase#1#2#3{%
+  % #1 = macro to store result
+  % #2 = decimal representation of a positive integer
+  % #3 = new base
+  \bgroup
+    \edef\qr at newbase{#3}%
+    \gdef\qr at base@result{}%
+    \qr at a=#2\relax%
+    \qr at decimaltobase@recursive%
+    \xdef#1{\qr at base@result}%
+  \egroup
+}
+\def\qr at decimaltobase@recursive{%
+  \qr at b=\qr at a%
+  \divide\qr at b by \qr at newbase\relax
+  \multiply\qr at b by -\qr at newbase\relax
+  \advance\qr at b by \qr at a\relax%
+  \divide\qr at a by \qr at newbase\relax%
+  \ifnum\qr at b<10\relax
+    \edef\newdigit{\the\qr at b}%
+  \else
+    \edef\newdigit{\csname qr at hexchar@\the\qr at b\endcsname}%
+  \fi
+  \edef\qr at argument{{\noexpand\qr at base@result}{\newdigit}}%
+  \expandafter\g at preface@macro\qr at argument%
+  \ifnum\qr at a=0\relax
+    \relax
+  \else
+    \expandafter\qr at decimaltobase@recursive
+  \fi
+}
+
+
+\long\def\isnextchar#1#2#3{\def\tmpa{#2}\def\tmpb{#3}%
+   \let\tmp=#1\futurelet\next\isnextcharA
+}
+\def\isnextcharA{\ifx\tmp\next\expandafter\tmpa\else\expandafter\tmpb\fi}
+
+\long\def\xaddto#1#2{\expandafter\xdef\expandafter#1\expandafter{#1#2}}
+\let\g at addto@macro=\xaddto
+
+\def\qr at decimaltohex[#1]#2#3{%
+  % #1 (opt.) = number of hex digits to create
+  % #2 = macro to store result
+  % #3 = decimal digits to convert
+  \qr at decimaltobase{#2}{#3}{16}%
+  \qr at padatfront{#2}{#1}%
+}
+
+\def\qr at decimaltobinary[#1]#2#3{%
+  % #1 (opt.) = number of bits to create
+  % #2 = macro to store result
+  % #3 = decimal digits to convert
+  \qr at decimaltobase{#2}{#3}{2}%
+  \qr at padatfront{#2}{#1}%
+}
+
+\qr at for \i = 0 to 15 by 1%
+  {%
+   \qr at decimaltohex[1]{\qr at hexchar}{\the\i}%
+   \qr at decimaltobinary[4]{\qr at bits}{\the\i}%
+   \expandafter\xdef\csname qr at b2h@\qr at bits\endcsname{\qr at hexchar}%
+   \expandafter\xdef\csname qr at h2b@\qr at hexchar\endcsname{\qr at bits}%
+  }%
+
+\def\qr at binarytohex[#1]#2#3{%
+  % #1 (optional) = # digits desired
+  % #2 = macro to save to
+  % #3 = binary string (must be multiple of 4 bits)
+  \def\test at i{#1}%
+  \ifx\test at i\@relax%
+    %No argument specified
+    \def\qr at desireddigits{0}%
+  \else
+    \def\qr at desireddigits{#1}%
+  \fi
+  \gdef\qr at base@result{}%
+  \edef\qr at argument{(#3\relax\relax\relax\relax\relax)}%
+  \xa\qr at binarytohex@int\qr at argument%
+  \qr at padatfront{\qr at base@result}{\qr at desireddigits}%
+  \xdef#2{\qr at base@result}%
+}
+\def\qr at binarytohex@int(#1#2#3#4#5){%
+  % #1#2#3#4 = 4 bits
+  % #5 = remainder, including \relax\relax\relax\relax\relax terminator
+  \def\test at i{#1}%
+  \ifx\test at i\@relax%
+    %Done.
+    \def\qr at next{\relax}%
+  \else%
+    \xdef\qr at base@result{\qr at base@result\csname qr at b2h@#1#2#3#4\endcsname}%
+    \def\qr at next{\qr at binarytohex@int(#5)}%
+  \fi%
+  \qr at next%
+}
+
+\def\qr at hextobinary[#1]#2#3{%
+  % #1 (optional) = # bits desired
+  % #2 = macro to save to
+  % #3 = hexadecimal string
+  \bgroup
+  \def\test at i{#1}%
+  \ifx\test at i\@relax%
+    %No argument specified
+    \def\qr at desireddigits{0}%
+  \else
+    \def\qr at desireddigits{#1}%
+  \fi
+  \gdef\qr at base@result{}%
+  \edef\qr at argument{(#3\relax\relax)}%
+  \xa\qr at hextobinary@int\qr at argument%
+  \qr at padatfront{\qr at base@result}{\qr at desireddigits}%
+  \xdef#2{\qr at base@result}%
+  \egroup
+}
+\def\qr at hextobinary@int(#1#2){%
+  % #1 = hexadecimal character
+  % #2 = remainder, including \relax\relax terminator
+  \def\test@@i{#1}%
+  \ifx\test@@i\@relax%
+    %Done.
+    \def\qr at next{\relax}%
+  \else%
+    \xdef\qr at base@result{\qr at base@result\csname qr at h2b@#1\endcsname}%
+    \def\qr at next{\qr at hextobinary@int(#2)}%
+  \fi%
+  \qr at next%
+}
+
+\def\qr at hextodecimal#1#2{%
+  \edef\qr at argument{#2}%
+  \xa\qr at a\xa=\xa\number\xa"\qr at argument\relax%
+  \edef#1{\the\qr at a}%
+}
+
+\def\qr at hextodecimal#1#2{%
+  % #1 = macro to store result
+  % #2 = hexadecimal representation of a positive integer
+  \bgroup
+    \qr at a=0\relax%
+    \edef\qr at argument{(#2\relax)}%
+    \xa\qr at hextodecimal@recursive\qr at argument%
+    \xdef#1{\the\qr at a}%
+  \egroup
+}
+\def\qr at hextodecimal@recursive(#1#2){%
+  % #1 = first hex char
+  % #2 = remainder
+  \advance \qr at a by \csname qr at hextodecimal@#1\endcsname\relax%
+  \edef\testii{#2}%
+  \ifx\testii\@relax%
+    %Done.
+    \let\qr at next=\relax%
+  \else
+    %There's at least one more digit.
+    \multiply\qr at a by 16\relax
+    \edef\qr at next{\noexpand\qr at hextodecimal@recursive(#2)}%
+  \fi%
+  \qr at next%
+}
+
+\def\qrverbatim{\def\do##1{\catcode`##1=12}\dospecials
+  \catcode`\\=0 \catcode`\{=1 \catcode`\}=2
+  \escapechar=-1 \def\do##1{\edef##1{\string##1}}\dospecials
+  \def\?{^^J}\let\ =\qr at letterspace
+  \catcode`\^^M=13 \qr at setMtoJ
+  \ifx\mubytein\undefined \else \mubytein=0 \fi
+}
+{\lccode`\?=`\ \lowercase{\gdef\qr at letterspace{?}}}
+{\catcode`\^^M=13 \gdef\qr at setMtoJ{\def^^M{^^J}}}
+
+\def\qr at creatematrix#1{%
+  \expandafter\gdef\csname #1\endcsname##1##2{%
+    \csname #1@##1@##2\endcsname
+  }%
+}%
+
+\def\qr at storetomatrix#1#2#3#4{%
+  % #1 = matrix name
+  % #2 = row number
+  % #3 = column number
+  % #4 = value of matrix entry
+  \xa\gdef\csname #1@#2@#3\endcsname{#4}%
+}%
+
+\def\qr at estoretomatrix#1#2#3#4{%
+  % This version performs exactly one expansion on #4.
+  % #1 = matrix name
+  % #2 = row number
+  % #3 = column number
+  % #4 = value of matrix
+  \expandafter\gdef\csname #1@#2@#3\expandafter\endcsname\expandafter{#4}%
+}%
+
+\def\qr at matrixentry#1#2#3{%
+  % #1 = matrix name
+  % #2 = row number
+  % #3 = column number
+  \csname #1@#2@#3\endcsname%
+}%
+
+\def\qr at createsquareblankmatrix#1#2{%
+  \qr at creatematrix{#1}%
+  \xa\gdef\csname #1 at numrows\endcsname{#2}%
+  \xa\gdef\csname #1 at numcols\endcsname{#2}%
+  \qr at for \i = 1 to #2 by 1%
+    {\qr at for \j = 1 to #2 by 1%
+      {\qr at storetomatrix{#1}{\the\i}{\the\j}{\@blank}}}%
+}%
+
+\def\qr at numberofrowsinmatrix#1{%
+  \csname #1 at numrows\endcsname%
+}%
+
+\def\qr at numberofcolsinmatrix#1{%
+  \csname #1 at numcols\endcsname%
+}%
+
+\def\qr at setnumberofrows#1#2{%
+  \xa\xdef\csname #1 at numrows\endcsname{#2}%
+}%
+
+\def\qr at setnumberofcols#1#2{%
+  \xa\xdef\csname #1 at numcols\endcsname{#2}%
+}%
+
+\newdimen\qrdesiredheight
+\newdimen\qrmodulesize
+
+\def\qr at link#1#2{\hbox{\pdfstartlink height\ht0 depth0pt \qr at border
+   user{/Subtype/Link/A <</Type/Action/S/URI/URI(#1)>>}\relax #2\pdfendlink}%
+}
+\def\qr at border{\expandafter\ifx \csname kv:qrborder\endcsname\relax \else
+   attr{/C[\kv{qrborder}] /Border[0 0 .6]}\fi
+}
+
+\def\qr at createliteralmatrix#1#2#3{%
+  % #1 = matrix name
+  % #2 = m, the number of rows and columns in the square matrix
+  % #3 = a string of m^2 tokens to be written into the matrix
+  \qr at creatematrix{#1}%
+  \expandafter\xdef\csname #1 at numrows\endcsname{#2}%
+  \expandafter\xdef\csname #1 at numcols\endcsname{#2}%
+  \gdef\qr at literalmatrix@tokens{#3}%
+  \qr at for \i = 1 to #2 by 1%
+    {\qr at for \j = 1 to #2 by 1%
+      {\expandafter\qr at createliteralmatrix@int\expandafter(\qr at literalmatrix@tokens)%
+       \qr at estoretomatrix{#1}{\the\i}{\the\j}{\qr at entrytext}%
+      }%
+    }%
+}
+\def\qr at createliteralmatrix@int(#1#2){%
+  \def\qr at entrytext{#1}%
+  \gdef\qr at literalmatrix@tokens{#2}%
+}
+
+\qr at createliteralmatrix{finderpattern}{8}{%
+  \qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at white@fixed%
+  \qr at black@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at black@fixed\qr at white@fixed%
+  \qr at black@fixed\qr at white@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at white@fixed\qr at black@fixed\qr at white@fixed%
+  \qr at black@fixed\qr at white@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at white@fixed\qr at black@fixed\qr at white@fixed%
+  \qr at black@fixed\qr at white@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at white@fixed\qr at black@fixed\qr at white@fixed%
+  \qr at black@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at black@fixed\qr at white@fixed%
+  \qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at white@fixed%
+  \qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed%
+}%
+
+\qr at createliteralmatrix{alignmentpattern}{5}{%
+  \qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed%
+  \qr at black@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at black@fixed%
+  \qr at black@fixed\qr at white@fixed\qr at black@fixed\qr at white@fixed\qr at black@fixed%
+  \qr at black@fixed\qr at white@fixed\qr at white@fixed\qr at white@fixed\qr at black@fixed%
+  \qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed\qr at black@fixed%
+}%
+
+\def\qr at copymatrixentry#1#2#3#4#5#6{%
+  % Copy the (#2,#3) entry of matrix #1
+  % to the (#5,#6) position of matrix #4.
+  \xa\xa\xa\global%
+  \xa\xa\xa\let\xa\xa\csname #4@#5@#6\endcsname%
+                     \csname #1@#2@#3\endcsname%
+}%
+
+\def\qr at createduplicatematrix#1#2{%
+  % #1 = name of copy
+  % #2 = original matrix to be copied
+  \qr at creatematrix{#1}%
+  \qr at for \i = 1 to \qr at numberofrowsinmatrix{#2} by 1%
+    {\qr at for \j = 1 to \qr at numberofcolsinmatrix{#2} by 1%
+      {\qr at copymatrixentry{#2}{\the\i}{\the\j}{#1}{\the\i}{\the\j}%
+      }%
+    }%
+  \qr at setnumberofrows{#1}{\qr at numberofrowsinmatrix{#2}}%
+  \qr at setnumberofcols{#1}{\qr at numberofcolsinmatrix{#2}}%
+}%
+
+\def\qr at placefinderpattern@int#1#2#3#4#5{%
+  % Work on matrix #1.
+  % Start in position (#2, #3) -- should be a corner
+  % #4 indicates horizontal direction (1=right, -1=left)
+  % #5 indicates vertical direction (1=down, -1=up)
+  %
+  % In this code, \sourcei and \sourcej are TeX counts working through the finderpattern matrix,
+  % and i and j are LaTeX counters indicating positions in the big matrix.
+  \setcounter{qr at i}{#2}%
+  \qr at for \sourcei=1 to 8 by 1%
+    {\setcounter{qr at j}{#3}%
+     \qr at for \sourcej=1 to 8 by 1%
+       {\qr at copymatrixentry{finderpattern}{\the\sourcei}{\the\sourcej}%
+                        {#1}{\theqr at i}{\theqr at j}%
+        \addtocounter{qr at j}{#5}%
+       }%
+     \addtocounter{qr at i}{#4}%
+    }%
+}%
+
+\def\qr at placefinderpatterns#1{%
+  % #1=matrix name
+  \qr at placefinderpattern@int{#1}{1}{1}{1}{1}%
+  \qr at placefinderpattern@int{#1}{\qr at numberofrowsinmatrix{#1}}{1}{-1}{1}%
+  \qr at placefinderpattern@int{#1}{1}{\qr at numberofcolsinmatrix{#1}}{1}{-1}%
+}%
+
+\def\qr at placetimingpatterns#1{%
+  %Set \endingcol to n-8.
+  \qr at a=\qr at size\relax%
+  \advance\qr at a by -8\relax%
+  \edef\endingcol{\the\qr at a}%
+  \qr at for \j = 9 to \endingcol by 1%
+    {\ifodd\j\relax%
+       \qr at storetomatrix{#1}{7}{\the\j}{\qr at black@fixed}%
+       \qr at storetomatrix{#1}{\the\j}{7}{\qr at black@fixed}%
+     \else%
+       \qr at storetomatrix{#1}{7}{\the\j}{\qr at white@fixed}%
+       \qr at storetomatrix{#1}{\the\j}{7}{\qr at white@fixed}%
+     \fi%
+    }%
+}%
+
+\def\qr at placealignmentpattern@int#1#2#3{%
+  % Work on matrix #1.
+  % Write an alignment pattern into the matrix, centered on (#2,#3).
+  \qr at a=#2\relax%
+  \advance\qr at a by -2\relax%
+  \qr at b=#3\relax%
+  \advance\qr at b by -2\relax%
+  \setcounter{qr at i}{\the\qr at a}%
+  \qr at for \i=1 to 5 by 1%
+    {\setcounter{qr at j}{\the\qr at b}%
+     \qr at for \j=1 to 5 by 1%
+      {\qr at copymatrixentry{alignmentpattern}{\the\i}{\the\j}%
+                       {#1}{\theqr at i}{\theqr at j}%
+       \stepcounter{qr at j}%
+      }%
+     \stepcounter{qr at i}%
+    }%
+}%
+
+\newif\ifqr at incorner%
+\def\qr at placealignmentpatterns#1{%
+  %There are k^2-3 alignment patterns,
+  %arranged in a (k x k) grid within the matrix.
+  %They begin in row 7, column 7,
+  %except that the ones in the NW, NE, and SW corners
+  %are omitted because of the finder patterns.
+  %Recall that
+  %  * \qr at k stores k,
+  %  * \qr at alignment@firstskip stores how far between the 1st and 2nd row/col, &
+  %  * \qr at alignment@generalskip stores how far between each subsequent row/col.
+  \xa\ifnum\qr at k>0\relax
+    %There will be at least one alignment pattern.
+    %N.B. k cannot equal 1.
+    \xa\ifnum\qr at k=2\relax
+      % 2*2-3 = exactly 1 alignment pattern.
+      \qr at a=7\relax
+      \advance\qr at a by \qr at alignment@firstskip\relax
+      \xdef\qr at target@ii{\the\qr at a}%
+      \qr at placealignmentpattern@int{#1}{\qr at target@ii}{\qr at target@ii}%
+    \else
+      % k is at least 3, so the following loops should be safe.
+      \xdef\qr at target@ii{7}%
+      \qr at for \ii = 1 to \qr at k by 1%
+        {\ifcase\ii\relax%
+           \relax% \ii should never equal 0.
+         \or
+           \xdef\qr at target@ii{7}% If \ii = 1, we start in row 7.
+         \or
+           %If \ii = 2, we add the firstskip.
+           \qr at a=\qr at target@ii\relax%
+           \advance\qr at a by \qr at alignment@firstskip\relax%
+           \xdef\qr at target@ii{\the\qr at a}%
+         \else
+           %If \ii>2, we add the generalskip.
+           \qr at a=\qr at target@ii\relax%
+           \advance\qr at a by \qr at alignment@generalskip\relax%
+           \xdef\qr at target@ii{\the\qr at a}%
+         \fi
+         \qr at for \jj = 1 to \qr at k by 1%
+           {\ifcase\jj\relax%
+              \relax% \jj should never equal 0.
+            \or
+              \xdef\qr at target@jj{7}% If \jj=1, we start in row 7.
+            \or
+              %If \jj=2, we add the firstskip.
+              \qr at a=\qr at target@jj\relax%
+              \advance\qr at a by \qr at alignment@firstskip%
+              \xdef\qr at target@jj{\the\qr at a}%
+            \else
+              %If \jj>2, we add the generalskip.
+              \qr at a=\qr at target@jj\relax%
+              \advance\qr at a by \qr at alignment@generalskip%
+              \xdef\qr at target@jj{\the\qr at a}%
+            \fi
+            \qr at incornerfalse%
+            \ifnum\ii=1\relax
+              \ifnum\jj=1\relax
+                \qr at incornertrue
+              \else
+                \ifnum\qr at k=\jj\relax
+                  \qr at incornertrue
+                \fi
+              \fi
+            \else
+              \xa\ifnum\qr at k=\ii\relax
+                \ifnum\jj=1\relax
+                  \qr at incornertrue
+                \fi
+              \fi
+            \fi
+            \ifqr at incorner
+              \relax
+            \else
+              \qr at placealignmentpattern@int{#1}{\qr at target@ii}{\qr at target@jj}%
+            \fi
+           }% ends \qr at for \jj
+        }% ends \qr at for \ii
+    \fi
+  \fi
+}%
+
+\def\qr at placedummyformatpatterns#1{%
+  \qr at for \j = 1 to 9 by 1%
+    {\ifnum\j=7\relax%
+     \else%
+       \qr at storetomatrix{#1}{9}{\the\j}{\qr at format@square}%
+       \qr at storetomatrix{#1}{\the\j}{9}{\qr at format@square}%
+     \fi%
+    }%
+  \setcounter{qr at j}{\qr at size}%
+  \qr at for \j = 1 to 8 by 1%
+    {\qr at storetomatrix{#1}{9}{\theqr at j}{\qr at format@square}%
+     \qr at storetomatrix{#1}{\theqr at j}{9}{\qr at format@square}%
+     \addtocounter{qr at j}{-1}%
+    }%
+  %Now go back and change the \qr at format@square in (n-8,9) to \qr at black@fixed.
+  \addtocounter{qr at j}{1}%
+  \qr at storetomatrix{#1}{\theqr at j}{9}{\qr at black@fixed}%
+}%
+
+\def\qr at placedummyversionpatterns#1{%
+  \xa\ifnum\qr at version>6\relax
+    %Must include version information.
+    \global\qr at i=\qr at size%
+    \global\advance\qr at i by -10\relax%
+    \qr at for \i = 1 to 3 by 1%
+      {\qr at for \j = 1 to 6 by 1%
+        {\qr at storetomatrix{#1}{\theqr at i}{\the\j}{\qr at format@square}%
+         \qr at storetomatrix{#1}{\the\j}{\theqr at i}{\qr at format@square}%
+        }%
+       \stepcounter{qr at i}%
+      }%
+  \fi
+}%
+
+\def\qr at writebit(#1#2)#3{%
+  % #3 = matrix name
+  % (qr at i,qr at j) = position to write in (LaTeX counters)
+  % #1 = bit to be written
+  % #2 = remaining bits plus '\relax' as an end-of-file marker
+  \edef\qr at datatowrite{#2}%
+  \ifnum#1=1
+    \qr at storetomatrix{#3}{\theqr at i}{\theqr at j}{\qr at black}%
+  \else
+    \qr at storetomatrix{#3}{\theqr at i}{\theqr at j}{\@white}%
+  \fi
+}%
+
+\newif\ifqr at rightcol
+\newif\ifqr at goingup
+
+\def\qr at writedata@hex#1#2{%
+  % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc.
+  % #2 = a string consisting of bytes to write into the matrix, in two-char hex format.
+  \setcounter{qr at i}{\qr at numberofrowsinmatrix{#1}}%
+  \setcounter{qr at j}{\qr at numberofcolsinmatrix{#1}}%
+  \qr at rightcoltrue%
+  \qr at goinguptrue%
+  \edef\qr at argument{{#1}(#2\relax\relax\relax)}%
+  \xa\qr at writedata@hex at recursive\qr at argument%
+}%
+
+\def\qr at writedata@hex at recursive#1(#2#3#4){%
+  % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc.
+  % (qr at i,qr at j) = position to write in LaTeX counters
+  % #2#3#4 contains the hex codes of the bytes to be written, plus \relax\relax\relax
+  % as an end-of-file marker
+  \edef\testii{#2}%
+  \ifx\testii\@relax%
+    % #2 is \relax, so there is nothing more to write.
+    \relax
+    \let\go=\relax
+  \else
+    % #2 is not \relax, so there is another byte to write.
+    \qr at hextobinary[8]{\bytetowrite}{#2#3}%
+    \xdef\qr at datatowrite{\bytetowrite\relax}% %Add terminating "\relax"
+    \qr at writedata@recursive{#1}% %This function actually writes the 8 bits.
+    \edef\qr at argument{{#1}(#4)}%
+    \xa\def\xa\go\xa{\xa\qr at writedata@hex at recursive\qr at argument}% %Call self to write the next bit.
+  \fi
+  \go
+}%
+
+\def\qr at writedata#1#2{%
+  % #1 = name of a matrix that has been prepared with finder patterns, timing patterns, etc.
+  % #2 = a string consisting of 0's and 1's to write into the matrix.
+  \setcounter{qr at i}{\qr at numberofrowsinmatrix{#1}}%
+  \setcounter{qr at j}{\qr at numberofcolsinmatrix{#1}}%
+  \qr at rightcoltrue
+  \qr at goinguptrue
+  \edef\qr at datatowrite{#2\relax}%
+  \qr at writedata@recursive{#1}%
+}%
+
+\def\@@blank{\@blank}%
+
+\def\qr at writedata@recursive#1{%
+  % #1 = matrix name
+  % (qr at i,qr at j) = position to write in (LaTeX counters)
+  % \qr at datatowrite contains the bits to be written, plus '\relax' as an end-of-file marker
+  \xa\let\xa\squarevalue\csname #1@\theqr at i @\theqr at j\endcsname%
+  \ifx\squarevalue\@@blank
+    %Square is blank, so write data in it.
+    \xa\qr at writebit\xa(\qr at datatowrite){#1}%
+    %The \qr at writebit macro not only writes the first bit of \qr at datatowrite into the matrix,
+    %but also removes the bit from the 'bitstream' of \qr at datatowrite.
+  \fi
+  %Now adjust our position in the matrix.
+  \ifqr at rightcol
+    %From the right-hand half of the two-bit column, we always move left.  Easy peasy.
+    \addtocounter{qr at j}{-1}%
+    \qr at rightcolfalse
+  \else
+    %If we're in the left-hand column, things are harder.
+    \ifqr at goingup
+      %First, suppose we're going upwards.
+      \ifnum\qr at i>1\relax%
+        %If we're not in the first row, things are easy.
+        %We move one to the right and one up.
+        \addtocounter{qr at j}{1}%
+        \addtocounter{qr at i}{-1}%
+        \qr at rightcoltrue
+      \else
+        %If we are in the first row, then we move to the left,
+        %and we are now in the right-hand column on a downward pass.
+        \addtocounter{qr at j}{-1}%
+        \qr at goingupfalse
+        \qr at rightcoltrue
+      \fi
+    \else
+      %Now, suppose we're going downwards.
+      \xa\ifnum\qr at size>\qr at i\relax%
+        %If we're not yet in the bottom row, things are easy.
+        %We move one to the right and one down.
+        \addtocounter{qr at j}{1}%
+        \addtocounter{qr at i}{1}%
+        \qr at rightcoltrue
+      \else
+        %If we are in the bottom row, then we move to the left,
+        %and we are now in the right-hand column on an upward pass.
+        \addtocounter{qr at j}{-1}%
+        \qr at rightcoltrue
+        \qr at goinguptrue
+      \fi
+    \fi
+    %One problem: what if we just moved into the 7th column?
+    %Das ist verboten.
+    %If we just moved (left) into the 7th column, we should move on into the 6th column.
+    \ifnum\qr at j=7\relax%
+      \setcounter{qr at j}{6}%
+    \fi
+  \fi
+  %Now check whether there are any more bits to write.
+  \ifx\qr at datatowrite\@relax
+    % \qr at datatowrite is just `\relax', so we're done.
+    \let\nexttoken=\relax
+    \relax
+  \else
+    % Write some more!
+    \def\nexttoken{\qr at writedata@recursive{#1}}%
+  \fi
+  \nexttoken
+}%
+
+\def\qr at writeremainderbits#1{%
+  % #1 = name of a matrix that has been prepared and partly filled.
+  % (qr at i,qr at j) = position to write in LaTeX counters
+  \xa\ifnum\qr at numremainderbits>0\relax
+    \def\qr at datatowrite{}%
+    \qr at for \i = 1 to \qr at numremainderbits by 1%
+      {\g at addto@macro{\qr at datatowrite}{0}}%
+    \g at addto@macro{\qr at datatowrite}{\relax}% terminator
+    \qr at writedata@recursive{#1}%
+  \fi
+}%
+
+\newif\ifqr at cellinmask
+
+\def\qr at setmaskingfunction#1{%
+  % #1 = 1 decimal digit for the mask. (I see no reason to use the 3-bit binary code.)
+  % The current position is (\themaski,\themaskj), with indexing starting at 0.
+  \edef\maskselection{#1}%
+  \xa\ifcase\maskselection\relax
+    %Case 0: checkerboard
+    \def\qr at parsemaskingfunction{%
+      % Compute mod(\themaski+\themaskj,2)%
+      \qr at a=\maski%
+      \advance\qr at a by \maskj%
+      \qr at b=\qr at a%
+      \divide\qr at b by 2%
+      \multiply\qr at b by 2%
+      \advance\qr at a by -\qr at b%
+      \edef\qr at maskfunctionresult{\the\qr at a}%
+    }%
+  \or
+    %Case 1: horizontal stripes
+    \def\qr at parsemaskingfunction{%
+      % Compute mod(\themaski,2)%
+      \ifodd\maski\relax%
+        \def\qr at maskfunctionresult{1}%
+      \else%
+        \def\qr at maskfunctionresult{0}%
+      \fi%
+    }%
+  \or
+    %Case 2: vertical stripes
+    \def\qr at parsemaskingfunction{%
+      % Compute mod(\themaskj,3)%
+      \qr at a=\maskj%
+      \divide\qr at a by 3%
+      \multiply\qr at a by 3%
+      \advance\qr at a by -\maskj%
+      \edef\qr at maskfunctionresult{\the\qr at a}%
+    }%
+  \or
+    %Case 3: diagonal stripes
+    \def\qr at parsemaskingfunction{%
+      % Compute mod(\themaski+\themaskj,3)%
+      \qr at a=\maski%
+      \advance\qr at a by \maskj%
+      \qr at b=\qr at a%
+      \divide\qr at b by 3%
+      \multiply\qr at b by 3%
+      \advance\qr at b by -\qr at a%
+      \edef\qr at maskfunctionresult{\the\qr at b}%
+    }%
+  \or
+    %Case 4: wide checkerboard
+    \def\qr at parsemaskingfunction{%
+      % Compute mod(floor(\themaski/2) + floor(\themaskj/3),2) %
+      \qr at a=\maski%
+      \divide\qr at a by 2%
+      \qr at b=\maskj%
+      \divide\qr at b by 3%
+      \advance\qr at a by \qr at b%
+      \qr at b=\qr at a%
+      \divide\qr at a by 2%
+      \multiply\qr at a by 2%
+      \advance\qr at a by -\qr at b%
+      \edef\qr at maskfunctionresult{\the\qr at a}%
+    }%
+  \or
+    %Case 5: quilt
+    \def\qr at parsemaskingfunction{%
+      % Compute mod(\themaski*\themaskj,2) + mod(\themaski*\themaskj,3) %
+      \qr at a=\maski%
+      \multiply\qr at a by \maskj%
+      \qr at b=\qr at a%
+      \qr at c=\qr at a%
+      \divide\qr at a by 2%
+      \multiply\qr at a by 2%
+      \advance\qr at a by -\qr at c% (result will be -mod(i*j,2), which is negative.)
+      \divide\qr at b by 3%
+      \multiply\qr at b by 3%
+      \advance\qr at b by -\qr at c% (result will be -mod(i*j,3), which is negative.)
+      \advance\qr at a by \qr at b% (result is negative of what's in the spec.)
+      \edef\qr at maskfunctionresult{\the\qr at a}%
+    }%
+  \or
+    %Case 6: arrows
+    \def\qr at parsemaskingfunction{%
+      % Compute mod( mod(\themaski*\themaskj,2) + mod(\themaski*\themaskj,3) , 2 ) %
+      \qr at a=\maski%
+      \multiply\qr at a by \maskj%
+      \qr at b=\qr at a%
+      \qr at c=\qr at a%
+      \multiply\qr at c by 2% % \qr at c equals 2*i*j.
+      \divide\qr at a by 2%
+      \multiply\qr at a by 2%
+      \advance\qr at c by -\qr at a% Now \qr at c equals i*j + mod(i*j,2).
+      \divide\qr at b by 3%
+      \multiply\qr at b by 3%
+      \advance\qr at c by -\qr at b% (Now \qr at c equals mod(i*j,2) + mod(i*j,3).
+      \qr at a=\qr at c%
+      \divide\qr at a by 2%
+      \multiply\qr at a by 2%
+      \advance\qr at c by-\qr at a%
+      \edef\qr at maskfunctionresult{\the\qr at c}%
+    }%
+  \or
+    %Case 7: shotgun
+    \def\qr at parsemaskingfunction{%
+      % Compute mod( mod(\themaski+\themaskj,2) + mod(\themaski*\themaskj,3) , 2 ) %
+      \qr at a=\maski%
+      \advance\qr at a by \maskj% %So \qr at a = i+j
+      \qr at b=\maski%
+      \multiply\qr at b by \maskj% %So \qr at b = i*j
+      \qr at c=\qr at a%
+      \advance\qr at c by \qr at b% So \qr at c = i+j+i*j
+      \divide\qr at a by 2%
+      \multiply\qr at a by 2%
+      \advance\qr at c by -\qr at a% So \qr at c = mod(i+j,2) + i*j
+      \divide\qr at b by 3%
+      \multiply\qr at b by 3%
+      \advance\qr at c by -\qr at b% So \qr at c = mod(i+j,2) + mod(i*j,3)
+      \qr at a=\qr at c%
+      \divide\qr at c by 2%
+      \multiply\qr at c by 2%
+      \advance\qr at a by -\qr at c%
+      \edef\qr at maskfunctionresult{\the\qr at a}%
+    }%
+  \fi
+}%
+
+\def\qr at checkifcellisinmask{%
+  % The current position is (\i,\j), in TeX counts,
+  % but the LaTeX counters (maski,maskj) should contain
+  % the current position with indexing starting at 0.
+  % That is, maski = \i-1 and maskj = \j-1.
+  %
+  % \qr at parsemaskingfunction must have been set by a call to \qr at setmaskingfunction
+  \qr at parsemaskingfunction
+  \xa\ifnum\qr at maskfunctionresult=0\relax
+    \qr at cellinmasktrue
+  \else
+    \qr at cellinmaskfalse
+  \fi
+}%
+
+\newcount\maski
+\newcount\maskj
+
+\def\qr at applymask#1#2#3{%
+  % #1 = name of a matrix that should be filled out completely
+  %      except for the format and/or version information.
+  % #2 = name of a new matrix to contain the masked version
+  % #3 = 1 decimal digit naming the mask
+  \qr at createduplicatematrix{#2}{#1}%
+  \qr at setmaskingfunction{#3}%
+  \setcounter{maski}{-1}%
+  \qr at for \i = 1 to \qr at size by 1%
+    {\stepcounter{maski}%
+     \setcounter{maskj}{-1}%
+     \qr at for \j = 1 to \qr at size by 1%
+     {\stepcounter{maskj}%
+      \qr at checkifcellisinmask
+      \ifqr at cellinmask
+        \qr at checkifcurrentcellcontainsdata{#2}%
+        \ifqr at currentcellcontainsdata
+          \qr at flipcurrentcell{#2}%
+        \fi
+      \fi
+      }%
+    }%
+}%
+
+\newif\ifqr at currentcellcontainsdata
+\qr at currentcellcontainsdatafalse
+
+\def\@@white{\@white}%
+\def\@@black{\qr at black}%
+
+\def\qr at checkifcurrentcellcontainsdata#1{%
+  % #1 = name of matrix
+  \qr at currentcellcontainsdatafalse
+  \xa\ifx\csname #1@\the\i @\the\j\endcsname\@@white
+    \qr at currentcellcontainsdatatrue
+  \fi
+  \xa\ifx\csname #1@\the\i @\the\j\endcsname\@@black
+    \qr at currentcellcontainsdatatrue
+  \fi
+}%
+
+\def\qr at flipped@black{\qr at black}%
+\def\qr at flipped@white{\@white}%
+
+\def\qr at flipcurrentcell#1{%
+  % #1 = name of matrix
+  % (\i, \j) = current position, in TeX counts.
+  % This assumes the cell contains data, either black or white!
+  \xa\ifx\csname #1@\the\i @\the\j\endcsname\@@white
+    \qr at storetomatrix{#1}{\the\i}{\the\j}{\qr at flipped@black}%
+  \else
+    \qr at storetomatrix{#1}{\the\i}{\the\j}{\qr at flipped@white}%
+  \fi
+}%
+
+\def\qr at chooseandapplybestmask#1{%
+  % #1 = name of a matrix that should be filled out completely
+  %      except for the format and/or version information.
+  % This function applies all eight masks in succession,
+  % calculates their penalties, and remembers the best.
+  % The number indicating which mask was used is saved in \qr at mask@selected.
+  \qr at createduplicatematrix{originalmatrix}{#1}%
+  \qrmessage{<Applying Mask 0...}%
+  \qr at applymask{originalmatrix}{#1}{0}%
+  \qrmessage{done. Calculating penalty...}%
+  \qr at evaluatemaskpenalty{#1}%
+  \xdef\currentbestpenalty{\qr at penalty}%
+  \qrmessage{penalty is \qr at penalty>^^J}%
+  \gdef\currentbestmask{0}%
+  \qr at for \i = 1 to 7 by 1%
+    {\qrmessage{<Applying Mask \the\i...}%
+     \qr at applymask{originalmatrix}{currentmasked}{\the\i}%
+     \qrmessage{done. Calculating penalty...}%
+     \qr at evaluatemaskpenalty{currentmasked}%
+     \qrmessage{penalty is \qr at penalty>^^J}%
+     \xa\xa\xa\ifnum\xa\qr at penalty\xa<\currentbestpenalty\relax
+       %We found a better mask.
+       \xdef\currentbestmask{\the\i}%
+       \qr at createduplicatematrix{#1}{currentmasked}%
+       \xdef\currentbestpenalty{\qr at penalty}%
+     \fi
+    }%
+  \xdef\qr at mask@selected{\currentbestmask}%
+  \qrmessage{<Selected Mask \qr at mask@selected>^^J}%
+}%
+
+\def\qr at Ni{3}%
+\def\qr at Nii{3}%
+\def\qr at Niii{40}%
+\def\qr at Niv{10}%
+\def\@fiveones{11111}%
+\def\@fivezeros{11111}%
+\def\@twoones{11}%
+\def\@twozeros{00}%
+\def\@finderA{00001011101}%
+\def\@finderB{10111010000}%
+\def\@finderB at three{1011101000}%
+\def\@finderB at two{101110100}%
+\def\@finderB at one{10111010}%
+\def\@finderB at zero{1011101}%
+\newif\ifstringoffive
+\def\addpenaltyiii{%
+  \addtocounter{penaltyiii}{\qr at Niii}%
+}%
+\newcount\totalones
+\newcount\penaltyi
+\newcount\penaltyii
+\newcount\penaltyiii
+\newcount\penaltyiv
+\def\qr at evaluatemaskpenalty#1{%
+  % #1 = name of a matrix that we will test for the penalty
+  % according to the specs.
+  \setcounter{penaltyi}{0}%
+  \setcounter{penaltyii}{0}%
+  \setcounter{penaltyiii}{0}%
+  \setcounter{penaltyiv}{0}%
+  \bgroup%localize the meanings we give to the symbols
+    \def\qr at black{1}\def\@white{0}%
+    \def\qr at black@fixed{1}\def\qr at white@fixed{0}%
+    \def\qr at format@square{0}% This is not stated in the specs, but seems
+                            % to be the standard implementation.
+    \def\@blank{0}% These would be any bits at the end.
+    %
+    \setcounter{totalones}{0}%
+    \qr at for \i=1 to \qr at size by 1%
+      {\def\lastfive{z}% %The z is a dummy, that will be removed before any testing.
+       \stringoffivefalse
+       \def\lasttwo at thisrow{z}% %The z is a dummy.
+       \def\lasttwo at nextrow{z}% %The z is a dummy.
+       \def\lastnine{z0000}% %The 0000 stands for the white space to the left. The z is a dummy.
+       \def\ignore at finderB@at{0}%
+       \qr at for \j=1 to \qr at size by 1%
+         {\edef\newbit{\qr at matrixentry{#1}{\the\i}{\the\j}}%
+          %
+          % LASTFIVE CODE FOR PENALTY 1
+          % First, add the new bit to the end.
+          \xa\g at addto@macro\xa\lastfive\xa{\newbit}%
+          \ifnum\j<5\relax%
+            %Not yet on the 5th entry.
+            %Don't do any testing.
+          \else
+            % 5th entry or later.
+            % Remove the old one, and then test.
+            \removefirsttoken\lastfive%
+            \ifx\lastfive\@fiveones%
+              \ifstringoffive%
+                %This is a continuation of a previous block of five or more 1's.
+                \stepcounter{penaltyi}%
+              \else
+                %This is a new string of five 1's.
+                \addtocounter{penaltyi}{\qr at Ni}%
+                \global\stringoffivetrue
+              \fi
+            \else
+              \ifx\lastfive\@fivezeros%
+                \ifstringoffive
+                  %This is a continuation of a previous block of five or more 0's.
+                  \stepcounter{penaltyi}%
+                \else
+                  %This is a new string of five 0's.
+                  \addtocounter{penaltyi}{\qr at Ni}%
+                  \global\stringoffivetrue
+                \fi
+              \else
+                %This is not a string of five 1's or five 0's.
+                \global\stringoffivefalse
+              \fi
+            \fi
+          \fi
+          %
+          % 2x2 BLOCKS FOR PENALTY 2
+          % Every 2x2 block of all 1's counts for \qr at Nii penalty points.
+          % We do not need to run this test in the last row.
+          \xa\ifnum\xa\i\xa<\qr at size\relax
+            \xa\g at addto@macro\xa\lasttwo at thisrow\xa{\newbit}%
+            %Compute \iplusone
+            \qr at a=\i\relax%
+            \advance\qr at a by 1%
+            \edef\iplusone{\the\qr at a}%
+            %
+            \edef\nextrowbit{\qr at matrixentry{#1}{\iplusone}{\the\j}}%
+            \xa\g at addto@macro\xa\lasttwo at nextrow\xa{\nextrowbit}%
+            \ifnum\j<2\relax%
+              %Still in the first column; no check.
+            \else
+              %Second column or later.  Remove the old bits, and then test.
+              \removefirsttoken\lasttwo at thisrow
+              \removefirsttoken\lasttwo at nextrow
+              \ifx\lasttwo at thisrow\@twoones
+                \ifx\lasttwo at nextrow\@twoones
+                  \addtocounter{penaltyii}{\qr at Nii}%
+                \fi
+              \else
+                \ifx\lasttwo at thisrow\@twozeros
+                  \ifx\lasttwo at nextrow\@twozeros
+                    \addtocounter{penaltyii}{\qr at Nii}%
+                  \fi
+                \fi
+              \fi
+            \fi
+          \fi
+          %
+          % LASTNINE CODE FOR PENALTY 3
+          % First, add the new bit to the end.
+          \xa\g at addto@macro\xa\lastnine\xa{\newbit}%
+          \ifnum\j<7\relax%
+            %Not yet on the 7th entry.
+            %Don't do any testing.
+          \else
+            % 7th entry or later.
+            % Remove the old one, and then test.
+            \removefirsttoken\lastnine
+            \xa\ifnum\qr at size=\j\relax%
+              % Last column.  Any of the following should count:
+              %     1011101 (\@finderB at zero)
+              %    10111010 (\@finderB at one)
+              %   101110100 (\@finderB at two)
+              %  1011101000 (\@finderB at three)
+              % 10111010000 (\@finderB)
+              \ifx\lastnine\@finderB
+                \addpenaltyiii
+              \else
+                \removefirsttoken\lastnine
+                \ifx\lastnine\@finderB at three
+                  \addpenaltyiii
+                \else
+                  \removefirsttoken\lastnine
+                  \ifx\lastnine\@finderB at two
+                    \addpenaltyiii
+                  \else
+                    \removefirsttoken\lastnine
+                    \ifx\lastnine\@finderB at one
+                      \addpenaltyiii
+                    \else
+                      \removefirsttoken\lastnine
+                      \ifx\lastnine\@finderB at zero
+                        \addpenaltyiii
+                      \fi
+                    \fi
+                  \fi
+                \fi
+              \fi
+            \else
+              \ifx\lastnine\@finderA% %Matches 0000 1011101
+                \addpenaltyiii
+                %Also, we record our discovery, so that we can't count this pattern again
+                %if it shows up four columns later as 1011101 0000.
+                %
+                %Set \ignore at finderB@at to \j+4.
+                \qr at a=\j\relax%
+                \advance\qr at a by 4%
+                \xdef\ignore at finderB@at{\the\qr at a}%
+              \else
+                \ifx\lastfive\@finderB% %Matches 1011101 0000.
+                  \xa\ifnum\ignore at finderB@at=\j\relax
+                    %This pattern was *not* counted already earlier.
+                    \addpenaltyiii
+                  \fi
+                \fi
+              \fi
+            \fi
+          \fi
+          %
+          %COUNT 1's FOR PENALTY 4
+          \xa\ifnum\newbit=1\relax%
+            \stepcounter{totalones}%
+          \fi
+         }% end of j-loop
+      }% end of i-loop
+    %
+    %NOW WE ALSO NEED TO RUN DOWN THE COLUMNS TO FINISH CALCULATING PENALTIES 1 AND 3.
+    \qr at for \j=1 to \qr at size by 1%
+      {\def\lastfive{z}% %The z is a dummy, that will be removed before any testing.
+       \stringoffivefalse
+       \def\lastnine{z0000}% %The 0000 stands for the white space to the left. The z is a dummy.
+       \def\ignore at finderB@at{0}%
+       \qr at for \i=1 to \qr at size by 1%
+         {\edef\newbit{\qr at matrixentry{#1}{\the\i}{\the\j}}%
+          %
+          % LASTFIVE CODE FOR PENALTY 1
+          % First, add the new bit to the end.
+          \xa\g at addto@macro\xa\lastfive\xa{\newbit}%
+          \ifnum\i<5\relax%
+            %Not yet on the 5th entry.
+            %Don't do any testing.
+          \else
+            % 5th entry or later.
+            % Remove the old one, and then test.
+            \removefirsttoken\lastfive%
+            \ifx\lastfive\@fiveones%
+              \ifstringoffive%
+                %This is a continuation of a previous block of five or more 1's.
+                \stepcounter{penaltyi}%
+              \else
+                %This is a new string of five 1's.
+                \addtocounter{penaltyi}{\qr at Ni}%
+                \global\stringoffivetrue
+              \fi
+            \else
+              \ifx\lastfive\@fivezeros%
+                \ifstringoffive
+                  %This is a continuation of a previous block of five or more 0's.
+                  \stepcounter{penaltyi}%
+                \else
+                  %This is a new string of five 0's.
+                  \addtocounter{penaltyi}{\qr at Ni}%
+                  \global\stringoffivetrue
+                \fi
+              \else
+                %This is not a string of five 1's or five 0's.
+                \global\stringoffivefalse
+              \fi
+            \fi
+          \fi
+          %
+          % HAPPILY, WE DON'T NEED TO CALCULATE PENALTY 2 AGAIN.
+          %
+          % LASTNINE CODE FOR PENALTY 3
+          % First, add the new bit to the end.
+          \xa\g at addto@macro\xa\lastnine\xa{\newbit}%
+          \ifnum\i<7\relax%
+            %Not yet on the 7th entry.
+            %Don't do any testing.
+          \else
+            % 7th entry or later.
+            % Remove the old one, and then test.
+            \removefirsttoken\lastnine
+            \xa\ifnum\qr at size=\i\relax%
+              % Last column.  Any of the following should count:
+              %     1011101 (\@finderB at zero)
+              %    10111010 (\@finderB at one)
+              %   101110100 (\@finderB at two)
+              %  1011101000 (\@finderB at three)
+              % 10111010000 (\@finderB)
+              \ifx\lastnine\@finderB
+                \addpenaltyiii
+              \else
+                \removefirsttoken\lastnine
+                \ifx\lastnine\@finderB at three
+                  \addpenaltyiii
+                \else
+                  \removefirsttoken\lastnine
+                  \ifx\lastnine\@finderB at two
+                    \addpenaltyiii
+                  \else
+                    \removefirsttoken\lastnine
+                    \ifx\lastnine\@finderB at one
+                      \addpenaltyiii
+                    \else
+                      \removefirsttoken\lastnine
+                      \ifx\lastnine\@finderB at zero
+                        \addpenaltyiii
+                      \fi
+                    \fi
+                  \fi
+                \fi
+              \fi
+            \else
+              \ifx\lastnine\@finderA% %Matches 0000 1011101
+                \addpenaltyiii
+                %Also, we record our discovery, so that we can't count this pattern again
+                %if it shows up four columns later as 1011101 0000.
+                %
+                %Set \ignore at finderB@at to \i+4.
+                \qr at a=\i\relax%
+                \advance\qr at a by 4%
+                \xdef\ignore at finderB@at{\the\qr at a}%
+              \else
+                \ifx\lastfive\@finderB% %Matches 1011101 0000.
+                  \xa\ifnum\ignore at finderB@at=\i\relax
+                    %This pattern was *not* counted already earlier.
+                    \addpenaltyiii
+                  \fi
+                \fi
+              \fi
+            \fi
+          \fi
+          %
+         }% end of i-loop
+      }% end of j-loop
+  \egroup%
+  %
+  %CALCULATE PENALTY 4
+  %According to the spec, penalty #4 is computed as
+  % floor( |(i/n^2)-0.5|/0.05 )
+  % where i is the total number of 1's in the matrix.
+  % This is equal to abs(20*i-10n^2) div n^2.
+  %
+  \qr at a=\totalones\relax
+  \multiply\qr at a by 20\relax
+  \qr at b=\qr at size\relax
+  \multiply\qr at b by \qr at size\relax
+  \qr at c=10\relax
+  \multiply\qr at c by \qr at b\relax
+  \advance\qr at a by -\qr at c\relax
+  \ifnum\qr at a<0\relax
+    \multiply\qr at a by -1\relax
+  \fi
+  \divide\qr at a by \qr at b\relax
+  \setcounter{penaltyiv}{\the\qr at a}%
+  %
+  %CALCULATE TOTAL PENALTY
+  \qr at a=\the\penaltyi\relax%
+  \advance\qr at a by \the\penaltyii\relax%
+  \advance\qr at a by \the\penaltyiii\relax%
+  \advance\qr at a by \the\penaltyiv\relax%
+  \edef\qr at penalty{\the\qr at a}%
+}%
+
+\def\removefirsttoken#1{%
+  %Removes the first token from the macro named in #1.
+  \edef\qr at argument{(#1)}%
+  \xa\removefirsttoken at int\qr at argument%
+  \xdef#1{\removefirsttoken at result}%
+}%
+\def\removefirsttoken at int(#1#2){%
+  \def\removefirsttoken at result{#2}%
+}%
+
+\def\qr at writeformatstring#1#2{%
+  % #1 = matrix name
+  % #2 = binary string representing the encoded and masked format information
+  \setcounter{qr at i}{9}%
+  \setcounter{qr at j}{1}%
+  \edef\qr at argument{{#1}(#2\relax)}%
+  \xa\qr at writeformatA@recursive\qr at argument
+  %
+  \setcounter{qr at i}{\qr at numberofrowsinmatrix{#1}}%
+  \setcounter{qr at j}{9}%
+  \xa\qr at writeformatB@recursive\qr at argument
+}%
+
+\def\qr at writeformatA@recursive#1(#2#3){%
+  % #1 = matrix name
+  % #2 = first bit of string
+  % #3 = rest of bitstream
+  % (qr at i,qr at j) = current (valid) position to write (in LaTeX counters)
+  \def\formattowrite{#3}%
+  \ifnum#2=1\relax
+    \qr at storetomatrix{#1}{\theqr at i}{\theqr at j}{\qr at black@format}%
+  \else
+    \qr at storetomatrix{#1}{\theqr at i}{\theqr at j}{\qr at white@format}%
+  \fi
+  % Now the tricky part--moving \i and \j to their next positions.
+  \ifnum\qr at j<9\relax
+    %If we're not yet in column 9, move right.
+    \stepcounter{qr at j}%
+    \ifnum\qr at j=7\relax
+      %But we skip column 7!
+      \stepcounter{qr at j}%
+    \fi
+  \else
+    %If we're in column 9, we move up.
+    \addtocounter{qr at i}{-1}%
+    \ifnum\qr at i=7\relax
+      %But we skip row 7!
+      \addtocounter{qr at i}{-1}%
+    \fi
+  \fi
+  %N.B. that at the end of time, this will leave us at invalid position (0,9).
+  %That makes for an easy test to know when we are done.
+  \ifnum\qr at i<1
+    \let\nexttoken=\relax
+  \else
+    \def\nexttoken{\qr at writeformatA@recursive{#1}(#3)}%
+  \fi
+  \nexttoken
+}%
+
+\def\qr at writeformatB@recursive#1(#2#3){%
+  % #1 = matrix name
+  % #2 = first bit of string
+  % #3 = rest of bitstream
+  % (qr at i,qr at j) = current (valid) position to write (in LaTeX counters)
+  \def\formattowrite{#3}%
+  \ifnum#2=1\relax
+    \qr at storetomatrix{#1}{\theqr at i}{\theqr at j}{\qr at black@format}%
+  \else
+    \qr at storetomatrix{#1}{\theqr at i}{\theqr at j}{\qr at white@format}%
+  \fi
+  % Now the tricky part--moving counters i and j to their next positions.
+  \qr at a=\qr at size%
+  \advance\qr at a by -6\relax%
+  \ifnum\qr at a<\qr at i\relax
+    %If we're not yet in row n-6, move up.
+    \addtocounter{qr at i}{-1}%
+  \else
+    \ifnum\qr at a=\qr at i\relax
+      %If we're actually in row n-6, we jump to position (9,n-7).
+      \setcounter{qr at i}{9}%
+      %Set counter j equal to \qr at size-7.
+      \global\qr at j=\qr at size\relax%
+      \global\advance\qr at j by -7\relax%
+    \else
+      %Otherwise, we must be in row 9.
+      %In this case, we move right.
+      \stepcounter{qr at j}%
+    \fi
+  \fi
+  %N.B. that at the end of time, this will leave us at invalid position (9,n+1).
+  %That makes for an easy test to know when we are done.
+  \xa\ifnum\qr at size<\qr at j\relax
+    \let\nexttoken=\relax
+  \else
+    \def\nexttoken{\qr at writeformatB@recursive{#1}(#3)}%
+  \fi
+  \nexttoken
+}%
+
+\def\qr at writeversionstring#1#2{%
+  % #1 = matrix name
+  % #2 = binary string representing the encoded version information
+  %
+  % Plot the encoded version string into the matrix.
+  % This is only done for versions 7 and higher.
+  \xa\ifnum\qr at version>6\relax
+    %Move to position (n-8,6).
+    \setcounter{qr at i}{\qr at size}\relax%
+    \addtocounter{qr at i}{-8}\relax%
+    \setcounter{qr at j}{6}%
+    \edef\qr at argument{{#1}(#2\relax)}%
+    \xa\qr at writeversion@recursive\qr at argument
+  \fi
+}%
+
+\def\qr at writeversion@recursive#1(#2#3){%
+  % #1 = matrix name
+  % #2 = first bit of string
+  % #3 = rest of bitstream
+  % (qr at i,qr at j) = current (valid) position to write (in LaTeX counters)
+  %
+  % The version information is stored symmetrically in the matrix
+  % In two transposed regions, so we can write both at the same time.
+  % In the comments, we describe what happens in the lower-left region,
+  % not the upper-right.
+  %
+  \def\versiontowrite{#3}%
+  %
+  %Set \topline equal to n-10.
+  \qr at a=\qr at size\relax%
+  \advance\qr at a by -10\relax%
+  \edef\topline{\the\qr at a}%
+  %
+  \ifnum#2=1\relax
+    \qr at storetomatrix{#1}{\theqr at i}{\theqr at j}{\qr at black@format}%
+    \qr at storetomatrix{#1}{\theqr at j}{\theqr at i}{\qr at black@format}%
+  \else
+    \qr at storetomatrix{#1}{\theqr at i}{\theqr at j}{\qr at white@format}%
+    \qr at storetomatrix{#1}{\theqr at j}{\theqr at i}{\qr at white@format}%
+  \fi
+  % Now the tricky part--moving counters i and j to their next positions.
+  \addtocounter{qr at i}{-1}%
+  \xa\ifnum\topline>\qr at i\relax
+    %We've overshot the top of the region.
+    %We need to move left one column and down three.
+    \addtocounter{qr at j}{-1}%
+    \addtocounter{qr at i}{3}%
+  \fi
+  %N.B. that at the end of time, this will leave us at invalid position (n-8,0).
+  %That makes for an easy test to know when we are done.
+  \ifnum\qr at j<1\relax
+    \let\nexttoken=\relax
+  \else
+    \def\nexttoken{\qr at writeversion@recursive{#1}(#3)}%
+  \fi
+  \nexttoken
+}%
+\newcount\qr at hexchars
+
+\def\qr at string@binarytohex#1{%
+  \qr at binarytohex{\qr at hex@result}{#1}%
+}%
+
+\def\qr at encode@binary#1{%
+  % #1 = string of ascii characters, to be converted into bitstream
+  %
+  % We do this one entirely in hex, rather than binary, because we can.
+  \edef\plaintext{#1}%
+  %
+  %First, the mode indicator.
+  \def\qr at codetext{4}% %This means `binary'
+  %
+  %Next, the character count.
+  \qr at getstringlength{\plaintext}%
+  %Set \charactercountlengthinhex to \qr at charactercountbits@byte/4%
+  \qr at a=\qr at charactercountbits@byte\relax%
+  \divide \qr at a by 4\relax%
+  \edef\charactercountlengthinhex{\the\qr at a}%
+  \qr at decimaltohex[\charactercountlengthinhex]{\charactercount}{\qr at stringlength}%
+  \xa\g at addto@macro\xa\qr at codetext\xa{\charactercount}%
+  %
+  %Now comes the actual data.
+  \edef\qr at argument{(,\plaintext\relax\relax\relax)}%
+  \xa\qr at encode@ascii at recursive\qr at argument%
+  %
+  %Now the terminator.
+  \g at addto@macro\qr at codetext{0}% %This is '0000' in binary.
+  %
+  %There is no need to pad bits to make a multiple of 8,
+  %because the data length is already 4 + 8 + 8n + 4.
+  %
+  %Now add padding codewords if needed.
+  \setcounter{qr at hexchars}{0}%
+  \qr at getstringlength{\qr at codetext}%
+  \setcounter{qr at hexchars}{\qr at stringlength}%
+  %Set \qr at numpaddingcodewords equal to \qr at totaldatacodewords - hexchars/2.
+  \qr at a=-\qr at hexchars\relax
+  \divide\qr at a by 2\relax
+  \advance\qr at a by \qr at totaldatacodewords\relax
+  \edef\qr at numpaddingcodewords{\the\qr at a}%
+  %
+  \xa\ifnum\qr at numpaddingcodewords<0%
+    \edef\ds{ERROR: Too much data!  Over by \qr at numpaddingcodewords bytes.}\show\ds%
+  \fi%
+  \xa\ifnum\qr at numpaddingcodewords>0%
+    \qr at for \i = 2 to \qr at numpaddingcodewords by 2%
+      {\g at addto@macro{\qr at codetext}{ec11}}%
+    \xa\ifodd\qr at numpaddingcodewords\relax%
+      \g at addto@macro{\qr at codetext}{ec}%
+    \fi%
+  \fi%
+}%
+
+\def\qr at encode@ascii at recursive(#1,#2#3){%
+  % #1 = hex codes translated so far
+  % #2 = next plaintext character to translate
+  % #3 = remainder of plaintext
+  \edef\testii{#2}%
+  \ifx\testii\@relax%
+    % All done!
+    \g at addto@macro\qr at codetext{#1}%
+  \else%
+    % Another character to translate.
+    \edef\asciicode{\number`#2}%
+    \qr at decimaltohex[2]{\newhexcodes}{\asciicode}%
+    \edef\qr at argument{(#1\newhexcodes,#3)}%
+    %\show\qr at argument
+    \xa\qr at encode@ascii at recursive\qr at argument%
+  \fi%
+}%
+
+\def\qr at splitcodetextintoblocks{%
+  \setcounter{qr at i}{0}%
+  \qr at for \j = 1 to \qr at numshortblocks by 1%
+    {\stepcounter{qr at i}%
+     \qr at splitoffblock{\qr at codetext}{\theqr at i}{\qr at shortblock@size}%
+    }%
+  \xa\ifnum\qr at numlongblocks>0\relax%
+    \qr at for \j = 1 to \qr at numlongblocks by 1%
+      {\stepcounter{qr at i}%
+       \qr at splitoffblock{\qr at codetext}{\theqr at i}{\qr at longblock@size}%
+      }%
+  \fi%
+}%
+
+\def\qr at splitoffblock#1#2#3{%
+  % #1 = current codetext in hexadecimal
+  % #2 = number to use in csname "\datablock@#2".
+  % #3 = number of bytes to split off
+  \qrmessage{<Splitting off block #2>}%
+  \xa\gdef\csname datablock@#2\endcsname{}% %This line is important!
+  \qr at for \i = 1 to #3 by 1%
+    {\edef\qr at argument{{#2}(#1)}%
+     \xa\qr at splitoffblock@int\qr at argument%
+    }%
+}%
+
+\def\qr at splitoffblock@int#1(#2#3#4){%
+  % #1 = number to use in csname "\datablock@#1".
+  % #2#3 = next byte to split off
+  % #4 = remaining text
+  %
+  % We add the next byte to "\datablock@#1",
+  % and we remove it from the codetext.
+  \xa\xdef\csname datablock@#1\endcsname{\csname datablock@#1\endcsname#2#3}%
+  \xdef\qr at codetext{#4}%
+}%
+
+\def\qr at createerrorblocks{%
+  \qr at for \ii = 1 to \qr at numblocks by 1%
+    {\qrmessage{<Making error block \the\ii>}%
+     \FX at generate@errorbytes{\csname datablock@\the\ii\endcsname}{\qr at num@eccodewords}%
+     \xa\xdef\csname errorblock@\the\ii\endcsname{\FX at errorbytes}%
+    }%
+}%
+
+\def\qr at interleave{%
+  \setcounter{qr at i}{0}%
+  \def\qr at interleaved@text{}%
+  \qrmessage{<Interleaving datablocks of length \qr at shortblock@size\space and \qr at longblock@size: }%
+  \qr at for \ii = 1 to \qr at shortblock@size by 1%
+    {\qr at for \jj = 1 to \qr at numblocks by 1%
+      {\qr at writefromblock{datablock}{\the\jj}%
+      }%
+     \qrmessage{\the\ii,}%
+    }%
+  %The long blocks are numbered \qr at numshortblocks+1, \qr at numshortblocks+2, ..., \qr at numblocks.
+  \qr at a=\qr at numshortblocks\relax%
+  \advance\qr at a by 1\relax%
+  \qr at for \jj = \qr at a to \qr at numblocks by 1%
+      {\qr at writefromblock{datablock}{\the\jj}}%
+  \xa\ifnum\qr at numlongblocks>0\relax%
+    \qrmessage{\qr at longblock@size.>}%
+  \else
+    \qrmessage{.>}%
+  \fi
+  \qrmessage{<Interleaving errorblocks of length \qr at num@eccodewords: }%
+  \qr at for \ii = 1 to \qr at num@eccodewords by 1%
+    {\qrmessage{\the\ii,}%
+     \qr at for \jj = 1 to \qr at numblocks by 1%
+      {\qr at writefromblock{errorblock}{\the\jj}%
+      }%
+    }%
+  \qrmessage{.><Interleaving complete.>}%
+}%
+
+\def\qr at writefromblock#1#2{%
+  % #1 = either 'datablock' or 'errorblock'
+  % #2 = block number, in {1,...,\qr at numblocks}%
+  \edef\qr at argument{(\csname #1@#2\endcsname\relax\relax\relax)}%
+  \xa\qr at writefromblock@int\qr at argument
+  \xa\xdef\csname #1@#2\endcsname{\qr at writefromblock@remainder}%
+}%
+
+\def\qr at writefromblock@int(#1#2#3){%
+  % #1#2 = first byte (in hex) of text, which will be written to \qr at interleaved@text
+  % #3 = remainder, including \relax\relax\relax terminator.
+  \g at addto@macro{\qr at interleaved@text}{#1#2}%
+  \qr at writefromblock@intint(#3)%
+}%
+
+\def\qr at writefromblock@intint(#1\relax\relax\relax){%
+  \xdef\qr at writefromblock@remainder{#1}%
+}%
+\let\xa=\expandafter
+
+\def\preface at macro#1#2{%
+  % #1 = macro name
+  % #2 = text to add to front of macro
+  \def\tempb{#2}%
+  \xa\xa\xa\gdef\xa\xa\xa#1\xa\xa\xa{\xa\tempb #1}%
+}%
+
+\newif\ifqr at leadingcoeff
+\def\qr at testleadingcoeff(#1#2){%
+  % Tests whether the leading digit of #1#2 is 1.
+  \ifnum#1=1\relax
+    \qr at leadingcoefftrue
+  \else
+    \qr at leadingcoefffalse
+  \fi
+}%
+
+\def\qr at polynomialdivide#1#2{%
+  \edef\qr at numerator{#1}%
+  \edef\qr at denominator{#2}%
+  \qr at divisiondonefalse%
+  \xa\xa\xa\qr at oneroundofdivision\xa\xa\xa{\xa\qr at numerator\xa}\xa{\qr at denominator}%
+}%
+
+\def\@qr at empty{}%
+\def\qr at oneroundofdivision#1#2{%
+  % #1 = f(x), of degree n
+  % #2 = g(x), of degree m
+  % Obtains a new polynomial h(x), congruent to f(x) modulo g(x),
+  % but of degree at most n-1.
+  %
+  % If leading coefficient of f(x) is 1, subtracts off g(x) * x^(n-m).
+  % If leading coefficient of f(x) is 0, strips off that leading zero.
+  %
+  \qr at testleadingcoeff(#1)%
+  \ifqr at leadingcoeff
+    \qr at xorbitstrings{#1}{#2}%
+    \ifqr at xorfailed
+      %If xor failed, that means our #1 was already the remainder!
+      \qr at divisiondonetrue
+      \edef\theremainder{#1}%
+    \else
+      %xor succeeded. We need to recurse.
+      \xa\xa\xa\edef\xa\xa\xa\qr at numerator\xa\xa\xa{\xa\qr at stripleadingzero\xa(\xorresult)}%
+    \fi
+  \else
+    \xa\def\xa\qr at numerator\xa{\qr at stripleadingzero(#1)}%
+    \ifx\qr at numerator\@qr at empty
+      \qr at divisiondonetrue
+      \def\theremainder{0}%
+    \fi
+  \fi
+  \ifqr at divisiondone
+    \relax
+  \else
+    \xa\qr at oneroundofdivision\xa{\qr at numerator}{#2}%
+  \fi
+}%
+
+\def\qr at stripleadingzero(0#1){#1}%Strips off a leading zero.
+
+\newif\ifqr at xorfailed% This flag will trigger when #2 is longer than #1.
+
+\def\qr at xorbitstrings#1#2{%
+ % #1 = bitstring
+ % #2 = bitstring no longer than #1
+ \qr at xorfailedfalse
+ \edef\qr at argument{(,#1\relax\relax)(#2\relax\relax)}%
+ \xa\qr at xorbitstrings@recursive\qr at argument
+ %\qr at xorbitstrings@recursive(,#1\relax\relax)(#2\relax\relax)%
+}%
+
+\def\qr at xorbitstrings@recursive(#1,#2#3)(#4#5){%
+ % #1#2#3 is the first bitstring, xor'ed up through #1.
+ % #4#5 is the remaining portion of the second bitstring.
+ \def\testii{#2}%
+ \def\testiv{#4}%
+ \ifx\testii\@relax
+   % #1 contains the whole string.
+   % Now if #4 is also \relax, that means the two strings started off with equal lengths.
+   % If, however, #4 is not \relax, that means the second string was longer than the first, a problem.
+   \ifx\testiv\@relax
+     %No problem.  We are done.
+     \qr at xorbit@saveresult(#1#2#3)%
+   \else
+     %Problem!  The second string was longer than the first.
+     \qr at xorfailedtrue
+     \def\xorresult{}%
+   \fi
+ \else
+   % There is still a bit to manipulate in #2.
+   % Check whether #4 contains anything.
+   \ifx\testiv\@relax
+     % No, #4 is empty.  We are done. "#2#3" contains the remainder of the first string,
+     % which we append untouched and then strip off the two \relax-es.
+     \qr at xorbit@saveresult(#1#2#3)%
+   \else
+     % Yes, #4 still has something to XOR. Do the task.
+     \ifnum#2=#4\relax
+       \qr at xorbitstrings@recursive(#1%
+                                 0,#3)(#5)%
+     \else
+       \qr at xorbitstrings@recursive(#1%
+                                 1,#3)(#5)%
+     \fi
+   \fi
+ \fi
+}%
+
+\def\qr at xorbit@saveresult(#1\relax\relax){%
+  %Strips off the extra '\relax'es at the end.
+  \def\xorresult{#1}%
+}%
+
+\newif\ifqr at divisiondone
+\def\dodivision#1#2{%
+  \qr at divisiondonefalse
+  \dodivision at recursive{#1}{#2}%
+}%
+
+\def\BCHcode#1{%
+  \edef\formatinfo{#1}%
+  \def\formatinfopadded{\formatinfo 0000000000}%
+  \def\qr at divisor{10100110111}%
+  \qr at divisiondonefalse
+  \qr at polynomialdivide{\formatinfopadded}{\qr at divisor}%
+  %
+  \qr at getstringlength{\theremainder}%
+  %Run loop from stringlength+1 to 10.
+  \qr at a=\qr at stringlength\relax%
+  \advance\qr at a by 1\relax%
+  \qr at for \i = \qr at a to 10 by 1%
+    {\preface at macro{\theremainder}{0}%
+     \xdef\theremainder{\theremainder}%
+    }%
+  \edef\BCHresult{\formatinfo\theremainder}%
+}%
+
+\def\qr at formatmask{101010000010010}%
+
+\def\qr at encodeandmaskformat#1{%
+  \BCHcode{#1}%
+  \qr at xorbitstrings{\BCHresult}{\qr at formatmask}%
+  \edef\qr at format@bitstring{\xorresult}%
+}%
+
+\def\qr at Golaycode#1{%
+  % #1 = 6-bit version number
+  \edef\qr at versioninfo{#1}%
+  \def\qr at versioninfopadded{\qr at versioninfo 000000000000}% %Append 12 zeros.
+  \def\qr at divisor{1111100100101}%
+  \qr at divisiondonefalse
+  \qr at polynomialdivide{\qr at versioninfopadded}{\qr at divisor}%
+  %
+  \qr at getstringlength{\theremainder}%
+  %Run loop from stringlength+1 to 12.
+  \qr at a=\qr at stringlength\relax%
+  \advance\qr at a by 1\relax%
+  \qr at for \i = \qr at a to 12 by 1%
+    {\preface at macro{\theremainder}{0}%
+     \xdef\theremainder{\theremainder}%
+    }%
+  \edef\Golayresult{\qr at versioninfo\theremainder}%
+}%
+\def\F at result{}%
+
+\def\qr at xorbitstring#1#2#3{%
+  % #1 = new macro to receive result
+  % #2, #3 = bitstrings to xor.  The second can be shorter than the first.
+  \def\qr at xor@result{}%
+  \edef\qr at argument{(#2\relax\relax)(#3\relax\relax)}%
+  \xa\qr at xorbitstring@recursive\qr at argument%
+  \edef#1{\qr at xor@result}%
+}%
+\def\qr at xorbitstring@recursive(#1#2)(#3#4){%
+  \edef\testi{#1}%
+  \ifx\testi\@relax%
+    %Done.
+    \let\qr at next=\relax%
+  \else
+    \if#1#3\relax
+      \g at addto@macro{\qr at xor@result}{0}%
+    \else
+      \g at addto@macro{\qr at xor@result}{1}%
+    \fi
+    \edef\qr at next{\noexpand\qr at xorbitstring@recursive(#2)(#4)}%
+  \fi
+  \qr at next
+}
+
+\def\F at addchar@raw#1#2{%
+  %Add two hexadecimal digits using bitwise xor
+  \qr at hextobinary[4]{\summandA}{#1}%
+  \qr at hextobinary[4]{\summandB}{#2}%
+  \qr at xorbitstring{\F at result}{\summandA}{\summandB}%
+  \qr at binarytohex[1]{\F at result}{\F at result}%
+}%
+
+\def\canceltwos#1{%
+  \edef\qr at argument{(#1\relax\relax)}%
+  \xa\canceltwos at int\qr at argument%
+}%
+
+\def\canceltwos at int(#1#2){%
+  \xa\canceltwos at recursion(,#1#2)%
+}%
+
+\def\canceltwos at recursion(#1,#2#3){%
+  \def\testii{#2}%
+  \ifx\testii\@relax
+    %Cancelling complete.
+    \striptworelaxes(#1#2#3)%
+    %Now \F at result contains the answer.
+  \else
+    \relax
+    \ifnum#2=2\relax
+      \canceltwos at recursion(#10,#3)%
+    \else
+      \canceltwos at recursion(#1#2,#3)%
+    \fi
+  \fi
+}%
+
+\def\striptworelaxes(#1\relax\relax){%
+  \gdef\F at result{#1}%
+}%
+
+\qr at for \i = 0 to 15 by 1%
+  {\qr at decimaltohex[1]{\qr at tempa}{\the\i}%
+   \qr at for \j = 0 to 15 by 1%
+    {\qr at decimaltohex[1]{\qr at tempb}{\the\j}%
+     \F at addchar@raw\qr at tempa\qr at tempb
+     \xa\xdef\csname F at addchar@\qr at tempa\qr at tempb\endcsname{\F at result}%
+    }%
+  }%
+
+\def\F at addchar#1#2{%
+  \xa\def\xa\F at result\xa{\csname F at addchar@#1#2\endcsname}%
+}%
+
+\def\F at addstrings#1#2{%
+  \edef\qr at argument{(,#1\relax\relax)(#2\relax\relax)}%
+  \xa\F at addstrings@recursion\qr at argument%
+}%
+
+\def\F at addstrings@recursion(#1,#2#3)(#4#5){%
+  %Adds two hexadecimal strings, bitwise, from left to right.
+  %The second string is allowed to be shorter than the first.
+  \def\testii{#2}%
+  \def\testiv{#4}%
+  \ifx\testii\@relax
+    %The entire string has been processed.
+    \gdef\F at result{#1}%
+  \else
+    \ifx\testiv\@relax
+      %The second string is over.
+      \striptworelaxes(#1#2#3)%
+      %Now \F at result contains the answer.
+    \else
+      %We continue to add.
+      \F at addchar{#2}{#4}%
+      \edef\qr at argument{(#1\F at result,#3)(#5)}%
+      \xa\F at addstrings@recursion\qr at argument%
+    \fi
+  \fi
+}%
+\gdef\F at stripleadingzero(0#1){\edef\F at result{#1}}%
+
+\qr at i=0%
+\def\poweroftwo{1}%
+\qr at for \i = 1 to 254 by 1%
+  {\global\advance\qr at i by1%
+   \qr at a=\poweroftwo\relax
+   \multiply\qr at a by 2\relax
+   \edef\poweroftwo{\the\qr at a}%
+   %\show\poweroftwo
+   \qr at decimaltohex[2]{\poweroftwo at hex}{\poweroftwo}%
+   \xa\ifnum\poweroftwo>255\relax
+     %We need to bitwise add the polynomial represented by 100011101, i.e. 0x11d.
+     \F at addstrings{\poweroftwo at hex}{11d}%               %Now it should start with 0.
+     \xa\F at stripleadingzero\xa(\F at result)%              %Now it should be two hex digits.
+     \edef\poweroftwo at hex{\F at result}%                   %Save the hex version.
+     \qr at hextodecimal{\poweroftwo}{\F at result}%
+   \fi
+   \xdef\poweroftwo{\poweroftwo}%
+   \xa\xdef\csname F at twotothe@\theqr at i\endcsname{\poweroftwo at hex}%
+   \xa\xdef\csname F at logtwo@\poweroftwo at hex\endcsname{\theqr at i}%
+  }%
+\xa\xdef\csname F at twotothe@0\endcsname{01}%
+\xa\xdef\csname F at logtwo@01\endcsname{0}%
+
+\def\F at twotothe#1{%
+  \xa\xdef\xa\F at result\xa{\csname F at twotothe@#1\endcsname}%
+}%
+\def\F at logtwo#1{%
+  \xa\xdef\xa\F at result\xa{\csname F at logtwo@#1\endcsname}%
+}%
+
+\def\@zerozero{00}%
+
+\def\F at multiply#1#2{%
+  % #1 and #2 are two elements of F_256,
+  % given as two-character hexadecimal strings.
+  % Multiply them within F_256, and place the answer in \F at result
+  \edef\argA{#1}%
+  \edef\argB{#2}%
+  \ifx\argA\@zerozero
+    \def\F at result{00}%
+  \else
+    \ifx\argB\@zerozero
+      \def\F at result{00}%
+    \else
+      \xa\F at logtwo\xa{\argA}%
+        \edef\logA{\F at result}%
+      \xa\F at logtwo\xa{\argB}%
+        \edef\logB{\F at result}%
+      \xa\qr at a\xa=\logA\relax%  \qr at a = \logA
+      \xa\advance\xa\qr at a\logB\relax% \advance \qr at a by \logB
+      \ifnum\qr at a>254\relax%
+        \advance\qr at a by -255\relax%
+      \fi%
+      \xa\F at twotothe\xa{\the\qr at a}%
+      % Now \F at result contains the product, as desired.
+    \fi
+  \fi
+}%
+
+\def\F at multiply#1#2{%
+  % #1 and #2 are two elements of F_256,
+  % given as two-character hexadecimal strings.
+  % Multiply them within F_256, and place the answer in \F at result
+  \edef\argA{#1}%
+  \edef\argB{#2}%
+  \ifx\argA\@zerozero
+    \def\F at result{00}%
+  \else
+    \ifx\argB\@zerozero
+      \def\F at result{00}%
+    \else
+      \xa\F at logtwo\xa{\argA}%
+        \edef\logA{\F at result}%
+      \xa\F at logtwo\xa{\argB}%
+        \edef\logB{\F at result}%
+      \xa\qr at a\xa=\logA\relax%  \qr at a = \logA
+      \xa\advance\xa\qr at a\logB\relax% \advance \qr at a by \logB
+      \ifnum\qr at a>254\relax%
+        \advance\qr at a by -255\relax%
+      \fi%
+      \xa\F at twotothe\xa{\the\qr at a}%
+      % Now \F at result contains the product, as desired.
+    \fi
+  \fi
+}%
+
+\def\FX at getstringlength#1{%
+  %Count number of two-character coefficients
+  \setcounter{qr at i}{0}%
+  \xdef\qr at argument{(#1\relax\relax\relax)}%
+  \xa\FX at stringlength@recursive\qr at argument%
+  \xdef\stringresult{\arabic{qr at i}}%
+}%
+
+\def\FX at stringlength@recursive(#1#2#3){%
+  \def\testi{#1}%
+  \ifx\testi\@relax
+    %we are done.
+  \else
+    \stepcounter{qr at i}%
+    %\showthe\c at qr@i
+    \qr at stringlength@recursive(#3)%
+  \fi
+}%
+
+\newif\ifFX at leadingcoeff@zero
+\def\FX at testleadingcoeff(#1#2#3){%
+  % Tests whether the leading coefficient of the hex-string #1#2#3 is '00'.
+  \edef\FX at leadingcoefficient{#1#2}%
+  \FX at leadingcoeff@zerofalse
+  \ifx\FX at leadingcoefficient\@zerozero
+    \FX at leadingcoeff@zerotrue
+  \fi
+}%
+
+\newif\ifFX at divisiondone
+
+\newcount\qr at divisionsremaining %Keep track of how many divisions to go!
+\def\FX at polynomialdivide#1#2{%
+  \edef\FX at numerator{#1}%
+  \edef\denominator{#2}%
+  \qr at getstringlength\FX at numerator%
+  \setcounter{qr at divisionsremaining}{\qr at stringlength}%
+  \qr at getstringlength\denominator%
+  \addtocounter{qr at divisionsremaining}{-\qr at stringlength}%
+  \addtocounter{qr at divisionsremaining}{2}%
+  \divide\qr at divisionsremaining by 2\relax% %2 hex chars per number
+  \FX at divisiondonefalse%
+  \xa\xa\xa\FX at polynomialdivide@recursive\xa\xa\xa{\xa\FX at numerator\xa}\xa{\denominator}%
+}%
+
+\def\FX at polynomialdivide@recursive#1#2{%
+  % #1 = f(x), of degree n
+  % #2 = g(x), of degree m
+  % Obtains a new polynomial h(x), congruent to f(x) modulo g(x),
+  % but of degree at most n-1.
+  %
+  % If leading coefficient of f(x) is 0, strips off that leading zero.
+  % If leading coefficient of f(x) is a, subtracts off a * g(x) * x^(n-m).
+  % N.B. we assume g is monic.
+  %
+  \FX at testleadingcoeff(#1)%
+  \ifFX at leadingcoeff@zero%
+    %Leading coefficient is zero, so remove it.
+    \xa\def\xa\FX at numerator\xa{\FX at stripleadingzero(#1)}%
+  \else%
+    %Leading coefficient is nonzero, and contained in \FX at leadingcoefficient
+    \FX at subtractphase{#1}{#2}{\FX at leadingcoefficient}%
+    \ifFX at subtract@failed%
+      %If subtraction failed, that means our #1 was already the remainder!
+      \FX at divisiondonetrue%
+      \edef\theremainder{#1}%
+    \else%
+      %xor succeeded. We need to recurse.
+      \xa\xa\xa\edef\xa\xa\xa\FX at numerator\xa\xa\xa{\xa\FX at stripleadingzero\xa(\FX at subtraction@result)}%
+    \fi%
+  \fi%
+  \addtocounter{qr at divisionsremaining}{-1}%
+  \ifnum\qr at divisionsremaining=0\relax
+    %Division is done!
+    \FX at divisiondonetrue%
+    \edef\theremainder{\FX at numerator}%
+    \relax%
+  \else%
+    \xa\FX at polynomialdivide@recursive\xa{\FX at numerator}{#2}%
+  \fi%
+}%
+
+\def\FX at stripleadingzero(00#1){#1}%Strips off a single leading zero of F_256.
+
+\newif\ifFX at subtract@failed% This flag will trigger when #2 is longer than #1.
+
+\def\FX at subtractphase#1#2#3{%
+ % #1 = bitstring
+ % #2 = bitstring no longer than #1
+ % #3 = leading coefficient
+ \FX at subtract@failedfalse%
+ \edef\qr at argument{(,#1\relax\relax\relax)(#2\relax\relax\relax)(#3)}%
+ \xa\FX at subtract@recursive\qr at argument%
+}%
+
+\def\FX at subtract@recursive(#1,#2#3#4)(#5#6#7)(#8){%
+ % This is a recursive way to compute f(x) - a*g(x)*x^k.
+ % #1#2#3#4 is the first bitstring, subtracted up through #1.
+ %          Thus #2#3 constitutes the next two-character coefficient.
+ % #5#6#7 is the remaining portion of the second bitstring.
+ %          Thus #5#6 constitutes the next two-character coefficient
+ % #8 is the element a of F_256.  It should contain two characters.
+ \def\testii{#2}%
+ \def\testv{#5}%
+ \ifx\testii\@relax
+   % #1 contains the whole string.
+   % Now if #5 is also \relax, that means the two strings started off with equal lengths.
+   % If, however, #5 is not \relax, that means the second string was longer than the first, a problem.
+   \ifx\testv\@relax
+     %No problem.  We are done.
+     \FX at subtract@saveresult(#1#2#3#4)% %We keep the #2#3#4 to be sure we have all three relax-es to strip off.
+   \else
+     %Problem!  The second string was longer than the first.
+     %This usually indicates the end of the long division process.
+     \FX at subtract@failedtrue
+     \def\FX at subtraction@result{}%
+   \fi
+ \else
+   % There is still a coefficient to manipulate in #2#3.
+   % Check whether #5 contains anything.
+   \ifx\testv\@relax
+     % No, #5 is empty.  We are done. "#2#3#4" contains the remainder of the first string,
+     % which we append untouched and then strip off the three \relax-es.
+     \FX at subtract@saveresult(#1#2#3#4)%
+   \else
+     % Yes, #5#6 still has something to XOR. Do the task.
+     \F at multiply{#5#6}{#8}% Multiply by the factor 'a'.
+     \F at addstrings{#2#3}{\F at result}% Subtract.  (We're in characteristic two, so adding works.)
+     \edef\qr at argument{(#1\F at result,#4)(#7)(#8)}%
+     \xa\FX at subtract@recursive\qr at argument%
+   \fi
+ \fi
+}%
+
+\def\FX at subtract@saveresult(#1\relax\relax\relax){%
+  %Strips off the three extra '\relax'es at the end.
+  \def\FX at subtraction@result{#1}%
+}%
+
+\def\FX at creategeneratorpolynomial#1{%
+  % #1 = n, the number of error codewords desired.
+  % We need to create \prod_{j=0}^{n-1} (x-2^j).
+  \edef\FX at generator@degree{#1}%
+  \def\FX at generatorpolynomial{01}% Initially, set it equal to 1.
+  \setcounter{qr at i}{0}%
+  \FX at creategenerator@recursive%
+  %The result is now stored in \FX at generatorpolynomial
+}%
+
+\def\FX at creategenerator@recursive{%
+  % \c at qr@i contains the current value of i.
+  % \FX at generatorpolynomial contains the current polynomial f(x),
+  %   which should be a degree-i polynomial
+  %   equal to \prod_{j=0}^{i-1} (x-2^j).
+  %   (If i=0, then \FX at generatorpolynomial should be 01.)
+  % This recursion step should multiply the existing polynomial by (x-2^i),
+  % increment i by 1, and check whether we're done or not.
+  \edef\summandA{\FX at generatorpolynomial 00}% This is f(x) * x
+  \edef\summandB{00\FX at generatorpolynomial}% This is f(x), with a 0x^{i+1} in front.
+  \F at twotothe{\theqr at i}%
+  \edef\theconstant{\F at result}%
+  \FX at subtractphase{\summandA}{\summandB}{\theconstant}%
+     %This calculates \summandA + \theconstant * \summandB
+     %and stores the result in \FX at subtraction@result
+  \edef\FX at generatorpolynomial{\FX at subtraction@result}%
+  \stepcounter{qr at i}%
+  \xa\ifnum\FX at generator@degree=\qr at i\relax%
+    %We just multiplied by (x-2^{n-1}), so we're done.
+    \relax%
+  \else%
+    %We need to do this again!
+    \xa%
+    \FX at creategenerator@recursive%
+  \fi%
+}%
+
+\def\FX at generate@errorbytes#1#2{%
+  % #1 = datastream in hex
+  % #2 = number of error correction bytes requested
+  \edef\numerrorbytes{#2}%
+  \xa\FX at creategeneratorpolynomial\xa{\numerrorbytes}%
+  \edef\FX at numerator{#1}%
+  \qr at for \i = 1 to \numerrorbytes by 1%
+    {\g at addto@macro\FX at numerator{00}}% %One error byte means two hex codes.
+  \FX at polynomialdivide{\FX at numerator}{\FX at generatorpolynomial}%
+  \edef\FX at errorbytes{\theremainder}%
+}%
+\newif\ifqr at versionmodules
+
+\def\qr at level@char#1{%
+    \xa\ifcase#1
+      M\or L\or H\or Q\fi}%
+
+\newif\ifqr at versiongoodenough
+\def\qr at choose@best at version#1{%
+  % \qr at desiredversion = user-requested version
+  % \qr at desiredlevel = user-requested error-correction level
+  \edef\qr at plaintext{#1}%
+  \qr at getstringlength{\qr at plaintext}%
+  %
+  %Run double loop over levels and versions, looking for
+  %the smallest version that can contain our data,
+  %and then choosing the best error-correcting level at that version,
+  %subject to the level being at least as good as the user desires.
+  \global\qr at versiongoodenoughfalse%
+  \gdef\qr at bestversion{0}%
+  \gdef\qr at bestlevel{0}%
+  \ifnum\qr at desiredversion=0\relax
+    \qr at a=1\relax
+  \else
+    \qr at a=\qr at desiredversion\relax
+  \fi
+  \qr at for \i=\qr at a to 40 by 1
+    {\edef\qr at version{\the\i}%
+     \global\qr at versiongoodenoughfalse
+     \qr at for \j=0 to 3 by 1%
+      {%First, we map {0,1,2,3} to {1,0,4,3}, so that we loop through {M,L,H,Q}
+       %in order of increasing error-correction capabilities.
+       \qr at a = \j\relax
+       \divide \qr at a by 2\relax
+       \multiply \qr at a by 4\relax
+       \advance \qr at a by 1\relax
+       \advance \qr at a by -\j\relax
+       \edef\qr at level{\the\qr at a}%
+       \ifnum\qr at desiredlevel=\qr at a\relax
+         \global\qr at versiongoodenoughtrue
+       \fi
+       \ifqr at versiongoodenough
+         \qr at calculate@capacity{\qr at version}{\qr at level}%
+         \xa\xa\xa\ifnum\xa\qr at truecapacity\xa<\qr at stringlength\relax
+           %Too short
+           \relax
+         \else
+           %Long enough!
+           \xdef\qr at bestversion{\qr at version}%
+           \xdef\qr at bestlevel{\qr at level}%
+           \global\i=40%
+         \fi
+       \fi
+      }%
+     }%
+  \edef\qr at version{\qr at bestversion}%
+  \edef\qr at level{\qr at bestlevel}%
+  \xa\ifnum\qr at desiredversion>0\relax
+    \ifx\qr at bestversion\qr at desiredversion\relax
+      %No change from desired version.
+    \else
+      %Version was increased
+      \qrmessage{<Requested QR version '\qr at desiredversion' is too small for desired text.}%
+      \qrmessage{Version increased to '\qr at bestversion' to fit text.>^^J}%
+    \fi
+  \fi
+  \ifx\qr at bestlevel\qr at desiredlevel\relax
+    %No change in level.
+  \else
+    \qrmessage{<Error-correction level increased from \qr at level@char{\qr at desiredlevel}}%
+    \qrmessage{to \qr at level@char{\qr at bestlevel} at no cost.>^^J}%
+  \fi
+}%
+
+\def\qr at calculate@capacity#1#2{%
+  \edef\qr at version{#1}%
+  \edef\qr at level{#2}%
+  %Calculate \qr at size, the number of modules per side.
+  % The formula is 4\qr at version+17.
+  \qr at a=\qr at version\relax%
+  \multiply\qr at a by 4\relax%
+  \advance\qr at a by 17\relax%
+  \xdef\qr at size{\the\qr at a}%
+  %
+  % Calculate \qr at k, which governs the number of alignment patterns.
+  % The alignment patterns lie in a kxk square, except for 3 that are replaced by finding patterns.
+  % The formula is 2 + floor( \qr at version / 7 ), except that k=0 for version 1.
+  \xa\ifnum\qr at version=1\relax%
+    \def\qr at k{0}%
+  \else%
+    \qr at a=\qr at version\relax
+    \divide \qr at a by 7\relax
+    \advance\qr at a by 2\relax
+    \edef\qr at k{\the\qr at a}%
+  \fi%
+  %
+  %Calculate number of function pattern modules.
+  %This consists of the three 8x8 finder patterns, the two timing strips, and the (k^2-3) 5x5 alignment patterns.
+  %The formula is 160+2n+25(k^2-3)-10(k-2), unless k=0 in which case we just have 160+2n.
+  \qr at a=\qr at size\relax
+  \multiply\qr at a by 2\relax
+  \advance\qr at a by 160\relax
+  \xa\ifnum\qr at k=0\relax\else
+    %\qr at k is nonzero, hence at least 2, so we continue to add 25(k^2-3)-10(k-2).
+    \qr at b=\qr at k\relax
+    \multiply\qr at b by \qr at k\relax
+    \advance\qr at b by -3\relax
+    \multiply\qr at b by 25\relax
+    \advance\qr at a by \qr at b\relax
+    \qr at b=\qr at k\relax
+    \advance\qr at b by -2\relax
+    \multiply\qr at b by 10\relax
+    \advance\qr at a by -\qr at b\relax
+  \fi
+  \edef\qr at numfunctionpatternmodules{\the\qr at a}%
+  %
+  %Calculate the number of version modules, either 36 or 0.
+  \xa\ifnum\qr at version>6\relax
+    \qr at versionmodulestrue
+    \def\qr at numversionmodules{36}%
+  \else
+    \qr at versionmodulesfalse
+    \def\qr at numversionmodules{0}%
+  \fi
+  %
+  %Now calculate the codeword capacity and remainder bits.
+  %Take n^2 modules, subtract all those dedicated to finder patterns etc., format information, and version information,
+  %and what's left is the number of bits we can play with.
+  %The number of complete bytes is \qr at numdatacodewords;
+  %the leftover bits are \qr at numremainderbits.
+  \qr at a=\qr at size\relax
+  \multiply \qr at a by \qr at size\relax
+  \advance \qr at a by -\qr at numfunctionpatternmodules\relax
+  \advance \qr at a by -31\relax% % There are 31 format modules.
+  \advance \qr at a by -\qr at numversionmodules\relax
+  \qr at b=\qr at a\relax
+  \divide \qr at a by 8\relax
+  \edef\qr at numdatacodewords{\the\qr at a}%
+  \multiply\qr at a by 8\relax
+  \advance \qr at b by -\qr at a\relax
+  \edef\qr at numremainderbits{\the\qr at b}%
+  %
+  %The size of the character count indicator also varies by version.
+  %There are only two options, so hardcoding seems easier than expressing these functionally.
+  \xa\ifnum\qr at version<10\relax
+    \def\qr at charactercountbytes@byte{1}%
+    \def\qr at charactercountbits@byte{8}%
+  \else
+    \def\qr at charactercountbytes@byte{2}%
+    \def\qr at charactercountbits@byte{16}%
+  \fi
+  %
+  %Now we call on the table, from the QR specification,
+  %of how many blocks to divide the message into, and how many error bytes each block gets.
+  %This affects the true capacity for data, which we store into \qr at totaldatacodewords.
+  % The following macro sets \qr at numblocks and \qr at num@eccodewords
+  % based on Table 9 of the QR specification.
+  \qr at settableix
+  \qr at a = -\qr at numblocks\relax
+  \multiply \qr at a by \qr at num@eccodewords\relax
+  \advance\qr at a by \qr at numdatacodewords\relax
+  \edef\qr at totaldatacodewords{\the\qr at a}%
+  \advance\qr at a by -\qr at charactercountbytes@byte\relax%Subtract character count
+  \advance\qr at a by -1\relax% Subtract 1 byte for the 4-bit mode indicator and the 4-bit terminator at the end.
+  \edef\qr at truecapacity{\the\qr at a}%
+}
+
+\def\qr at setversion#1#2{%
+  % #1 = version number, an integer between 1 and 40 inclusive.
+  % #2 = error-correction level, as an integer between 0 and 3 inclusive.
+  %      0 = 00 = M
+  %      1 = 01 = L
+  %      2 = 10 = H
+  %      3 = 11 = Q
+  % This macro calculates and sets a variety of global macros and/or counters
+  % storing version information that is used later in construction the QR code.
+  % Thus \setversion should be called every time!
+  %
+  \edef\qr at version{#1}%
+  \edef\qr at level{#2}%
+  %
+  \qr at calculate@capacity{\qr at version}{\qr at level}%
+  %The capacity-check code sets the following:
+  % * \qr at size
+  % * \qr at k
+  % * \ifqr at versionmodules
+  % * \qr at numversionmodules
+  % * \qr at numdatacodewords
+  % * \qr at numremainderbits
+  % * \qr at charactercountbits@byte
+  % * \qr at charactercountbytes@byte
+  % * \qr at numblocks (via \qr at settableix)
+  % * \qr at num@eccodewords (via \qr at settableix)
+  % * \qr at totaldatacodewords
+  %
+  % The alignment patterns' square is 7 modules in from each edge.
+  % They are spaced "as evenly as possible" with an even number of modules between each row/column,
+  % unevenness in division being accommodated by making the first such gap smaller.
+  % The formula seems to be
+  %    general distance = 2*round((n-13)/(k-1)/2+0.25)
+  %                     = 2*floor((n-13)/(k-1)/2+0.75)
+  %                     = 2*floor( (2*(n-13)/(k-1)+3) / 4 )
+  %                     = (((2*(n-13)) div (k-1) + 3 ) div 4 ) * 2
+  %    first distance = leftovers
+  % The 0.25 is to accommodate version 32, which is the only time we round down.
+  % Otherwise a simple 2*ceiling((n-13)/(k-1)/2) would have sufficed.
+  %
+  \qr at a = \qr at size\relax
+  \advance\qr at a by -13\relax
+  \multiply\qr at a by 2\relax
+  \qr at b = \qr at k\relax
+  \advance \qr at b by -1\relax
+  \divide\qr at a by \qr at b\relax
+  \advance\qr at a by 3\relax
+  \divide\qr at a by 4\relax
+  \multiply\qr at a by 2\relax
+  \edef\qr at alignment@generalskip{\the\qr at a}%
+  %
+  %Now set \qr at alignment@firstskip to (\qr at size-13)-(\qr at k-2)*\qr at alignment@generalskip %
+  \qr at a = \qr at k\relax
+  \advance\qr at a by -2\relax
+  \multiply\qr at a by -\qr at alignment@generalskip\relax
+  \advance\qr at a by \qr at size\relax
+  \advance\qr at a by -13\relax
+  \edef\qr at alignment@firstskip{\the\qr at a}%
+  %
+  %
+  %
+  % Our \qr at totaldatacodewords bytes of data are broken up as evenly as possible
+  % into \qr at numblocks datablocks; some may be one byte longer than others.
+  % We set \qr at shortblock@size to floor(\qr at totaldatacodewords / \qr at numblocks)
+  % and \qr at numlongblocks to mod(\qr at totaldatacodewords , \qr at numblocks).
+  \qr at a=\qr at totaldatacodewords\relax
+  \divide\qr at a by \qr at numblocks\relax
+  \edef\qr at shortblock@size{\the\qr at a}%
+  \multiply\qr at a by -\qr at numblocks\relax
+  \advance\qr at a by \qr at totaldatacodewords\relax
+  \edef\qr at numlongblocks{\the\qr at a}%
+  %
+  %Set \qr at longblock@size to \qr at shortblock@size+1.
+  \qr at a=\qr at shortblock@size\relax
+  \advance\qr at a by 1\relax
+  \edef\qr at longblock@size{\the\qr at a}%
+  %
+  %Set \qr at numshortblocks to \qr at numblocks - \qr at numlongblocks
+  \qr at b=\qr at numblocks\relax
+  \advance\qr at b by -\qr at numlongblocks\relax
+  \edef\qr at numshortblocks{\the\qr at b}%
+}%
+
+\def\qr at settableix@int(#1,#2){%
+  \edef\qr at numblocks{#1}%
+  \edef\qr at num@eccodewords{#2}%
+}%
+
+\def\qr at settableix{%
+\xa\ifcase\qr at level\relax
+  %00: Level 'M', medium error correction
+  \edef\tempdata{(%
+    \ifcase\qr at version\relax
+      \relax %There is no version 0.
+    \or1,10%
+    \or1,16%
+    \or1,26%
+    \or2,18%
+    \or2,24%
+    \or4,16%
+    \or4,18%
+    \or4,22%
+    \or5,22%
+    \or5,26%
+    \or5,30%
+    \or8,22%
+    \or9,22%
+    \or9,24%
+    \or10,24%
+    \or10,28%
+    \or11,28%
+    \or13,26%
+    \or14,26%
+    \or16,26%
+    \or17,26%
+    \or17,28%
+    \or18,28%
+    \or20,28%
+    \or21,28%
+    \or23,28%
+    \or25,28%
+    \or26,28%
+    \or28,28%
+    \or29,28%
+    \or31,28%
+    \or33,28%
+    \or35,28%
+    \or37,28%
+    \or38,28%
+    \or40,28%
+    \or43,28%
+    \or45,28%
+    \or47,28%
+    \or49,28%
+  \fi)}%
+\or
+  %01: Level 'L', low error correction
+  \edef\tempdata{%
+  (\ifcase\qr at version\relax
+    \relax %There is no version 0.
+  \or 1,7%
+  \or 1,10%
+  \or 1,15%
+  \or 1,20%
+  \or 1,26%
+  \or 2,18%
+  \or 2,20%
+  \or 2,24%
+  \or 2,30%
+  \or 4,18%
+  \or 4,20%
+  \or 4,24%
+  \or 4,26%
+  \or 4,30%
+  \or 6,22%
+  \or 6,24%
+  \or 6,28%
+  \or 6,30%
+  \or 7,28%
+  \or 8,28%
+  \or 8,28%
+  \or 9,28%
+  \or 9,30%
+  \or 10,30%
+  \or 12,26%
+  \or 12,28%
+  \or 12,30%
+  \or 13,30%
+  \or 14,30%
+  \or 15,30%
+  \or 16,30%
+  \or 17,30%
+  \or 18,30%
+  \or 19,30%
+  \or 19,30%
+  \or 20,30%
+  \or 21,30%
+  \or 22,30%
+  \or 24,30%
+  \or 25,30%
+  \fi)}%
+\or
+  %10: Level 'H', high error correction
+  \edef\tempdata{(%
+    \ifcase\qr at version\relax
+      \relax %There is no version 0.
+    \or1,17%
+    \or1,28%
+    \or2,22%
+    \or4,16%
+    \or4,22%
+    \or4,28%
+    \or5,26%
+    \or6,26%
+    \or8,24%
+    \or8,28%
+    \or11,24%
+    \or11,28%
+    \or16,22%
+    \or16,24%
+    \or18,24%
+    \or16,30%
+    \or19,28%
+    \or21,28%
+    \or25,26%
+    \or25,28%
+    \or25,30%
+    \or34,24%
+    \or30,30%
+    \or32,30%
+    \or35,30%
+    \or37,30%
+    \or40,30%
+    \or42,30%
+    \or45,30%
+    \or48,30%
+    \or51,30%
+    \or54,30%
+    \or57,30%
+    \or60,30%
+    \or63,30%
+    \or66,30%
+    \or70,30%
+    \or74,30%
+    \or77,30%
+    \or81,30%
+  \fi)}%
+\or
+  %11: Level 'Q', quality error correction
+  \edef\tempdata{(%
+    \ifcase\qr at version\relax
+      \relax %There is no version 0.
+    \or1,13%
+    \or1,22%
+    \or2,18%
+    \or2,26%
+    \or4,18%
+    \or4,24%
+    \or6,18%
+    \or6,22%
+    \or8,20%
+    \or8,24%
+    \or8,28%
+    \or10,26%
+    \or12,24%
+    \or16,20%
+    \or12,30%
+    \or17,24%
+    \or16,28%
+    \or18,28%
+    \or21,26%
+    \or20,30%
+    \or23,28%
+    \or23,30%
+    \or25,30%
+    \or27,30%
+    \or29,30%
+    \or34,28%
+    \or34,30%
+    \or35,30%
+    \or38,30%
+    \or40,30%
+    \or43,30%
+    \or45,30%
+    \or48,30%
+    \or51,30%
+    \or53,30%
+    \or56,30%
+    \or59,30%
+    \or62,30%
+    \or65,30%
+    \or68,30%
+    \fi)}%
+\fi
+\xa\qr at settableix@int\tempdata
+}%
+
+\def\@qr at M{M}\def\@qr at z{0}%
+\def\@qr at L{L}\def\@qr at i{1}%
+\def\@qr at H{H}\def\@qr at ii{2}%
+\def\@qr at Q{Q}\def\@qr at iii{3}%
+\def\qr at setlevel#1{%
+  \edef\qr at level@selected{#1}%
+  \ifx\qr at level@selected\@qr at M
+    \edef\qr at desiredlevel{0}%
+  \fi
+  \ifx\qr at level@selected\@qr at L
+    \edef\qr at desiredlevel{1}%
+  \fi
+  \ifx\qr at level@selected\@qr at H
+    \edef\qr at desiredlevel{2}%
+  \fi
+  \ifx\qr at level@selected\@qr at Q
+    \edef\qr at desiredlevel{3}%
+  \fi
+  \ifx\qr at level@selected\@qr at z
+    \edef\qr at desiredlevel{0}%
+  \fi
+  \ifx\qr at level@selected\@qr at i
+    \edef\qr at desiredlevel{1}%
+  \fi
+  \ifx\qr at level@selected\@qr at ii
+    \edef\qr at desiredlevel{2}%
+  \fi
+  \ifx\qr at level@selected\@qr at iii
+    \edef\qr at desiredlevel{3}%
+  \fi
+}%
+
+% key-value pairs (OPmac trick 0069)
+\def\kv#1{\expandafter\ifx\csname kv:#1\endcsname \relax \expandafter\kvunknown
+   \else \csname kv:#1\expandafter\endcsname\fi 
+}
+\def\kvunknown{???}
+\def\kvscan #1#2=#3,{\ifx#1,\else \sdef{kv:#1#2}{#3}\expandafter\kvscan\fi}
+
+\ifx\replacestrings\undefined
+\bgroup \catcode`!=3 \catcode`?=3
+\gdef\replacestrings#1#2{\long\def\replacestringsA##1#1##2!{%
+   \ifx!##2!\addto\tmpb{##1}\else\addto\tmpb{##1#2}\replacestringsA##2!\fi}%
+   \edef\tmpb{\expandafter}\expandafter\replacestringsA\tmpb?#1!%
+   \long\def\replacestringsA##1?{\def\tmpb{##1}}\expandafter\replacestringsA\tmpb
+}
+\egroup
+\long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
+\def\sdef#1{\expandafter\def\csname#1\endcsname}
+\fi
+
+\def\qrset#1{\def\tmpb{#1,}%
+   \replacestrings{ =}{=}\replacestrings{= }{=}%
+   \replacestrings{tight,}{qr-border=0,}%
+   \replacestrings{padding,}{qr-border=1,}%
+   \replacestrings{verbose,}{qr-message=1,}%
+   \replacestrings{silent,}{qr-message=0,}%
+   \replacestrings{draft,}{qr-final=0,}%
+   \replacestrings{final,}{qr-final=1,}%
+   \replacestrings{nolink,}{qr-link=0,}%
+   \replacestrings{link,}{qr-link=1,}%
+   \expandafter\kvscan\tmpb,=,%
+   \qrdesiredheight=\kv{height}\relax
+   \qr at setlevel{\kv{level}}%
+   \edef\qr at desiredversion{\kv{version}}%
+}
+\qrset{height=2cm, version=0, level=M, tight, verbose, final, nolink}
+
+\def\qrcode{\begingroup
+   % LaTeX ballast:
+   \def\setcounter##1##2{\global\csname##1\endcsname=##2\relax}%
+   \def\stepcounter##1{\global\advance\csname##1\endcsname by1\relax}%
+   \def\addtocounter##1##2{\global\advance\csname##1\endcsname by##2\relax}%
+   \let\xa=\expandafter \newlinechar=`\^^J
+   \isnextchar[{\qrcodeA}{\qrcodeB}%
+}
+\def\qrcodeA[#1]{\qrset{#1}\expandafter\qrcodeB\romannumeral-`\.}
+\def\qrcodeB{%
+   \ifx\mubyteout\undefined \else \mubyteout=0 \mubytelog=0 \fi
+   \def\xprncodesave{}%
+   \ifx\xprncodes\undefined \else 
+      \ifnum\xprncode255=0 \def\xprncodesave{\xprncodes=0 }\xprncodes=1 \fi\fi
+   \if1\kv{qr-message}\let\qrmessage=\message \else \def\qrmessage##1{}\fi
+   \if1\kv{qr-border}\def\padd{\kern4\qrmodulesize}\else\def\padd{}\fi
+   \bgroup \qrverbatim \qrcode at i
+}
+\def\qrcode at i#1{\xdef\qretext{#1}\gdef\qrtext{#1}\egroup
+   \qrcode at int
+   \xprncodesave
+   \endgroup
+}
+
+\def\qrcode at int{%
+  \qrmessage{<QR code requested for "\qretext" in version
+           \qr at desiredversion-\qr at level@char{\qr at desiredlevel}.>^^J}%
+  %First, choose the version and level.
+  %Recall that \qr at choose@best at version sets \qr at version and \qr at level.
+  \xa\qr at choose@best at version\xa{\qretext}%
+  \if1\kv{qr-final}%
+     \qr at setversion{\qr at version}{\qr at level}%
+     \qrcode at int@new
+  \else
+     \qrmodulesize=\qrdesiredheight%
+     \divide\qrmodulesize by \qr at size\relax%
+     \let\d=\qrdesiredheight
+     \vbox{\padd\hbox{\padd\vbox to\d{\hrule\vss
+        \hbox to\d{\vrule height.7\d depth.3\d \hss ...QR...\hss\vrule}%
+        \vss\hrule}\padd}\padd}%
+  \fi
+}%
+
+\def\qrcode at int@new{%
+  \qrbeginhook
+  \qr at createsquareblankmatrix{newqr}{\qr at size}%
+  \qr at placefinderpatterns{newqr}%
+  \qr at placetimingpatterns{newqr}%
+  \qr at placealignmentpatterns{newqr}%
+  \qr at placedummyformatpatterns{newqr}%
+  \qr at placedummyversionpatterns{newqr}%
+  \qrmessage{<Calculating QR code for "\qretext" in
+            version \qr at version-\qr at level@char{\qr at level}.>^^J}%
+  \xa\qr at encode@binary\xa{\qretext}%
+  \qr at splitcodetextintoblocks
+  \qr at createerrorblocks
+  \qr at interleave
+  \qrmessage{<Writing data...}%
+     \qr at writedata@hex{newqr}{\qr at interleaved@text}%
+  \qrmessage{done.>^^J}%
+  \qr at writeremainderbits{newqr}%
+  \qr at chooseandapplybestmask{newqr}%
+  \qr at decimaltobinary[2]{\level at binary}{\qr at level}%
+  \qr at decimaltobinary[3]{\mask at binary}{\qr at mask@selected}%
+  \edef\formatstring{\level at binary\mask at binary}%
+  \qrmessage{<Encoding and writing format string...}%
+     \xa\qr at encodeandmaskformat\xa{\formatstring}%
+     \qr at writeformatstring{newqr}{\qr at format@bitstring}%
+  \qrmessage{done.>^^J}%
+  \qrmessage{<Encoding and writing version information...}%
+     \qr at decimaltobinary[6]{\version at binary}{\qr at version}%
+     \qr at Golaycode{\version at binary}%
+     \qr at writeversionstring{newqr}{\Golayresult}%
+  \qrmessage{done.>^^J}%
+  \qrmessage{<Printing QR code...}%
+     \qrmatrixtobinary{newqr}%
+     \qrrestore\qrdata
+  \qrmessage{done.>^^J}%
+  \qrendhook
+}%
+
+\def\qrmatrixtobinary#1{%
+   \bgroup
+   \gdef\qrdata{}%
+   \def\qr at black{1}\let\qr at black@fixed=\qr at black \let\qr at black@format=\qr at black
+   \def\@white{0}\let\qr at white@fixed=\@white \let\qr at white@format=\@white
+   \qr at for \i = 1 to \qr at size by 1
+      {\qr at for \j = 1 to \qr at size by 1
+          {\xdef\qrdata{\qrdata\qr at matrixentry{#1}{\the\i}{\the\j}}}}%
+   \xdef\qrdata{{\qr at size}{\qrdata}}%
+   \egroup
+}
+
+\def\qrrestore#1{\expandafter\qrrestoreA#1}
+\def\qrrestoreA#1#2{%
+   \qrmodulesize=\qrdesiredheight \divide\qrmodulesize by#1
+   \if1\kv{qr-link}\setbox0=\fi
+   \vbox\bgroup\padd \offinterlineskip \baselineskip=\qrmodulesize 
+      \qr at i=0 \qr at j=0 \let\next=\qrrestoreB 
+   \hbox\bgroup\padd \qrrestoreB #2%
+   \if1\kv{qr-link}\qr at link{\qretext}{\box0}\fi
+}
+\def\qrrestoreB#1{\advance \qr at j by1
+   \ifx1#1\vrule height\qrmodulesize width\qrmodulesize\else \kern\qrmodulesize\fi
+   \ifnum\qr at size=\qr at j \padd\egroup \advance\qr at i by1
+      \ifnum\qr at size=\qr at i \padd\egroup \let\next=\relax \else \hbox\bgroup\padd \fi
+   \fi \next
+}
+
+\def\qrbeginhook{}
+\def\qrendhook{}
+
+\tmp % \catcode of @ is returned back.
+
+\endinput
+
+
+Options
+-------
+
+You can use \qrset{options} for global-like options and
+\qrcode[options]{encoded text} for local options for one QR code.
+The \qrset{options} is valid within a group (if exists) or in whole
+document. 
+
+Options are separated by comma and they are in two types: single
+word or key=value format. Default options are: 
+
+\qrset{height=2cm, version=0, level=M, tight, verbose, final, nolink}
+
+The options are the same as described in qrcode.pdf at 
+http://www.ctan.org/tex-archive/macros/latex/contrib/qrcode.
+In short:
+
+height=dimen   ... The height of the QRcode without padding.
+
+version=number ... Number 0 to 40 linearly depends on the density of QRcode.
+                   The 0 means that the density is automatically selected.
+
+level=letter   ... L, M, Q o H (low, medium, quality, hight) sets the amount 
+                   of redundancy in the code in order of error recovering.
+
+tight   ... Code without margins.
+padding ... 4module blank margins around the code.
+
+verbose ... Information about calculating in terminal and in the log.
+silent  ... No information about calculating.
+
+final   ... The QR code is calculated and printed.
+draft   ... Only empty rectangle in the same size as QR code is printed.
+
+nolink  ... The QR code is not active hyperlink.
+link    ... The QR code is active hyperlink to "encoded text".
+            Note that link option works in pdfTeX (luaTeX) only.
+
+qrborder={R G B}  ... The color of the frame around active hypertext space
+                      if link option is set. R G B (red green blue) are decimal 
+                      numbers from 0 to 1. The frame is visible only in
+                      pdf viewers. Default: invisible frame.
+
+Example:
+
+\qrset{silent}     % ... all codes will be silent in the log and terminal.
+\qrcode [height=3cm, link, padding, qrborder={1 0 0}] {http://petr.olsak.net}  
+                   % ... 3cm QRcode as hyperlink
+
+Note:
+
+The saving/restoring pre-calculated QRcodes isn't supported by default.
+If you are printing the same QR codes repeatedly, use \setbox/\copy
+technique. For example:
+
+\newbox\mybox
+\setbox\mybox=\hbox{\qrcode{encoded text}}
+\copy\mybox \copy\mybox \copy\mybox etc.
+
+If you have a huge amount of different QR codes, you can use draft/final options
+or you can use REF file from OPmac. See the OPmac trick 
+
+   http://petr.olsak.net/opmac-tricks-e.html#qrcode
+
+The \qrdata macro is saved after each \qrcode calculation in the format
+{size}{111101011...001} where size is the number of columns or rows in QR
+square and second parameter includes size^2 ones or zeros which means black
+or white modules (scanned left to right, top to bottom). Another information
+can be retrieved from \qrtext macro (encoded text before expanding) and
+\qretext macro (encoded text where \{, \\ etc. are expanded to {, \ etc.).
+The macros \qrdata, \qrtext and \qretext are saved globally.
+
+
+Non-ASCII characters
+--------------------
+
+If you are using csplain with pdfTeX (no XeTeX, no LuaTeX) then UTF-8 input
+is correctly interpreted from \qrcode parameter. 
+
+The technical background: the encTeX's \mubyte is set to zero during
+scanning the \qrcode parameter, so the parameter is rawly UTF-8 encoded and
+this is correct for QR codes.
+
+Problems: 
+1. You cannot use \qrcode{parameter} inside another macro, bacause UTF-8
+   encoded parameter is reencoded already.
+2. You cannot use XeTeX or LuaTeX because UTF-8 encoded parameter is
+   reencoded to Unicode already. And the backward conversion from Unicode 
+   to UTF-8 isn't implemented here at macro level.
+
+
+History
+-------
+
+Jun 2015  released
+Jul. 2015 \xprncodes=0space (bug fixed)


Property changes on: trunk/Master/texmf-dist/tex/generic/olsak-misc/qrcode.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/olsak-misc/scanbase.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/olsak-misc/scanbase.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/olsak-misc/scanbase.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,218 @@
+% scanbase. tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 26. 10. 2002                     Petr Olsak
+
+%  This is a macro for processing the mysql outputs in plain TeX
+%  The input is supposed in the format:
+%
+%
+%  arbitrary text before table
+%  it is ignored 
+%  +------------+------------+----------------------------+
+%  |   header1  |   header2  |  header3 ...               |
+%  +------------+------------+----------------------------+
+%  |   text 1,1 |   text 1,2 |  text 1,3 ...              |
+%  |   text 2,1 |   text 2,2 |  text 2,3 ...              |
+%  |   text 3,1 |   text 3,2 |  text 3,3 ...              |
+%  |   ...      |   ...      |           ...              |
+%  +------------+------------+----------------------------+
+%
+%  You can process such file by
+%
+%  \input scanbase.tex
+%  \def\lineaction{...}
+%  \scanbase file
+%
+%  The macro reads the headres first and then reads the lines 
+%  with the text. The contents of each item can be accessed 
+%  by full expanable macro \e after each line is read. More preciselly, 
+%  \e[header] expands to the body of the appropriate item.
+%  The \lineaction macro is processed after each line is read.
+%  It is supposed that \lineaction is defined by user.
+%
+%  Next line of the table is read after \lineaction, the \e macros have 
+%  a new meaning (items from this next line) and the \lineaction is executed
+%  again. This is repeated until last line of the input table is reached.
+%  Moreower, the \linenum register is available, where the number of the
+%  last scanned line is stored. 
+%
+%  Example:
+%
+%  \input scanbase
+%
+%  \newcount \mylines
+%  \def\bb #1 #2/{\hbox to#1{#2\hss}}
+%
+%  \def\printaction{\global\advance\mylines by1 %% \scanabase works 
+%     \hbox{%                                   %% inside the TeX group 
+%        \bb 2em \the\numline./
+%        \bb 26em \e[subject]/
+%        \bb 10em \e[lastname] \e[firstname]/
+%        \bb 3em \hfill\e[pay2002]/
+%        \bb 3em \hfill\e[pay2001]/}
+%  }
+%  \def\lineaction{\if K\e[member_type]% Institutional members
+%     \printaction
+%     \else \if G\e[member_type]% High school
+%        \printaction
+%     \fi\fi  % I am printing Institutional mambers and high schools only
+%  }
+%  \scanbase database1
+%  \scanbase database2
+%  {\it Number of printed lines: \the\mylines}.
+%  \end
+%
+%  If the \lineaction macro isn't defined by user then scanbase used
+%  its own (default) macro which prints all items from one line
+%  into the one paragraph in comprimend form (you can try this).
+%  
+%  The \scanbase macro opens the TeX group then runs \beginhook
+%  then reads headers, then reads the lines ans processes \linecation
+%  repeatedly, then runs \endhook and finally closes the group.
+%  Default values for \beginhook and \endhook is \relax but user
+%  can define something else.
+
+\newcount\colnum \newcount\numline
+\font\seventt=cstt10 at7pt
+
+\catcode`\^^X=13 \def^^X{}
+
+\def\scanfirstline #1-+^^X|{\scanheader}
+
+\def\scanheader #1 |{\advance\colnum by1
+  \expandafter \ifx \csname e:#1\endcsname \relax
+     \expandafter \def \csname c:\the\colnum\endcsname{#1}%
+     \expandafter \def \csname e:#1\endcsname {}%
+  \else
+     \expandafter \edef \csname c:\the\colnum\endcsname{#1:\the\colnum}%
+  \fi
+  \futurelet \nextchar \testnextchar
+}
+\def\testnextchar{\ifx\nextchar^^X\let\next=\ignorethirdline
+  \else \let\next=\scanheader 
+  \fi \next
+}
+\def\ignorethirdline ^^X+-#1-+^^X{\edef\maxcolumn{\the\colnum}\runfirstitem}
+
+\def\runfirstitem|{\colnum=0 \runitem}
+
+\def\runitem #1 |{\advance\colnum by1
+  \def\tmp{#1}%
+  \ifx\tmp\empty \else
+     \expandafter \ignorefirstspace \tmp^^X%
+  \fi
+  \expandafter\edef\csname e:\csname c:\the\colnum\endcsname\endcsname{\tmp}%
+  \futurelet \nextchar \testnextitem
+}  
+\expandafter \def \expandafter \ignorefirstspace \space#1^^X{\def\tmp{#1}}
+
+\def\testnextitem{\ifx\nextchar^^X\let\next=\runline
+  \else \let\next=\runitem
+  \fi \next
+}
+\def\runline ^^X{\advance\numline by1
+  \lineaction
+  \futurelet \nextchar \testnextline
+}
+\def\testnextline{\ifx\nextchar+\let\next=\endgame
+  \else \let\next=\runfirstitem
+  \fi \next
+}
+\def\endgame+-#1-+^^X{\endinput}
+
+\def\e [#1]{\expandafter\ifx \csname e: #1\endcsname \relax
+    \message{Warning: the #1 column is not defined in header.}%
+  \else \csname e: #1\endcsname \fi
+}
+
+\def\printall{\colnum = 0
+   \noindent \hangindent=\parindent \raggedright
+   \loop
+      \advance\colnum by1
+      {\seventt \ignorespaces \csname c:\the\colnum\endcsname:}\penalty0
+      \csname e:\csname c:\the\colnum\endcsname\endcsname
+      \ifnum\colnum < \maxcolumn , \repeat
+   .\par
+}
+\let\lineaction=\printall
+
+\def\scanbase #1 {\begingroup \endlinechar=`\^^X
+  \def\do##1{\catcode`##1=12 }\dospecials
+  \catcode`\ =10 \beginhook
+  \expandafter \scanfirstline \input #1 \endhook \endgroup}
+
+\let\beginhook=\relax \let\endhook=\relax
+
+\endinput
+
+
+%  Makro na zpracovani databasovych vystupu z mysql pro plain
+%  Nacitane soubory se predpokladaji ve tvaru:
+%
+%
+%  libovolny text pred tabulkou, 
+%  ktery bude ignorovan
+%  +------------+------------+----------------------------+
+%  |   zahlavi1 |   zahlavi2 |  zahlavi3 ...              |
+%  +------------+------------+----------------------------+
+%  |   text 1,1 |   text 1,2 |  text 1,3 ...              |
+%  |   text 2,1 |   text 2,2 |  text 2,3 ...              |
+%  |   text 3,1 |   text 3,2 |  text 3,3 ...              |
+%  |   ...      |   ...      |           ...              |
+%  +------------+------------+----------------------------+
+%
+%  Na takovy soubor je mozno po
+%
+%  \input scanbase.tex
+%
+%  aplikovat makro \scanbase takto:
+%
+%  \scanbase soubor
+%
+%  Makro nacte zahlavi a zacne cist jednotlive radky. Po precteni
+%  kazdeho radku je obsah polozky pripraven v expanznim makru
+%  \e. Presneji \e[zahlavi] expanduje na text odpovidajici polozky.
+%  V teto situaci \scanbase spusti makro \lineaction, ktere si muze
+%  uzivatel definovat jak chce.
+%
+%  Po ukonceni makra \lineaction cte scanbase dalsi radek tabulky, naplni
+%  znovu expanzni makra \e texty polozek z tohoto radku a spusti znovu
+%  \lineaction. To se opakuje tak dlouho, dokud neni ukonceno cteni
+%  tabulky. Navic je makru \lineaction k dispozici registr \numline
+%  obsahujici cislo prave precteneho radku.
+%
+%  Priklad pouziti:
+%
+%  \input scanbase
+%
+%  \newcount \mylines
+%  \def\bb #1 #2/{\hbox to#1{#2\hss}}
+%
+%  \def\printaction{\global\advance\mylines by1 %% \scanabase pracuje 
+%     \hbox{%                                   %% uvnitr skupiny! 
+%        \bb 2em \the\numline./
+%        \bb 26em \e[nazev]/
+%        \bb 10em \e[prijmeni] \e[jmeno]/
+%        \bb 3em \hfill\e[kc2002]/
+%        \bb 3em \hfill\e[kc2001]/}
+%  }
+%  \def\lineaction{\if K\e[typ_clenstvi]% Kolektivni clenove
+%     \printaction
+%     \else \if G\e[typ_clenstvi]% Gymnazia
+%        \printaction
+%     \fi\fi  % tisknu jen kolektivni cleny a gymnazia
+%  }
+%  \scanbase database1
+%  \scanbase database2
+%  {\it Number of printed lines: \the\mylines}.
+%  \end
+%
+%  Pokud neni uzivatelem definovano makro \lineaction, pouzije
+%  scanbase sve vlastni (defaultni) makro, ktere vytiskne vsechny polozky
+%  jednoho radku do odstavce ve velmi zhustenem tvaru (vyzkousejte si).
+%
+%  Kazde \scanbase vstupuje do skupiny, pak spusti \beginhook,
+%  pak cte hlavicku a jednotlive radky, jak bylo receno vyse,
+%  pak spusti \endhook a nakonec vyleze ze skupiny.
+%  Sekvence \beginhook a \endhook muze predefinovat uzivatel, defaltne maji
+%  hodnotu \relax


Property changes on: trunk/Master/texmf-dist/tex/generic/olsak-misc/scanbase.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/olsak-misc/scancsv.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/olsak-misc/scancsv.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/olsak-misc/scancsv.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,242 @@
+% scancsv. tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 26. 2. 2005                     Petr Olsak
+
+%  This is a macro for processing the CSV format in plain TeX. 
+%
+%  The input file is assumed in the form:
+%
+%  "header1";"header2";"header3"; ... "header-n"
+%  "text 1,1";"text 1,2";"text 1,3"; ... "text 1,n"
+%  "text 2,1";"text 2,2";"text 2,3"; ... "text 2,n"
+%  "text 3,1";"text 3,2";"text 3,3"; ... "text 3,n"
+%  ...
+%
+%  You can process such a file by
+%
+%  \input scancsv.tex
+%  \def\lineaction{...}
+%  \scanbase soubor
+%
+%  The separator " can be omited in a arbitrary header or item text.
+%  I.e. the following format is scanned without problems:
+%
+%  "firstname";"lastname";number;RC
+%  "Ferdinand";"Mravenec";1;000111/2244
+%  "Josef";"Vykutal";2;444333/2211
+%
+%  The macro reads the headers and then reads next lines repeatedly.
+%  The full expanable macro \e is ready after the line is read. 
+%  More exactly \e[header] expands to the appropriate item body.
+%  The \lineaction macro is processed after each line is read.
+%  It is supposed that \lineaction is defined by user.
+%
+%  Next line of the table is read after \lineaction, the \e macros have 
+%  a new meaning (items from this next line) and the \lineaction is executed
+%  again. This is repeated until last line of the input table is reached.
+%  Moreower, the \linenum register is available, where the number of the
+%  last scanned line is stored. 
+
+%  Example:
+%
+%  \input scancsv
+%
+%  \newcount \mylines
+%  \def\bb #1 #2/{\hbox to#1{#2\hss}}
+%
+%  \def\printaction{\global\advance\mylines by1 %% \scanabase works 
+%     \hbox{%                                   %% in the TeX group 
+%        \bb 2em \the\numline./
+%        \bb 26em \e[subject]/
+%        \bb 10em \e[lastname] \e[firstname]/
+%        \bb 3em \hfill\e[pay2002]/
+%        \bb 3em \hfill\e[pay2001]/}
+%  }
+%  \def\lineaction{\if K\e[member_type]% Institutional members
+%     \printaction
+%     \else \if G\e[member_type]% High school
+%        \printaction
+%     \fi\fi  % I am printing Institutional mambers and high schools only
+%  }
+%  \scanbase database1
+%  \scanbase database2
+%  {\it Number of printed lines: \the\mylines}.
+%  \end
+%
+%  If the \lineaction macro isn't defined by user then scanbase used
+%  its own (default) macro which prints all items from one line
+%  into the one paragraph in comprimend form (you can try this).
+%  
+%  The \scanbase macro opens the TeX group then runs \beginhook
+%  then reads headers, then reads the lines ans processes \linecation
+%  repeatedly, then runs \endhook and finally closes the group.
+%  Default values for \beginhook and \endhook is \relax but user
+%  can define something else.
+%
+%  The user can redefine the \separator and \obklopeni (surrounding char)
+%  after \input scanbase if there are used another characters than semicolon
+%  and " in the input file.
+
+\def\separator{;}             % separator mezi polozkami
+\def\obklopeni{"}             % nepovinne "obklopeni" polozky
+
+\newcount\colnum \newcount\numline
+
+\catcode`\^^X=13 \def^^X{}
+
+\def\scanheader{\futurelet \nextchar \doheader}
+
+\def\doheader {\expandafter\ifx \obklopeni\nextchar \expandafter \maskheader 
+               \else \expandafter \nomaskheader \fi}
+
+\def\runheader{\advance\colnum by1
+  \expandafter \ifx \csname e:\itemdata\endcsname \relax
+     \expandafter \edef \csname c:\the\colnum\endcsname{\itemdata}%
+     \expandafter \def \csname e:\itemdata\endcsname {}%
+  \else
+     \expandafter \edef \csname c:\the\colnum\endcsname{\itemdata:\the\colnum}%
+  \fi
+  \futurelet \nextchar \testnextchar
+}
+\def\testnextchar{\ifx\nextchar^^X\let\next=\ignorethirdline
+  \else \let\next=\scanheader 
+  \fi \next
+}
+
+\def\ignorethirdline ^^X{\edef\maxcolumn{\the\colnum}\runfirstitem}
+
+\def\runfirstitem #1^^X{\def\tmp{#1}%
+  \ifx\tmp\empty \expandafter\endinput \fi
+  \ifx\tmp\stopmark 
+  \else \colnum=0 
+        \edef\tmp{\noexpand\scanitem #1\separator\noexpand^^X}\expandafter\tmp
+  \fi}
+\def\scanitem {\futurelet \nextchar \doitem}
+
+\def\doitem {\expandafter \ifx \obklopeni\nextchar \expandafter \maskitem 
+             \else \expandafter \nomaskitem \fi}
+
+\def\runitem {\advance\colnum by1
+  \expandafter\edef\csname e:\csname c:\the\colnum\endcsname\endcsname{\itemdata}%
+  \futurelet \nextchar \testnextitem
+}  
+\def\testnextitem{\ifx\nextchar^^X\let\next=\runline
+  \else \let\next=\scanitem
+  \fi \next
+}
+\def\runline ^^X{\advance\numline by1
+  \lineaction
+  \futurelet \nextchar \runfirstitem
+}
+\def\e [#1]{\expandafter\ifx \csname e:#1\endcsname \relax
+    \message{Warning: the #1 column is not defined in header.}%
+  \else \csname e:#1\endcsname \fi
+}
+
+\def\printall{\colnum = 0
+   \noindent \hangindent=\parindent \raggedright
+   \loop
+      \advance\colnum by1
+      {\seventt \ignorespaces \csname c:\the\colnum\endcsname:}\penalty0
+      \csname e:\csname c:\the\colnum\endcsname\endcsname
+      \ifnum\colnum < \maxcolumn , \repeat
+   .\par
+}
+\let\lineaction=\printall
+
+\def\scanbase #1 {\begingroup \endlinechar=`\^^X
+  \edef\maskauvo{\obklopeni####1\obklopeni\separator}
+  \edef\maskaneuvo{####1\separator}
+  \expandafter\def \expandafter\maskheader   \maskauvo   {\def\itemdata{##1}\runheader}
+  \expandafter\def \expandafter\nomaskheader \maskaneuvo {\def\itemdata{##1}\runheader}
+  \expandafter\def \expandafter\maskitem     \maskauvo   {\def\itemdata{##1}\runitem}
+  \expandafter\def \expandafter\nomaskitem   \maskaneuvo {\def\itemdata{##1}\runitem}
+  \edef\scanfirstline ##1^^X{\noexpand\scanheader##1\separator\noexpand^^X}
+  \def\do##1{\catcode`##1=12 }\dospecials
+  \catcode`\ =10 \beginhook
+  \expandafter \scanfirstline \input #1 \relax^^X\endhook \endgroup}
+\def\stopmark{\relax}
+
+\let\beginhook=\relax \let\endhook=\relax
+
+\endinput
+
+%  Makro na zpracovani databasovych vystupu ve formatu CSV pro plain.
+%
+%  Srovnejte tez makro scanbase.tex
+%
+%  Nacitane soubory se predpokladaji ve tvaru:
+%
+%  "zahlavi1";"zahlavi2";"zahlavi3"; ... "zahlavi-n"
+%  "text 1,1";"text 1,2";"text 1,3"; ... "text 1,n"
+%  "text 2,1";"text 2,2";"text 2,3"; ... "text 2,n"
+%  "text 3,1";"text 3,2";"text 3,3"; ... "text 3,n"
+%  ...
+%
+%  Na takovy soubor je mozno po
+%
+%  \input scancsv.tex
+%
+%  aplikovat makro \scanbase takto:
+%
+%  \scanbase soubor
+%
+%  Obklopujici znak " muze u libovolneho zahlavi nebo polozky 
+%  chybet. Tj. je korektni treba i takovy zapis dat:
+%
+%  "jmeno";"prijmeni";cislo;RC
+%  "Ferdinand";"Mravenec";1;000111/2244
+%  "Josef";"Vykutal";2;444333/2211
+%
+%  Makro nacte zahlavi a zacne cist jednotlive radky. Po precteni
+%  kazdeho radku je obsah polozky pripraven v expanznim makru
+%  \e. Presneji \e[zahlavi] expanduje na text odpovidajici polozky.
+%  V teto situaci \scanbase spusti makro \lineaction, ktere si muze
+%  uzivatel definovat jak chce.
+%
+%  Po ukonceni makra \lineaction cte scanbase dalsi radek tabulky, naplni
+%  znovu expanzni makra \e texty polozek z tohoto radku a spusti znovu
+%  \lineaction. To se opakuje tak dlouho, dokud neni ukonceno cteni
+%  tabulky. Navic je makru \lineaction k dispozici registr \numline
+%  obsahujici cislo prave precteneho radku.
+%
+%  Priklad pouziti:
+%
+%  \input scancsv
+%
+%  \newcount \mylines
+%  \def\bb #1 #2/{\hbox to#1{#2\hss}}
+%
+%  \def\printaction{\global\advance\mylines by1 %% \scanabase pracuje 
+%     \hbox{%                                   %% uvnitr skupiny! 
+%        \bb 2em \the\numline./
+%        \bb 26em \e[nazev]/
+%        \bb 10em \e[prijmeni] \e[jmeno]/
+%        \bb 3em \hfill\e[kc2002]/
+%        \bb 3em \hfill\e[kc2001]/}
+%  }
+%  \def\lineaction{\if K\e[typ_clenstvi]% Kolektivni clenove
+%     \printaction
+%     \else \if G\e[typ_clenstvi]% Gymnazia
+%        \printaction
+%     \fi\fi  % tisknu jen kolektivni cleny a gymnazia
+%  }
+%  \scanbase database1
+%  \scanbase database2
+%  {\it Number of printed lines: \the\mylines}.
+%  \end
+%
+%  Pokud neni uzivatelem definovano makro \lineaction, pouzije
+%  scanbase sve vlastni (defaultni) makro, ktere vytiskne vsechny polozky
+%  jednoho radku do odstavce ve velmi zhustenem tvaru (vyzkousejte si).
+%
+% Kazde \scanbase vstupuje do skupiny, pak spusti \beginhook,
+% pak cte hlavicku a jednotlive radky, jak bylo receno vyse,
+% pak spusti \endhook a nakonec vyleze ze skupiny.
+% Sekvence \beginhook a \endhook muze predefinovat uzivatel, defaltne maji
+% hodnotu \relax
+%
+% Uzivatel muze po nacteni \input scanbase predefinovat makra \separator
+% a \obklopeni (viz nize), pokud jsou v datech polozky a zahlavi 
+% oddeleny jinymi znaky nez strednik a symbol palce. 
+


Property changes on: trunk/Master/texmf-dist/tex/generic/olsak-misc/scancsv.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/olsak-misc/xmlparser.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/olsak-misc/xmlparser.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/olsak-misc/xmlparser.tex	2016-06-22 22:28:57 UTC (rev 41526)
@@ -0,0 +1,333 @@
+% xmlparser.tex
+%%%%%%%%%%%%%%%%%%
+% Petr Olsak  2016
+
+% After \input xmlparser you can do:
+
+% \xmlprep {domument.xml} {document.out}
+% You can define all tags used in the document.xml 
+% in the form \def\XMLtag#1#2{...}.  Then you can process:
+% \input document.out
+
+% The macro \xmlprep {input.xml} {output-file} converts XML document to a
+% TeX-friendly format. You can define used macros and do \input output-file. 
+% More information is at the end of this document
+
+\newwrite\xmloutfile
+\def\xmlprep#1#2{% #1=input file, #2=output file
+   \ifx\relax#2\relax \chardef\xmloutfile=16 \else
+   \immediate\openout\xmloutfile=#2 \fi
+   \begingroup \everypar={\setbox0=\lastbox\par \xscan}\input#1 \endgroup
+   \immediate\closeout\xmloutfile
+}
+\long\def\xscan#1<{\ifx\xscan#1\xscan \else\toks0={#1}\xprint{\the\toks0\npercent}\fi\xtag}
+
+\def\npercent#1{}\edef\npercent{\expandafter\npercent\string\%} % normal %
+\def\xprint#1{\immediate\write\xmloutfile{\xindent#1}}
+\def\xindent{}
+
+\def\xtag#1{\ifx#1!\expandafter\xtagH \else\fihere\xtagA#1\fi}
+\def\xtagA#1#2>{\ifx#1?\xtagE#2>\else\ifx#1/\xtagG#2>\else\xtagB#1#2>/>\end\fi\fi}
+\def\xtagB#1/>#2\end{\ifx>#2>\let\tmp=n\xtagC#1 \end\else \let\tmp=/\xtagC#1> \end\fi}
+\def\xtagC#1 #2\end{\def\currargs{}\ifx>#2>\xtagD#1\else \xtagF#2\xtagD#1>\fi}
+\def\xtagD#1>{\bgroup\def\currtag{#1}%
+   \ifx\tmp/\xprint{\string\XML#1\space{\currargs}{}}\egroup\else
+   \xprint{\string\XML#1\space{\currargs}\iftrue\string{\else}\fi\npercent}%
+   \edef\xindent{\xindent\space\space}\fi
+}
+\def\xtagE#1?>{\xprint{\string\META\space{#1}}}
+\def\xtagF#1>{\def\currargs{#1}}
+\def\xtagG#1>{\def\tmp{#1}\ifx\tmp\currtag\else
+   \message{WARNING: <\currtag>...</#1> doesn't match}\fi
+   \egroup\xprint{\iffalse{\else\string}\fi\npercent}%
+}
+\def\xtagH#1{\ifx#1-\expandafter\xtagI \else \fihere\xtagJ#1\fi}
+\def\xtagI#1-->{} % comment in the format <!-- ... -->
+\def\xtagJ#1 #2>{\xprint{\string\SPEC#1\space{#2}}}
+\def\fihere#1\fi{\fi#1}
+
+\def\xarg#1{\xargA#1 ==}
+\def\xargA#1#2={\def\xargN{#1#2}\ifx#1=\else\expandafter\xargB\fi}
+\def\xargB#1{\ifx#1"\expandafter\xargC\else\fihere\xargE#1\fi}
+\def\xargC#1"{\xargD{#1}}
+\def\xargD#1{\expandafter\def\csname ARG\xargN\endcsname{#1}\xargA}
+\def\xargE#1{\ifx#1'\expandafter\xargF\else\fihere\xargG#1\fi}
+\def\xargF#1'{\xargD{#1}}
+\def\xargG#1 {\xargD{#1}}
+
+\def\META#1{}  \def\SPECDOCTYPE#1{}
+
+\def\entity#1;{\csname ent:#1\endcsname}
+\def\declentity#1#2{\expandafter\def\csname ent:#1\endcsname{#2}}
+
+\endinput
+
+--------------------------------------------------------------------------
+
+Documentation
+=============
+
+Introduction example. Suppose the test.xml file:
+
+--------------------
+
+<?xml version="1.0" encoding="utf8"?>
+<pricelist>
+  <!-- This is price list of a virtual firm -->
+  <name>Computer components</name>
+  <validity from="1.1.2000" to="31.3.2000"/>
+  <firm>
+    <name>První hardwarová, s.r.o.</name>
+    <address>
+      <street>Průmyslová 12</street>
+      <city>Praha 10</city>
+      <postalcode>100 000</postalcode>
+      <email>info at prhv.cz</email>
+    </address>
+  </firm> 
+  <offer>
+    <product category="polohovací zařízení" code="pxbd-21">
+      <name>Hyperoptická <em>digitální</em> myš</name>
+      <price currency="CZK">368.30</price>
+    </product>
+    <product category="pevné disky" code="sbhd-99">
+      <name>Soft-slow disc < 19,3 GB</name>
+      <price currency="CZK">8500</price>
+    </product>
+    <product category="polohovací zařízení" code="pxbd-13">
+      <name>Special touchpad</name>
+      <price currency="CZK">5635.20</price>
+    </product>
+  </offer>
+</pricelist>
+
+--------------------
+
+When you process it by \xmlprep {test.xml} {test.out} you get:
+
+--------------------
+
+\META {xml version="1.0" encoding="utf8"}
+\XMLpricelist {}{%
+  \XMLname {}{%
+    Computer components%
+  }%
+  \XMLvalidity {from="1.1.2000" to="31.3.2000"}{}
+  \XMLfirm {}{%
+    \XMLname {}{%
+      První hardwarová, s.r.o.%
+    }%
+    \XMLadddress {}{%
+      \XMLstreet {}{%
+        Průmyslová 12%
+      }%
+      \XMLcity {}{%
+        Praha 10%
+      }%
+      \XMLpostalcode {}{%
+        100 000%
+      }%
+      \XMLemail {}{%
+        info at prhv.cz%
+      }%
+    }%
+  }%
+  \XMLoffer {}{%
+    \XMLproduct{category="polohovací zařízení" code="pxbd-21"}{%
+      \XMLname {}{%
+        Hyperoptická %
+        \XMLem {}{%
+          digitální%
+        }%
+        myš%
+      }%
+      \XMLprice {currency="CZK"}{%
+        368.30%
+      }%
+    }%
+    \XMLproduct {category="pevné disky" code="sbhd-99"}{%
+      \XMLname {}{%
+        Soft-slow disc < 19,3 GB%
+      }%
+      \XMLprice {currency="CZK"}{%
+        8500%
+      }%
+    }%
+    \XMLproduct {category="polohovací zařízení" code="pxbd-13"}{%
+      \XMLname {}{%
+        Special touchpad%
+      }%
+      \XMLprice {currency="CZK"}{%
+        5635.20%
+      }%
+    }%
+  }%
+}%
+
+--------------------------
+
+This format is more comfortable for further TeX processing.
+You can define appropriate macros, for example:
+
+--------------------------
+
+\newtoks\street \newtoks\city \newtoks\postalcode \newtoks\email
+
+\def\XMLpricelist#1{} % only process second argument ...
+\def\XMLname#1#2{{\bf#2}\medskip}
+\def\XMLvalidity#1#2{}
+\def\XMLfirm#1#2{\bgroup
+   \def\XMLname##1##2{{\it##2}\par}%
+   \def\XMLaddress##1##2{##2\printaddress}%
+   \def\XMLstreet##1##2{\street{##2}}%
+   \def\XMLcity##1##2{\city{##2}}%
+   \def\XMLpostalcode##1##2{\postalcode{##2}}%
+   \def\XMLemail##1##2{\email{##2}}%
+   \def\printaddress{ulice: \the\street, 
+      mesto: \the\postalcode\space\the\city, email: {\tt\the\email}} 
+   Dodavatel: #2\par
+   \egroup
+}
+\def\XMLoffer#1{}
+\def\XMLproduct#1#2{\bgroup
+   \xarg{#1}%
+   \def\XMLname##1##2{\def\name{##2}}%
+   \def\XMLprice##1##2{\xarg{currency=?}\xarg{##1}\def\price{##2}}
+   #2%
+   \centerline{\name\space(\ARGcode)\dotfill\price\space\ARGcurrency}
+   \egroup
+}
+\def\XMLem#1#2{{\it#2} \ignorespaces}
+
+\catcode`&=13 \let&=\entity
+\declentity{lt}{$<$}
+
+\input test.out
+
+----------------------------
+
+After \input test.out, you get the desired document.
+
+
+Features of the \xmlprep conversion
+===================================
+
+The <tag arguments>text</tag> is converted to:
+
+   \XMLtag {arguments}{%
+      text%
+   }%
+
+The <tag arguments/> or <tag/> are converted to
+
+   \XMLtag {arguments}{}  or  \XMLtag {}{}
+
+The <!-- text --> is ignored.
+
+The <?text?> is converted to:
+
+   \META {text}
+
+The <!TEXT text> is converted to:
+
+   \SPECTEXT {text}
+
+The closings </tags> are checked to the opening <tag>. 
+The nested tags are indented in the output.
+
+
+Scanning of the arguments
+=========================
+
+The <tag arguments> are converted to \XMLtag{arguments}{%, so the arguments
+are saved as first parameter of the \XMLtag macro. Arguments are typically
+in the form
+
+   argA="valueA" argB="valueB" argC="valueC"
+
+You can define
+
+   \def\XMLtag#1#2{\bgroup \xarg{#1}...process #2\egroup}
+
+The \xarg{arguments} scans the arguments given in the parameter. The result of
+\xarg{"valueA" argB="valueB" argC="valueC"} is equivalent to
+\def\ARGargA{valueA}\def\ARGargB{valueB}\def\ARGargC{valueC}, so you can use
+these macros in further processing.
+
+There are alternatives of the format of arguments:
+
+   argA='valueA' or argA=valueA (separated by space or end of arguments).
+
+The \xarg macro is able to treat these alternatives properly.
+
+Recommendation: If you assume default values of arguments then do something
+similar to this:
+
+   \xarg{argA="defaultA" argB="defaultB"}\xarg{#1}.
+
+
+XML entities
+============
+
+The XML text includes sometimes the entity in the form &name; If it is true
+in your XML document, then you can set & as active with the meaning \entity 
+and declare the used entities by \declentity{name}{what to do}. If the document 
+includes the entities &l; > & (for example) then you can do:
+
+   \catcode`&=13 \let&=\entity
+   \declentity{lt}{$<$}
+   \declentity{gt}{$>$}
+   \declentity{amp}{\&}
+
+
+Various approaches for \XMLtag definitions
+==========================================
+
+Classical approach is
+
+   \def\XMLtag#1#2{\bgroup process arguments #1, process body #2\egroup}
+
+You can define \XMLtag with only one parameter. Then the second parameter is
+normally processed in the group. This is usable if you need to keep the
+possibility of catcode changing in the document. If you need to process
+arguments in the same group as body then do something like this:
+
+   \def\XMLtag#1{\bgroup \xarg{#1}\let\next=}
+
+If you read body in #2 then you can decide what to do before and what to do
+after:
+
+   \def\XMLtag#1#2{what to do before #2 what to do after}
+
+If the body of <tag> includes data declared in <tagA>, <tabB>, then you can
+save the data first and then print the result in the part "what to do after". 
+Example:
+
+   <tag> <tagA>somethingA</tagA> <tagB>somethingB</tagB> </tag>
+
+   \newtoks\dataA \newtoks\dataB
+   \def\XMLtag#1#2{\bgroup
+      \def\XMLtagA##1{\dataA=}\def\XMLtagB##1{\dataB=}%
+      #2% process the body, dataA and dataB are set.
+      print \the\dataB and \the\dataA.
+      \egroup}
+
+The meaning of the tag can depends on the outer tag used. See the "name" tag
+in the introduction example. Then you must to define various meaning of such
+tag inside another \XMLtag macro. 
+
+   <tagA> <name>My name</name> </tagA> <tagB> <name>City name</name> </tagB>
+
+   \def\XMLtagA#1#2{\bgroup
+       \def\XMLname##1##2{...}%
+       ...
+       \egroup
+   }
+   \def\XMLtagB#1#2{\bgroup
+       \def\XMLname##1##2{...something different}%
+       ...
+       \egroup
+   }
+
+-------------------------------------------------------
+


Property changes on: trunk/Master/texmf-dist/tex/generic/olsak-misc/xmlparser.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2016-06-22 22:07:08 UTC (rev 41525)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2016-06-22 22:28:57 UTC (rev 41526)
@@ -1657,6 +1657,7 @@
  'ocgx',        'tikz.*\.code\.tex|' . $standardtex,
  'odsfile',     '\.lua|' . $standardtex,
  'ofs',         '^ofs\.tex|ofsdef\.tex|ofs-.*\.tex|\.sty|a.*\.tex|.*fn\.tex',
+ 'olsak-misc',	'(qrcode|scanbase|scancsv|xmlparser)\.tex',
  'pageslts',    '\.sty|[^c]\.cfg',      # not ltxdoc.cfg
  'papermas',    '\.sty|[^c]\.cfg',      # not ltxdoc.cfg, would be system-wide
  'passivetex',  '\.xmt|' . $standardtex,

Modified: trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc	2016-06-22 22:07:08 UTC (rev 41525)
+++ trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc	2016-06-22 22:28:57 UTC (rev 41526)
@@ -39,6 +39,7 @@
 depend midnight
 depend navigator
 depend ofs
+depend olsak-misc
 depend pdf-trans
 depend plainpkg
 depend schemata

Added: trunk/Master/tlpkg/tlpsrc/olsak-misc.tlpsrc
===================================================================


More information about the tex-live-commits mailing list